Create example job
Create and verify an example job on Indeed.
Before you begin
- Become an Indeed partner and, for Indeed PLUS only, receive
employerIdTypefrom Indeed - Get an access token
When you call the Indeed PLUS APIs, initiate a timeout after 5,000 milliseconds.
Call the API
To call a GraphQL API, POST to the https://apis.indeed.com/graphql endpoint with headers and the GraphQL query or mutation:
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 |
|---|---|---|
|
| Authenticate with the server to access protected resources. Pass the access token in this header using the note For the See Get an access token and Authorization header. |
|
| The media type of the resource. See Content-Type header. |
The -d parameter specifies the GraphQL query, where <employerIdType> is your employerIdType, 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 } } } }When using Insomnia to send GraphQL requests, you can import a curl command into Insomnia. See Import Data in the Insomnia documentation.
A successful response looks like this:
{ "data": { "jobsIngest": { "createSourcedJobPostings": { "results": [{ "jobPosting": { "sourcedPostingId": "ea81aaa2-e834-43f7-8cd9-75778c14c2d5" } }] } } }}Verify that the job is available
It might take up to two hours for the job to be available on Indeed. Contact Indeed to verify that the job was posted.
Next steps
-
Update the job by changing, for instance,
title. When you update a job, the response is the same as the job-creation response. Updates can take up to two hours. -
Post more jobs by changing
jobPostingId(for example,AtsJobPostingId2instead ofAtsJobPostingId1). -
Try adding
applyMethodtoinput. You'll need a public endpoint capable of receivingPOSTrequests (postUrl) and the client ID of an Indeed Apply application (apiToken).- To integrate Indeed Apply into your app, contact Indeed.
-
To expire the job, use the
expireSourcedJobsBySourcedPostingIdmutation with thesourcedPostingIdfrom the job-creation response. -
For more information, see Employer Data, Job Sync, and the GraphQL API reference.