Disposition Sync API Guide
Send job application disposition data to Indeed.- Disposition Sync API Reference
- Before you start
- Disposition Sync API glossary
- Disposition Sync API overview
- Send disposition data for Indeed Apply jobs
- Send disposition data for non-Indeed Apply jobs with Indeed tracking token
- Send disposition data for non-Indeed Apply jobs with job ID and job seeker ID
Disposition Sync API Reference
See also the Disposition Sync API Reference.
Back to top
Before you start
Use the client credentials flow (2-legged OAuth) to get a client ID and secret for your application, which you exchange for an access token. Use this token for authentication when you call the Disposition Sync API. The token expires after one hour.
Back to top
Disposition Sync API glossary
Term | Description |
---|---|
application tracking system | See ATS. |
ATS | Application tracking system. Employers use an ATS to:
|
ATS application key | An ATS-assigned unique, publicly shareable ID for an application. |
disposition data | Any kind of update that happens to an application in your ATS. Updates can include actions that a recruiter or hiring manager takes after a candidate applies. For example:
|
Indeed Apply ID | An Indeed-assigned unique ID for Indeed Apply jobs. Used to reference the candidate and the job. |
Indeed tracking token | See Ittk. |
Ittk | Indeed tracking token. An Indeed-assigned unique ID. Used to reference the employer, candidate, job, and more. |
GraphQL | An open-source data query and manipulation language for APIs and a query runtime engine. GraphQL enables clients to use declarative data fetching to specify exactly which data they need from an API. Learn more at GraphQL | A query language for your API. |
Back to top
Disposition Sync API overview
Use the Disposition Sync API to send disposition data for Indeed Apply and non-Indeed Apply jobs to Indeed.
Disposition Sync API integration is required to submit disposition data to Indeed.
Mutations
Use the following Disposition Sync API mutations to send disposition data to Indeed:
Mutation | Description | Application ID |
---|---|---|
sendIndeedApplyDispositions
|
Indeed Apply ID |
|
sendITTKDispositions
|
Indeed tracking token (Ittk) |
|
sendDispositions
|
Job ID and job seeker ID |
Integration phases
Integration with the Disposition Sync API occurs in two phases:
Phase | Description | |
---|---|---|
1 | Review |
When you use the Disposition Sync API to send disposition data to Indeed, Indeed stores the data in the sandbox database. Indeed reviews the data to ensure that the integration works as expected and the disposition status mapping is accurate. |
2 | Production |
When you use the Disposition Sync API to send disposition data to Indeed, Indeed stores the data in the production database. |
Integration guidelines
To integrate the Disposition Sync API, follow these guidelines:
-
For all Indeed-sourced applications, Indeed requires that you send ATS disposition data to Indeed.
Indeed requires at least one disposition data sent with the
NEW
status, which corresponds to when the ATS received the application. -
To use the Disposition Sync API to submit disposition data to Indeed, map each status through which the applications transition to the Indeed standard disposition status that best represents it.
For information about the Indeed standard definition of disposition status, or hiring stages, see the following table.
-
Use the Disposition Sync API to send all disposition statuses through which applications transition. Indeed encourages you to send the disposition data each time a change occurs in your system.
Alternatively, you can send disposition data on a scheduled, periodic basis, but at least once a day.
-
It is acceptable to send duplicate disposition statuses for an application. However, avoid this practice when possible.
-
You can send multiple unique disposition statuses for an application in one or multiple requests to the API.
In both cases, sort the data by the status change timestamp in ascending order before you send it.
-
When possible, combine requests by sending multiple disposition data in one API request. However, send a maximum of 500 disposition data in one request.
If the amount of disposition data exceeds this threshold, split them into multiple requests.
How to call the API
To call the API, POST
the request to the following endpoint:
POST https://apis.indeed.com/graphql
POST
method for all queries and mutations. The API does not support the GET
method.
In the POST
request body, include the mutation or query, an optional operation name, and variable inputs:
{
"query": "...",
"operationName": "...",
"variables": {
"myVariable": "someValue",
...
}
}
In response to your API requests, the API identifies which data was processed successfully or unsuccessfully, with corresponding reasons for any failures.
To call the API, you must provide a valid OAuth token. Otherwise, you receive the 403 Forbidden
error.
Back to top
Send disposition data for Indeed Apply jobs
- Request – Send disposition data for Indeed Apply jobs
- Response – Send disposition data for Indeed Apply jobs
Request – Send disposition data for Indeed Apply jobs
sendIndeedApplyDispositions (input: [IndeedApplyDispositionInput!]!) : SendIndeedApplyDispositionsPayload
Call the API by using the sendIndeedApplyDispositions
mutation:
mutation {
sendIndeedApplyDispositions(
input: [{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
indeedApplyID: "12345",
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
indeedApplyID: "12345",
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
}
]
) {
numberGoodDispositions,
failedDispositions {
IndeedApplyID,
Reason
}
}
}
In the IndeedApplyDispositionInput
input object, all fields are required:
|
|
|
|
|
|
Response – Send disposition data for Indeed Apply jobs
The sendIndeedApplyDispositions
mutation returns the SendIndeedApplyDispositionsPayload
return type.
This return type includes:
- The number of dispositions that succeeded.
- An array of any failed dispositions. Each disposition includes its Indeed Apply ID and the reason for the failure.
Send disposition data for non-Indeed Apply jobs with Indeed tracking token
sendITTKDispositions (input: [ITTKDispositionInput!]!) : SendITTKDispositionsPayload
- Request – Send disposition data for non-Indeed Apply jobs with Indeed tracking token
- Response – Send disposition data for non-Indeed Apply jobs with Indeed tracking token
Request – Send disposition data for non-Indeed Apply jobs with Indeed tracking token
Call the API by using the sendITTKDispositions
mutation:
mutation {
sendITTKDispositions(
input: [{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
ittk: "12345",
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
ittk: "12345",
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
}
]
) {
numberGoodDispositions,
failedDispositions {
ittk,
rationale
}
}
}
In the array of ITTKDispositionInput
input objects, all fields are required:
|
|
|
|
|
|
Response – Send disposition data for non-Indeed Apply jobs with Indeed tracking token
The sendITTKDispositions
mutation returns the SendITTKDispositionsPayload
return type.
This return type includes:
- The number of dispositions that succeeded.
- An array of any failed dispositions. Each disposition includes its Indeed Apply ID and the reason for the failure.
Send disposition data for non-Indeed Apply jobs with job ID and job seeker ID
sendDispositions (input: [DispositionInput!]!) : SendDispositionsPayload
- Request – Send disposition data for non-Indeed Apply jobs with job ID and job seeker ID
- Response – Send disposition data for non-Indeed Apply jobs with job ID and job seeker ID
Request – Send disposition data for non-Indeed Apply jobs with job ID and job seeker ID
Call the API by using the sendDispositions
mutation:
mutation {
sendDispositions(
input: [{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
},
{
dispositionStatus: HIRED,
rawDispositionStatus: "Hired",
rawDispositionDetails: "",
jobIdentifier: {
indeedJobKey: "Job12345"
},
jobSeekerIdentifier: {
indeedJobSeekerKey: "JobSeeker12345"
},
atsName: "MyATS",
statusChangeDateTime: "2023-04-25T13:01:01.01Z"
}
]
) {
numberGoodDispositions,
failedDispositions {
jobSeeker,
job,
rationale
}
}
}
In the array of DispositionInput
input objects, all fields are required:
|
|
|
|
|
|
|
|
Response – Send disposition data for non-Indeed Apply jobs with job ID and job seeker ID
The sendDispositions
mutation returns the SendDispositionsPayload
return type.
This return type includes:
- The number of dispositions that succeeded.
- An array of any failed dispositions. Each disposition includes its Indeed Apply ID and the reason for the failure.
Back to top