Create example job
Create and verify an example job on Indeed.
Before you begin
#- 1.Become an Indeed partner and, for Indeed PLUS only, receive
employerIdTypefrom Indeed. - 2.Get an access token.
- 3.Contact Indeed to integrate Indeed Apply into your app.
When you call the Indeed PLUS APIs, initiate a timeout after 5,000 milliseconds.
API steps
#1. Create job posting
#POST the mutation and headers to the https://apis.indeed.com/graphql endpoint:
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 specifies the GraphQL query. Replace <employerIdType> with the ID Indeed provides for Indeed PLUS only.
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 is:
{ "data": { "jobsIngest": { "createSourcedJobPostings": { "results": [{ "jobPosting": { "sourcedPostingId": "ea81aaa2-e834-43f7-8cd9-75778c14c2d5" } }] } } }}2. Verify that the job is available
#Indeed can take up to two hours to publish the job. Contact Indeed to confirm the job is live.
3. Update a job
#Call the same mutation again. Updates return the same response as creation and take up to two hours to take effect.
You can also add applyMethod to the input. It requires a public endpoint that accepts POST requests (postUrl) and the client ID of an Indeed Apply app (apiToken).
4. Create more job postings
#Change jobPostingId (for example, from AtsJobPostingId1 to AtsJobPostingId2).
5. Expire the job posting
#Call the expireSourcedJobsBySourcedPostingId mutation with the sourcedPostingId from the creation response.
See also
#Guides
#- Employers — Manage employer entities and data on Indeed.
- Job Sync API — Create and manage Indeed job postings.
GraphQL API references
#jobsIngest.createSourcedJobPostings— Submits a job posting to Indeed.jobsIngest.expireSourcedJobsBySourcedPostingId— Expires a job posting bysourcedPostingId.