Delayed publishing guide
Review a client's job before job seekers see it.
By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.
Delayed publishing overview
As an ad agency, use delayed publishing when you must review a client's job before job seekers see it. Indeed holds each new or updated job from your client's ATS until you publish it with the Job Update API. A held job never publishes on its own.
This beta feature is not available in Japan. Contact Indeed for more information.
Delayed publishing steps
1. Authenticate
See Authenticate.
2. Enable delayed publishing
- In Partner Console, open your app and create or edit a webhook subscription for
com.indeed.partner.jobs.lifecycle_event.v1. - Select Publish on job update.
- Save the subscription.
Indeed now holds new and updated jobs from the client feeds the subscription covers until you publish them. If you clear Publish on job update, Indeed publishes each job shortly after notifying you.
If several subscriptions cover the same client feed, Indeed holds the job when any one of them has Publish on job update selected.
3. Receive a webhook
When a client's job is created or updated, Indeed sends a jobs lifecycle event with status UPDATED and holds the job. See Jobs lifecycle events webhooks guide.
4. Review the job posting
Use the node query with the job IRI from the webhook payload. See Get job posting status by ID.
5. Publish job posting
| Operation | Publishes a held job? |
|---|---|
updateSourcedJobPostings | Yes, when the update succeeds. If the update fails, the job stays held. |
publishSourcedJobPostings | Yes. Use this when the job needs no changes. |
clearSourcedJobPostingUpdates | No. |
If the job needs changes, call updateSourcedJobPostings; a successful update publishes it. If not, call publishSourcedJobPostings.
You can update and publish a job, or publish it without updates:
-
Update and publish — Call
updateSourcedJobPostingsas Update job posting describes; no extra fields are needed. Indeed applies your update before publishing, so job seekers see only the updated job.If the update succeeds but the publish fails, the response includes an error for the publish. Your update is saved, but the job stays held. Call
publishSourcedJobPostingsto publish it. -
Publish without changes — Call
publishSourcedJobPostings. You can call it on a job that is not held; the call succeeds and publishes nothing.
Request – Publish job posting
Call the publishSourcedJobPostings mutation with an access token that represents the advertiser and includes the employer_access and employer.hosted_job scopes. See Get access token that represents employer.
input.publishes accepts one job per call. Identify the job with employerJob, providing exactly one of sourcedPostingId or employerJobId (the EmployerJob.id from findEmployerJobsPartner or the webhook payload).
mutation PublishSourcedJobPostings { jobsIngest { publishSourcedJobPostings( input: { publishes: [ { employerJob: { employerJobId: "<EMPLOYER JOB ID>" } } ] } ) { results { sourcedPostingId employerJobId seatsPublished } } }}Response – Publish job posting
results has one entry per publish, with sourcedPostingId, employerJobId, and seatsPublished. The seatsPublished value tells you the outcome:
- Above
0— Indeed published the job. 0— The job was not held.null— The publish failed, and the response includes an error.
{ "data": { "jobsIngest": { "publishSourcedJobPostings": { "results": [{ "sourcedPostingId": "opaqueId", "employerJobId": "opaqueId", "seatsPublished": 123 }] } } }}6. Find held jobs
The Job Update API does not yet show which jobs are held. Publish each job after you review it, and track which jobs you received in webhooks but have not yet published.
7. Repeat for each update
Each time the client's ATS updates the job, Indeed holds it again, even if you published an earlier version. Repeat Receive a webhook, Review the job posting, and Publish job posting.
For example, if you publish a job on Monday and the client changes its description on Tuesday, Indeed holds the job until you publish it again.
GraphQL API references
clearSourcedJobPostingUpdates— Clears job updates.findEmployerJobsPartner— Lists jobs for an employer.node— Gets one job by ID.nodes— Gets multiple jobs by IDs.publishSourcedJobPostings— Publishes a job that is being held for review, making it visible to job seekers.updateSourcedJobPostings— Updates supported job fields.