Create example job
Create and verify an example job on Indeed.
Before you begin
#- 1.Become an Indeed partner. Indeed PLUS partners also get an
employerIdTypefrom Indeed. - 2.Get an access token.
- 3.Optional: To use Indeed Apply, ask Indeed to add it to your app.
When you call the Indeed PLUS APIs, initiate a timeout after 5,000 milliseconds.
API steps
#1. Create job posting
#Send the mutation and headers in a POST request to https://apis.indeed.com/graphql:
curl -X POST \ -L 'https://apis.indeed.com/graphql' \ -H 'Authorization: Bearer <access_token>' \ -H 'Content-Type: application/json' \ -d '{"query":"mutation SubmitJobPostingExample($employerIdType: String!) {\n jobsIngest {\n createSourcedJobPostings(\n input: {\n jobPostings: [\n {\n body: {\n title: \"Customer Support\"\n description: \"<h2 data-segment-type=\\\"header\\\" data-segment-label=\\\"JobDescription\\\">\\n Description\\n</h2>\\n<div data-segment-type=\\\"content\\\" data-segment-label=\\\"JobDescription\\\">\\n You will be responsible for supporting customers in this role.\\n</div>\\n<h2 data-segment-type=\\\"header\\\" data-segment-label=\\\"Pay\\\">\\n Pay\\n</h2>\\n<div data-segment-type=\\\"content\\\" data-segment-label=\\\"Pay\\\">\\n 2,000 yen per hour\\n</div>\\n<h2 data-segment-type=\\\"header\\\" data-segment-label=\\\"WorkHours\\\">\\n Working hours\\n</h2>\\n<div data-segment-type=\\\"content\\\" data-segment-label=\\\"WorkHours\\\">\\n 8 hours per day\\n At least 4 days per week\\n</div>\\n\"\n descriptionFormatting: RICH_FORMATTING\n benefits: []\n salary: {\n currency: \"JPY\"\n period: \"HOUR\"\n minimumMinor: 2000\n fineGrainedSalaryInformation: {\n totalSalaryMinor: 2000\n workingHours: 1\n fixedOvertimePay: false\n }\n }\n hasProbationaryPeriod: NO\n location: { country: \"JP\", streetAddress: \"108-0023 東京都港区芝浦3-1-21 田町ステーションタワーS18階\" }\n }\n metadata: {\n jobSource: {\n companyName: \"Example Company\"\n sourceName: \"Example Source Name\"\n sourceType: \"Employer\"\n employerIds: [{ type: $employerIdType, id: \"1\" }]\n }\n taxonomyClassification: { jobTypes: [\"75GKK\"], occupations: [\"N3YNG\"], attributes: [\"7ADHN\"] }\n jobPostingId: \"AtsJobPostingId1\"\n datePublished: \"2023-09-01T09:35:00+09:00\"\n url: \"https://example.com/jobs/aaabbbccc\"\n contacts: { contactType: \"contact\", contactInfo: { contactEmail: \"contact@career.example.com\" } }\n }\n }\n ]\n }\n ) {\n results {\n jobPosting {\n sourcedPostingId\n }\n }\n }\n }\n}","operationName":"SubmitJobPostingExample","variables":{"employerIdType": "<employerIdType>"}}'Request headers:
| Header | Value | Description |
|---|---|---|
Authorization | Bearer <token> | Use this header to authenticate with the server and access protected resources. Pass the access token in this header with the Bearer authentication scheme. For the oauth/v2/tokens endpoint, use the basic authentication scheme instead of passing client_id and client_secret in the request body. See Get an access token, Authorization header (opens in a new window), and Basic authentication scheme. |
Content-Type | application/json | The media type (opens in a new window) of the resource. See Content-Type header (opens in a new window). |
The -d parameter contains this GraphQL query. Replace <access_token> with your access token and <employerIdType> with your employer ID type from Indeed.
mutation SubmitJobPostingExample($employerIdType: String!) { jobsIngest { createSourcedJobPostings(input: { jobPostings: [{ body: { title: "Customer Support" description: "<h2 data-segment-type=\"header\" data-segment-label=\"JobDescription\">\n Description\n</h2>\n<div data-segment-type=\"content\" data-segment-label=\"JobDescription\">\n You will be responsible for supporting customers in this role.\n</div>\n<h2 data-segment-type=\"header\" data-segment-label=\"Pay\">\n Pay\n</h2>\n<div data-segment-type=\"content\" data-segment-label=\"Pay\">\n 2,000 yen per hour\n</div>\n<h2 data-segment-type=\"header\" data-segment-label=\"WorkHours\">\n Working hours\n</h2>\n<div data-segment-type=\"content\" data-segment-label=\"WorkHours\">\n 8 hours per day\n At least 4 days per week\n</div>\n" descriptionFormatting: RICH_FORMATTING benefits: [] salary: { currency: "JPY" period: "HOUR" minimumMinor: 2000 fineGrainedSalaryInformation: { totalSalaryMinor: 2000 workingHours: 1 fixedOvertimePay: false } } hasProbationaryPeriod: NO location: { country: "JP", streetAddress: "108-0023 東京都港区芝浦3-1-21 田町ステーションタワーS18階" } } metadata: { jobSource: { companyName: "Example Company" sourceName: "Example Source Name" sourceType: "Employer" employerIds: [{ type: $employerIdType, id: "1" }] } taxonomyClassification: { jobTypes: ["75GKK"] occupations: ["N3YNG"] attributes: ["7ADHN"] } jobPostingId: "AtsJobPostingId1" datePublished: "2023-09-01T09:35:00+09:00" url: "https://example.com/jobs/aaabbbccc" contacts: { contactType: "contact" contactInfo: { contactEmail: "contact@career.example.com" } } } }] }) { results { jobPosting { sourcedPostingId } } } }}To send GraphQL requests with Insomnia (opens in a new window), import the curl command. See Import Data (opens in a new window) in the Insomnia documentation.
A successful response looks like this:
{ "data": { "jobsIngest": { "createSourcedJobPostings": { "results": [{ "jobPosting": { "sourcedPostingId": "ea81aaa2-e834-43f7-8cd9-75778c14c2d5" } }] } } }}2. Verify that the job is available
#Indeed can take up to 2 hours to publish the job. To confirm that it's live, contact Indeed.
3. Update a job
#Call the same mutation again with the same jobPostingId. The response is the same as when you create a job, and the update can take up to 2 hours to appear.
To add Indeed Apply, include applyMethod in the input. It needs postUrl, a public endpoint that accepts POST requests, and apiToken, the client ID of your Indeed Apply app.
4. Create more job postings
#To create another job, change jobPostingId, for example from AtsJobPostingId1 to AtsJobPostingId2, and call the mutation again.
5. Expire the job posting
#Call the expireSourcedJobsBySourcedPostingId mutation with the sourcedPostingId from the create response.
See also
#Guides
#- Employers — Explains how to manage employers and their data on Indeed.
- Job Sync API — Explains how to create and manage Indeed job postings.
GraphQL API reference
#jobsIngest.createSourcedJobPostings— Submits a job posting to Indeed.jobsIngest.expireSourcedJobsBySourcedPostingId— Expires a job posting bysourcedPostingId.