Get reference information for the Job Sync API.
Closed BETA:
During BETA, Indeed can support a limited number of ATS partners.
Indeed maintains a waiting list. To indicate your interest, submit an integration request. Indeed keeps the request on file and will reach out when ready to onboard you.
Note:
By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.
Mutations
jobsIngest
jobsIngest return type
Input objects
CreateSourcedJobPostingInput
Input object with job data for the submitted or updated job posting.
Field | Type | Description |
---|---|---|
body | SourcedJobPostingBodyInput | Required. Job description. |
metadata | SourcedJobPostingMetadataInput | Required. Information about the job posting. |
applyMethod | SourcedJobPostingApplyMethodInput | Optional. How to apply to the job. |
CreateSourcedJobPostingsInput
Base input object for the createSourcedJobPostings
mutation.
Field | Type | Description |
---|---|---|
jobPostings | CreateSourcedJobPostingInput[] | Required. Job postings to be created. |
EmployerIdentifiersInput
Input object of employer ID types, which are communicated individually to non-Indeed internal users.
An employer identifier uniquely identifies an employer.
Clients that have Indeed employer key (encrypted version of fccId
):
{
"type": "INDEED_EMPLOYER",
"id": "<Indeed employerKey>"
}
Field | Type | Description |
---|---|---|
type | String | Required. Magic string that indicates the ID type.
If you are an Indeed internal user, view the valid types at Otherwise, the type is communicated individually. |
id | ID | Required. ID. |
ExpireSourcedJobBySourcedPostingIdInput
Input object that contains Indeed employer job ID.
Field | Type | Description |
---|---|---|
sourcedPostingId | ID | Required. Indeed employer job ID (UUID4 value).
Indeed generates this unique ID for each submitted job posting, and ATS can get it from the response of job creation. Use this ID to expire the job posting. |
ExpireSourcedJobsBySourcedPostingIdInput
Base input object for the expireSourcedJobsBySourcedPostingId
mutation.
Supports bulk expiration of multiple jobs.
Field | Type | Description |
---|---|---|
jobs | ExpireSourcedJobBySourcedPostingIdInput[] | Required. Jobs to be expired, by sourcedPostingId . |
PeriodRangeInput
An input representing a range of time periods.
If the maximum amount of time is unbounded, exclude the max
field or specify null
. If the value is a single period, include the same value in the min
and max
fields.
Field | Type | Description |
---|---|---|
min | Period | Required. The minimum ISO8601 date period or length represented by this range. This field supports ONLY the date portion of ISO8601 durations. |
max | Period | Optional. The maximum ISO8601 date period or length represented by this range.
This field supports ONLY the date portion of ISO8601 durations.
If the range is open, exclude this field or set it to |
SourcedJobPostingApplyMethodInput
Input object with information about how to apply to the job.
Field | Type | Description |
---|---|---|
indeedApply | SourcedJobPostingIndeedApplyInput | Optional. Apply through Indeed Apply. |
SourcedJobPostingBodyInput
Field | Type | Description |
---|---|---|
title | String | Required. Job title. Do not include other types of information, such as employment type, job location, job descriptions, copies, or headlines. |
subtitle | String | Optional. Subheader for the job title.
Example: "A bright and pleasant workplace" |
description | String | Required. Description for the job posting.
This field is limited to 65000 bytes. ASCII characters are 1 byte, while other characters are from 2 to 3 bytes. Ensure that the information in this field matches the details on the URL in your This field is the source of the raw text that Indeed shows to job seekers. Includes all job-relevant information, including text that can also be provided in other fields in the XML, such as education or experience.
|
descriptionFormatting | SourcedJobPostingFormattingType | Required. How to parse description.
You can use an HTML-formatted job description by passing |
salary | SourcedJobPostingSalaryInput | Optional. Structured salary information for this job. |
hasProbationaryPeriod | JobHasProbationaryPeriod | Required. Indicates whether the job has a probationary period. |
probationaryPeriod | SourcedJobPostingProbationaryPeriodInput | Optional. Probationary period with a specific salary.
In Japan, some jobs have probationary periods with different salaries. Use this entity only for jobs in Japan with a probationary period. If your job is not in Japan or is in Japan and does not have a probationary period, do not include this entity. It might lead to your job being moderated. |
location | SourcedJobPostingLocationInput | Required. Job location. |
benefits | String[] | Required. A list of benefits associated with the job.
Specify separate, distinct benefits as multiple strings in the list. If the job does not have explicit non-salary benefits, specify an empty list. |
SourcedJobPostingFineGrainedJobSalaryInput
Input object with salary information for the job.
Use minor currency units, such as cents, pence, or yen, for salary values.
Field | Type | Description |
---|---|---|
totalSalaryMinor | Int64 | Optional. The total salary of a job for the specified period, in minor currency units.
Examples:
|
workingHours | Float | Optional. Expected number of hours of work expected per period. This is not necessarily a maximum number of hours a worker can
work during the period , but an expected minimum.
Examples:
|
totalOvertimeHours | Float | Optional. Total maximum overtime work hours for this job in the specified period, through period . |
statutoryOvertimeHours | Float | Optional. Statutory overtime work hours in the specified period, through period . Accepts fractions of an hour. |
fixedOvertimeSalaryMinor | Int64 | Optional. If the overtime pay, fixedOvertimePay , is not included in the pay and is a fixed value, specify it in this field.
Examples:
|
fixedOvertimePay | Boolean | Required. If a base salary already presumes a certain number of overtime hours without pay, a job must positively affirm this in this field.
Example: In the US, jobs that meet certain requirements can be designated as overtime exempt. For more information, see the U.S. Department of Labor Fact Sheet #17A: Exemption for Executive, Administrative, Professional, Computer & Outside Sales Employees Under the Fair Labor Standards Act (FLSA). Example: In Japan, fixed overtime means that the overtime wage is already fixed into the salary. For details, see What is Fixed Overtime Pay?. |
SourcedJobPostingIndeedApplyInput
Input object of Indeed Apply information for the job.
Field | Type | Description |
---|---|---|
jobMeta | String | Optional. Additional information.
This information is not displayed externally, but it is sent when using the apply through the |
postUrl | WebUrl | Required. URL to which Indeed posts the application data. Encode this URL. Must be HTTPS. |
phoneRequired | JobRequirement | Optional. Indicates whether the phone number field is displayed on the job.
Default is |
coverLetterRequired | JobRequirement | Optional. Indicates whether the message or cover letter field is required.
Default is |
resumeRequired | JobRequirement | Optional. Indicates whether a resume is required (YES ) or optional (OPTIONAL ), or whether to hide the resume upload option from the user (NO ).
If you specify optional or hidden ( Default is |
resumeFieldsRequired | IndeedApplyConfigurationResumeField[] | Optional. List of resume fields that the job seeker's resume must include.
This field overwrites the phone configuration parameters, if provided. |
resumeFieldsOptional | IndeedApplyConfigurationResumeField[] | Optional. List of resume fields that the job seeker's resume can include.
This field overwrites the phone configuration parameters, if provided. |
nameFormat | IndeedApplyNameFormatType | Optional. Indicates whether a single field for the full name is sufficient in the apply form, or the full name must be split into first and last name. |
applyQuestions | WebUrl | Optional. URL that returns a JSON-formatted string of questions to ask during the Indeed Apply application process. |
apiToken | ID | Required. API token. Required for Indeed Apply. For more details, see Generate an API token. |
SourcedJobPostingJobContactInfoInput
Field | Type | Description |
---|---|---|
contactEmail | EmailAddress | Required. Email address of the contact for the job.
Required by the Indeed Search Quality team. Indeed recommends that the contact email domain be the same email domain as the URL of the company, or the |
contactName | String | Optional. Name for the client's contact. |
contactPhone | PhoneNumber | Optional. Phone number for the client's contact. |
SourcedJobPostingJobContactInput
Input object that lists job contacts.
Provides users access to the job in some systems on Indeed.
Field | Type | Description |
---|---|---|
contactType | String[] | Required. Closest roles that the contact has:
|
contactInfo | SourcedJobPostingJobContactInfoInput | Required. Information about how to reach the contact. |
SourcedJobPostingJobSourceInput
Field | Type | Description |
---|---|---|
companyName | String | Required. Name of the company where the job is performed. |
companyWebsite | WebUrl | Optional. Root website of the company. For example, https://www.indeed.com . If the company is a franchise, use the brand website. |
sourceName | String | Required. The name of the parent organization that is hiring for the role. For example, if subsidiaries or franchises with multiple-branded locations under the same company exist, those jobs have the same value in the sourceName field. The sourceName must be unique across all job groups, and a sourceName can have only one sourceType , which is the type of organization.
When a user claims their jobs on Indeed, this identifier determines the granular group of jobs that are associated with their account. |
sourceType | String | Required. Type of organization that is hiring for this role:
|
employerIds | EmployerIdentifiersInput[] | Optional. Replaces externalEmployerId and employerKey . |
SourcedJobPostingLocationInput
Implementation detail: We'll need to format this info into the existing detailed_location UDDT.
Field | Type | Description |
---|---|---|
latitude | Float | Optional. Latitude of the location where the job is performed. |
longitude | Float | Optional. Longitude of the location where the job is performed. |
country | CountryCode | Required. Country code of the country where this job is located. For the list of country codes, see Supported language codes, country codes, and locales. Corresponds to GIS admin0 . |
streetAddress | String | Optional. Street address of the primary work location for the job. Include the street name and number.
Example (USA): 1600 Pennsylvania Ave Example (Japan): 2-7-2 |
cityRegionPostal | String | Optional. City and administrative region for your country, such as state, county, or prefecture, and postal code.
Example (USA): Washington, District of Columbia, 20500 Example (Japan): 100-8994 東京都千代田区丸の内 Example (UK): Mayfair, London, W1J |
SourcedJobPostingMetadataInput
Field | Type | Description |
---|---|---|
jobSource | SourcedJobPostingJobSourceInput | Required. Information about the source of the job, whether a company, agency, franchise, and so on. |
jobPostingId | String | Required. A unique identifier for the job within the applicant tracking system (ATS). Historically, this value is the reference number. |
jobRequisitionId | String | Optional. Requisition ID for the job in your applicant tracking system (ATS). This value does not need to be unique. |
evergreenRequisitionId | String | Optional. Evergreen requisition ID for the job in your ATS. Use this value when there are multiple job postings over time for the same job. |
talentPoolId | String | Optional. Talent pool ID. Use this value to track the talent pool applications to which this job should be tagged. |
taxonomyClassification | SourcedJobPostingTaxonomyInput | Optional. Classification of the job within Indeed. |
datePublished | DateTime | Required. Date when this job was first published.
|
url | WebUrl | Required. URL for this job posting on your site. Use the URL for the job description page, not the application page. Include the source=Indeed token URL parameter to track clicks from Indeed. |
numberOfHires | Int | Optional. Number of people to be hired for this job posting. |
expirationDate | DateTime | Optional. Date when hiring expires for this posting.
If provided and not changed by a future request, the job can be removed from Indeed. |
photos | SourcedJobPostingPhotoInput[] | Optional. Photos for the job. |
contacts | SourcedJobPostingJobContactInput[] | Required. User and contact information for the job.
Must include exactly one contact with a |
studentMetadata | SourcedJobPostingStudentMetadataInput | Optional. Metadata that defines aspects of jobs that are for college/university students
and recent graduates.
The existence of a non-null value indicates that this is a job posting for an |
applicationDueDate | Date | Optional. The date when applications are due.
This date is inclusive. If |
SourcedJobPostingPhotoInput
Field | Type | Description |
---|---|---|
photoUrl | WebUrl | Required. URL of the photo associated with the job. |
SourcedJobPostingProbationaryPeriodInput
Field | Type | Description |
---|---|---|
probationaryConditions | String | Optional. Text description of the probationary period. Add here the detail on working conditions (e.g. salary, working hours, employment types) during the probationary period if it is different from one after the probation. |
probationarySalary | SourcedJobPostingSalaryInput | Optional. Salary information for the probationary period. |
SourcedJobPostingSalaryInput
Input object of structured salary information for the job. Use the minor currency units for your locale.
In the US, cents is the most minor unit.
In Japan, Yen is the most minor unit.
Use maximumMinor
and minimumMinor
to express a salary range.
If your salary is fixed, set both maximumMinor
and minimumMinor
to the same value. If your salary has a minimum, set only minimumMinor
.
The currency
field uses ISO-4217 codes. For example, USD
or JPY
.
The salaryFrequency
field accepts hour, day, week, month, mile, or year.
Field | Type | Description |
---|---|---|
currency | CurrencyCode | Required. |
maximumMinor | Int64 | Optional. Maximum amount in the local minor currency. |
minimumMinor | Int64 | Required. Minimum amount in the local minor currency. |
period | String | Required. Period to pay.
This value also applies to other fields within this input object. For example, if To ensure your job appears on Indeed, one of the following values is recommended:
|
fineGrainedSalaryInformation | SourcedJobPostingFineGrainedJobSalaryInput | Optional. Additional information related to the salary for the job. |
taskBasedSalaryInformation | SourcedJobPostingTaskBasedSalaryInput | Optional. Additional information related to the task for the job. |
SourcedJobPostingStudentMetadataInput
Metadata that defines aspects of jobs that are for college/university students
and recent graduates.
Field | Type | Description | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
startMonth | YearMonthInput[] | Required. The month the internship starts. If the internship has multiple options in which it may start, specify each month. | |||||||||||||||||||||
period | PeriodRangeInput | Optional. Length of the internship, using the date portion of ISO8601. That is, P[n]Y[n]M[n]W[n]D , without
any hours, minutes, or seconds specified.
When specifying months or years, for the purposes of searching for jobs and
If weeks are specified (P2W), it is normalized to and output as days (P14D). Examples:
| |||||||||||||||||||||
graduationYear | Int[] | Required. The year(s) a candidate must plan to graduate for the candidate to be considered for the job.
If there is no strict requirement, do not specify any value. | |||||||||||||||||||||
programType | String | Optional. The type of internship program.
|
SourcedJobPostingTaskBasedSalaryInput
Input object with task information for the job.
Field | Type | Description |
---|---|---|
taskLengthMinutes | Int64 | Required. Duration of task. |
taskDescription | String | Required. Description for task.
This field is limited to 65000 bytes. ASCII characters are 1 byte, while other characters are from 2 to 3 bytes. |
SourcedJobPostingTaxonomyInput
Field | Type | Description |
---|---|---|
jobTypes | String[] | Optional. Type or types of job, such as full- or part-time or contract. |
categories | String[] | Optional. List of job categories that help job seekers when searching. This optional field is highly recommended to include for job management or to reflect additional information from the job details page. For example, you might find it useful to include facility or department information in this field. |
remoteType | String | Optional. Location flexibility.
Use one of the following strings to best describe this role's location flexibility.
|
education | String | Optional. Desired education level for this job. |
experience | String | Optional. Desired experience for this job. |
occupations | String[] | Optional. Occupation or occupations applicable to this job. |
attributes | String[] | Optional. One or more SUIDs or strings that represent taxonomy attributes. |
attributesBlob | String | Optional. Raw taxonomy input, for rare cases. Incorrect usage of this field can result in the job not appearing on Indeed. |
YearMonthInput
An input type representing a year and month. This type is useful when
input must represent an entire month, instead of a specific date.
Field | Type | Description |
---|---|---|
year | Int | Required. The ISO8601 year for a period representing a whole, single, month. |
month | Int | Required. The ISO8601 month for a period representing a whole, single, month. |
Return types
CreateSourcedJobPostingResult
An intermediary type. A null jobPosting
indicates a problem occurred during job creation. The GraphQL errors object indicates the problem for each null value by indicating the index in the error object.
This object might be updated with additional fields later that would be associated with each posting in a request, regardless of whether it was successful.
Field | Type | Description |
---|---|---|
jobPosting | SourcedJobPosting | Optional. |
CreateSourcedJobPostingsPayload
Field | Type | Description |
---|---|---|
results | CreateSourcedJobPostingResult[] | Required. Return type for each job posting in the createSourcedJobPostings mutation.
The values in the array cannot be null. However, the corresponding A null For rejected job postings, see the returned |
ExpireSourcedJobByJobPostingIdAndSourceInfo
Data from the associated ExpireSourcedJobByJobPostingIdAndSourceInput
.
Field | Type | Description |
---|---|---|
jobPostingId | String | Required. |
sourceName | String | Required. |
ExpireSourcedJobBySourcedPostingIdInfo
Data from the associated ExpireSourcedJobBySourcedPostingIdInput
.
Field | Type | Description |
---|---|---|
sourcedPostingId | String | Required. |
ExpireSourcedJobResult
Field | Type | Description |
---|---|---|
trackingKey | String | Required. Return type for ExpireSourcedJobsBySourcedPostingIdPayload .
Internal tracking ID from logrepo. |
inputData | ExpireSourcedJobResultInfo | Optional. Input values associate with this result. Value is null in the case of an error. |
ExpireSourcedJobsBySourcedPostingIdPayload
Field | Type | Description |
---|---|---|
results | ExpireSourcedJobResult[] | Required. The payload for the expireSourcedJobsByPostingId mutation. |
JobsIngestMutations
Field | Type | Description |
---|---|---|
createSourcedJobPostings | CreateSourcedJobPostingsPayload | Optional. Submit a job posting for ingestion into Indeed.
Successful responses indicate that Indeed received the job posting. The job is indexed and made available (pending spam and fraud detection) at a later time (minutes to hours). If a job is not accepted, the corresponding |
expireSourcedJobsBySourcedPostingId | ExpireSourcedJobsBySourcedPostingIdPayload | Optional. Expires a job posting.
Specify the Indeed does not verify that the job exists before responding, so the response is always |
SourcedJobPosting
Return type for an accepted job posting. Indeed considers a job as accepted if it is a complete job that is accepted for indexing.
Even if accepted, it might not appear on Indeed if it does not adhere to the Indeed Job Posting Standards.
If an accepted job does not appear on Indeed, see My job is not shown on Indeed.
Field | Type | Description |
---|---|---|
sourcedPostingId | ID | Required. UUID for the job, or the Indeed employer job ID.
Indeed generates this unique ID for each submitted job posting. Use this ID to expire the job posting. |
Unions
ExpireSourcedJobResultInfo
Enumerations
IndeedApplyConfigurationResumeField
Values for required and optional resume fields.
See Indeed Resume JSON object fields. This API has the same support.
PHONE
LOCATION
POSITIONS
EDUCATION
SKILLS
LANGUAGES
CERTIFICATIONS
NAME_PRONUNCIATION
DATE_OF_BIRTH
GENDER
IndeedApplyNameFormatType
"""
Show two fields for an applicant's first and last name
"""
FIRST_LAST_NAME
"""
Show a single field for an applicant's full name
"""
FULL_NAME
JobHasProbationaryPeriod
UNKNOWN
NO
YES
JobRequirement
"""
The field will not be shown on the application form.
"""
NO
"""
The field will be shown the an application form as an optional field.
Job Seeker can skip it to complete an application.
"""
OPTIONAL
"""
The field will be shown on the application form as a required field.
Job Seeker must fill it in to complete an application.
"""
YES
SourcedJobPostingFormattingType
Types for formatting.
RICH_FORMATTING
TEXT
Supported language codes, country codes, and locales
languageCode | countryCode | locale | Description |
---|---|---|---|
cs | cs | Czech | |
cs | CZ | cs-CZ | Czech (Czech Republic) |
de | de | German | |
de | BE | de-BE | German (Belgium) |
de | CH | de-CH | German (Switzerland) |
de | DE | de-DE | Standard German |
en | en | English | |
en | AE | en-AE | English (United Arab Emirates) |
en | AU | en-AU | Australian English |
en | BE | en-BE | English (Belgium) |
en | CA | en-CA | Canadian English |
en | CH | en-CH | English (Switzerland) |
en | GB | en-GB | British English |
en | HK | en-HK | English (Hong Kong) |
en | IE | en-IE | English (Ireland) |
en | IN | en-IN | English (India) |
en | MY | en-MY | English (Malaysia) |
en | NZ | en-NZ | English (New Zealand) |
en | PH | en-PH | English (Philippines) |
en | SG | en-SG | English (Singapore) |
en | US | en-US | American English |
en | ZA | en-ZA | English (South Africa) |
es | es | Spanish | |
es | ES | es-ES | Spanish (Spain) |
es | MX | es-MX | Spanish (Mexico) |
fr | fr | French | |
fr | BE | fr-BE | French (Belgium) |
fr | CA | fr-CA | French (Canada) |
fr | CH | fr-CH | French (Switzerland) |
fr | FR | fr-FR | French (France) |
it | it | Italian | |
fr | CH | fr-CH | Italian (Switzerland) |
it | IT | it-IT | Italian (Italy) |
ja | ja | Japanese | |
jp | JP | jp-JP | Japanese (Japan) |
nl | nl | Dutch | |
nl | BE | nl-BE | Dutch (Belgium) |
nl | NL | nl-NL | Dutch (Netherlands) |
pl | pl | Polish | |
pl | PL | pl-PL | Polish (Poland) |
pt | pt | Portuguese | |
sv | sv | Swedish | |
sv | SE | sv-SE | Swedish (Sweden) |
uk | uk | Ukrainian | |
uk | UA | uk-UA | Ukrainian (Ukraine) |
zh | zh | Chinese | |
zh | HK | zh-HK | Chinese (Hong Kong) |
zh | SG | zh-SG | Chinese (Singapore) |
Common errors
The Job Sync API common errors are:
Error | Description and common causes |
---|---|
BAD_USER_INPUT
|
The value of an input parameter is invalid. In particular, the request has incorrect, missing, or incongruent information. For details, see the error message. |
UNAUTHENTICATED
|
The request was not attempted because it did not include sufficient authentication credentials. For details on authentication, see Indeed authentication. |
FORBIDDEN
|
Valid authentication credentials are present but have not been authorized for the endpoint. Ensure that your credentials have been mapped to a corresponding job feed. Without this mapping, you cannot post or edit jobs. Attempting to expire a job outside of your feed also triggers this error. |