Merge ATS integration
Merge ATS is Merge's unified API for applicant tracking systems: one call shape reads and writes whichever ATS (Greenhouse, Lever, Workable, Ashby and others) a Merge Linked Account connects. List and read candidates, applications, jobs, job postings and screening questions, interview stages, interviews, scorecards, offers, attachments, activities, departments, offices, reject reasons, tags, users and EEOC answers; create candidates, applications, activities, interviews and attachments, update candidates, move an application to another stage, ignore a candidate (for example on a GDPR request), and read which fields a write needs for the connected ATS. Creates, updates and stage moves change the live ATS the hiring team works in; ignoring a candidate only blanks Merge's synced copy and stops its updates. Candidates and EEOC answers are sensitive personal data. Not exposed: raw third-party records, passthrough requests to the underlying ATS, hidden assessment routes, and Linked Account, key, webhook, field mapping, scope and sync administration. Calls go to Merge's US tenant (api.merge.dev) only: an organization on Merge's EU or APAC tenant cannot connect. Authentication is a Merge API key (Authorization: Bearer) plus one Linked Account's account token (X-Account-Token), so one connection reads one ATS account.
Say what should happen.
The workflow builds itself.
What you can do with Merge ATS
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Post, 5 operations
get_activity_create_metadataGet activity create metadataGETReturns the request schema the connected ATS accepts to create an activity: fields, required ones and integration-specific parameters. Call it before the write.get_application_create_metadataGet application create metadataGETReturns the request schema the connected ATS accepts to create an application: fields, required ones and integration-specific parameters. Call it before the write.get_attachment_create_metadataGet attachment create metadataGETReturns the request schema the connected ATS accepts to create an attachment: fields, required ones and integration-specific parameters. Call it before the write.get_candidate_create_metadataGet candidate create metadataGETReturns the request schema the connected ATS accepts to create a candidate: fields, required ones and integration-specific parameters. Call it before the write.get_interview_create_metadataGet interview create metadataGETReturns the request schema the connected ATS accepts to create an interview: fields, required ones and integration-specific parameters. Call it before the write.
Candidate, 4 operations
create_candidateCreate candidatePOSTCreates a candidate in the connected ATS. Send model with the candidate fields (first_name, last_name, email_addresses...) and remote_user_id. Call get_candidate_create_metadata first: required fields vary by ATS.get_candidateGet candidateGETReturns a `Candidate` object with the given `id`.list_candidatesList candidatesGETLists candidates of the connected ATS (names, company, title, emails, phones, links, tags, application and attachment ids), filterable by name, email, tag, remote id and created or modified date. Paginated with cursor.update_candidateUpdate candidatePATCHUpdates a candidate in the connected ATS with the fields sent in model; remote_user_id is required. Call get_candidate_update_metadata first to see which fields this ATS lets you change.
Activity, 3 operations
create_activityCreate activityPOSTLogs an activity (note, email or other) on a candidate in the connected ATS (public beta); remote_user_id is required.get_activityGet activityGETReturns an `Activity` object with the given `id`.list_activitiesList activitiesGETReturns a list of `Activity` objects.
Application, 3 operations
create_applicationCreate applicationPOSTCreates an application of a candidate to a job in the connected ATS; remote_user_id is required. Some ATS detect duplicate candidates and attach the application to the existing one.get_applicationGet applicationGETReturns an `Application` object with the given `id`.list_applicationsList applicationsGETReturns a list of `Application` objects.
Attachment, 3 operations
create_attachmentCreate attachmentPOSTAttaches a file to a candidate in the connected ATS from a URL the ATS can download; remote_user_id is required.get_attachmentGet attachmentGETReturns an `Attachment` object with the given `id`.list_attachmentsList attachmentsGETReturns a list of `Attachment` objects.
Interview, 3 operations
create_interviewCreate interviewPOSTCreates a scheduled interview for an application in the connected ATS (public beta); remote_user_id is required.get_interviewGet interviewGETReturns a `ScheduledInterview` object with the given `id`.list_interviewsList interviewsGETReturns a list of `ScheduledInterview` objects.
Department, 2 operations
get_departmentGet departmentGETReturns a `Department` object with the given `id`.list_departmentsList departmentsGETReturns a list of `Department` objects.
Eeoc, 2 operations
get_eeocGet eeocGETReturns one candidate's EEOC answers (race, gender, veteran and disability status), which are sensitive personal data.list_eeocsList eeocsGETLists EEOC answers of candidates (race, gender, veteran and disability status), which are sensitive personal data. Paginated with cursor.
Job, 2 operations
get_jobGet jobGETReturns a `Job` object with the given `id`.list_jobsList jobsGETReturns a list of `Job` objects.
Job interview stage, 2 operations
get_job_interview_stageGet job interview stageGETReturns a `JobInterviewStage` object with the given `id`.list_job_interview_stagesList job interview stagesGETReturns a list of `JobInterviewStage` objects.
Job posting, 2 operations
get_job_postingGet job postingGETReturns a `JobPosting` object with the given `id`.list_job_postingsList job postingsGETReturns a list of `JobPosting` objects.
Offer, 2 operations
get_offerGet offerGETReturns an `Offer` object with the given `id`.list_offersList offersGETReturns a list of `Offer` objects.
Office, 2 operations
get_officeGet officeGETReturns an `Office` object with the given `id`.list_officesList officesGETReturns a list of `Office` objects.
Reject reason, 2 operations
get_reject_reasonGet reject reasonGETReturns a `RejectReason` object with the given `id`.list_reject_reasonsList reject reasonsGETReturns a list of `RejectReason` objects.
Scorecard, 2 operations
get_scorecardGet scorecardGETReturns a `Scorecard` object with the given `id`.list_scorecardsList scorecardsGETReturns a list of `Scorecard` objects.
User, 2 operations
get_userGet userGETReturns a `RemoteUser` object with the given `id`.list_usersList usersGETReturns a list of `RemoteUser` objects.
Account detail, 1 operation
get_account_detailsGet account detailsGETReturns the Linked Account behind the connection: integration name and slug, category, status, end user organization and email, and account type.
Available action, 1 operation
get_available_actionsGet available actionsGETReturns the integration behind the Linked Account and, per Common Model, the operations it supports (FETCH, CREATE...), the fields it fills and the parameters a create must send.
Change stage, 1 operation
change_application_stageChange application stagePOSTMoves an application to another interview stage of its job in the connected ATS (public beta). Pass the target stage id from list_job_interview_stages and remote_user_id.
Ignore, 1 operation
ignore_candidateIgnore candidatePOSTTells Merge to ignore a candidate: Merge sets its properties to null and stops updating it in future syncs (for example after a GDPR request). The reason and message are stored for audit.
Patch, 1 operation
get_candidate_update_metadataGet candidate update metadataGETReturns the request schema the connected ATS accepts to update a candidate: fields, required ones and integration-specific parameters. Call it before the write.
Screening question, 1 operation
list_screening_questionsList screening questionsGETReturns a list of `ScreeningQuestion` objects.
Sync status, 1 operation
get_sync_statusGet sync statusGETReturns the sync state of each Common Model for the Linked Account: last and next sync start, last result and finish time. Data read through the other tools is as fresh as the last sync.
Tag, 1 operation
list_tagsList tagsGETReturns a list of `Tag` objects.
Use Merge ATS from Claude Code, Cursor or Codex
Connect Merge ATS in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its Merge ATS operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect Merge ATS
- Create your workspace
Sign up free. Nothing to install.
- Connect Merge ATS once
Add your Merge ATS connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
Merge ATS integration FAQ
What can you do with the Merge ATS integration?
LiveContext exposes 49 operations on Merge ATS, covering post, candidate, activity and application.
