- Job Update API workflow
- Job Update API references
- Authentication
- Update job posting
- Workflow
- Request – Update job posting
- Confirm your updates
- Partial updates
- Response – Update job posting
- Choose the query method to get job posting information
- Get job posting status by ID
- Authentication
- Single job query (node)
- Batch job query (nodes)
- Work with webhooks
- List job postings by criteria
- Clear job posting updates
- Workflow
- Request – Clear job posting updates
- Response – Clear job posting updates
- Job status
- Organic non-sponsored jobs
- Sponsored jobs
- Rate limits
- Troubleshoot errors
- FORBIDDEN: Advertiser is in a restricted moderation status
- FORBIDDEN: You are missing permissions for this action
- FORBIDDEN: Advertiser is requesting an update to EJ
- UNAUTHENTICATED
- BAD_USER_INPUT
- NOT_FOUND
- DOWNSTREAM_SERVICE_ERROR or INTERNAL_SERVER_ERROR
Job Update API guide
Update, clear updates, get details for, and list job postings on Indeed.
By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.
Job Update API workflow
Use the Job Update API to update jobs, clear updates, get job details, and list jobs on Indeed. These calls are free and do not count toward Sponsored Jobs API usage policy limits.
- 1.Review Before you start - Under the single-source policy, ATSs are the source of truth for employer jobs.
- 2.Authenticate.
- 3.Update job posting - Use
updateSourcedJobPostingsto update supported job fields. - 4.Choose a query method.
- 5.Get job posting status by ID - If you have job IRIs, use the
nodeornodesquery. - 6.List job postings by criteria - For bulk retrieval, use
findEmployerJobsPartner. - 7.Clear job posting updates - Use
clearSourcedJobPostingUpdatesto remove updates. - 8.Check job status.
- 9.Review rate limits.
- 10.Troubleshoot GraphQL errors.
Job Update API references
updateSourcedJobPostings- Update supported job fields.node- Get one job by ID.nodes- Get multiple jobs by ID.findEmployerJobsPartner- List jobs for an employer.clearSourcedJobPostingUpdates- Clear job updates.
The ATS controls job creation and expiration.
Authentication
When you become an Indeed partner, Indeed sets up an app for your integration. Sign in to Partner Console to view your app and OAuth credentials (client ID, secret, and authorization code for 3-legged OAuth). Exchange credentials for an access token to authenticate API calls.
For setup details, see Integrate with Indeed and call APIs.
The findEmployerJobsPartner, node, and nodes queries require one of these OAuth token types:
| Token type | Description |
|---|---|
| 2‑legged OAuth token that specifies an advertiser | If you already use the Sponsored Jobs API with the client credentials grant type (2-legged OAuth), you might already have this token type. |
| 3-legged OAuth token | If you already have a 3-legged OAuth token, you can use it. |
The access token must include these scopes:
employer_accessemployer.hosted_job
For more information about scopes, see Scopes.
After you get an access token, include it in the query. Indeed recommends refreshing access tokens before they expire so users do not need to sign in each time they view updated job statuses.
Update job posting
This feature is in beta and is not available in Japan. Contact Indeed for more information.
- If you submitted the job posting to Indeed, upsert it.
- If another partner submitted it, update the posting. Updates are primarily for ad agencies.
Japan only: All partners except ad agencies and Indeed PLUS Publisher Network partners can update the posting.
See also:
Enables ad agencies to update job posting fields on Indeed and Indeed PLUS.
Update only jobs authorized by your client. Unauthorized updates can prevent the client from using other Indeed tools on that job. To add a location the ATS does not have, use your XML or API integration.
Workflow
To update a job posting that you did not send to Indeed:
| # | Description | See |
|---|---|---|
| 1. | Choose clients to add: Contact Indeed. | |
| 2. | List job postings by criteria: Call | |
| 3. | Update job posting: To update fields such as the tracking URL or job URL, call | |
| 4. | Confirm your updates: Use one of these methods:
To list sponsored jobs for a campaign, set | |
For rate limits on this call, see Rate limits.
Request – Update job posting
To update selected fields in a job posting, call the jobsIngest.updateSourcedJobPostings mutation.
This operation requires an access token that represents the advertiser.
The access token must include these scopes:
employer_accessemployer.hosted_job
See Get access token that represents employer. Instead of an employer ID, associate the token with an advertiser ID.
Provide only the fields that you want to update. To leave a field unchanged, omit it or set it to null.
This example calls the updateSourcedJobPostings mutation to update several fields in a job posting:
mutation UpdateSourcedJobPostings { jobsIngest { updateSourcedJobPostings( input: { updates: [ { sourcedPostingId: "<SOURCED POSTING ID OF JOB POSTING>" metadata: { url: "https://www.example.com/jobs/123" campaignCategories: ["springCampaign"] trackingUrl: "https://www.example.com/jobs/123?utm_source=indeed" } body: { title: "Software Developer" description: "Come build the future with us!" jobLocation: { general: { cityRegionPostal: "Phoenix, AZ 85003" streetAddress: "1234 Sunny Lane, Phoenix, AZ 85003" } } salary: { currency: "USD" maximumMinor: 1000 minimumMinor: 1000 period: "HOUR" } } } ] } ) { results { jobPosting { sourcedPostingId employerJobId } } } }}mutation UpdateSourcedJobPostings { jobsIngest { updateSourcedJobPostings(input: { updates: [{ sourcedPostingId: "<SOURCED POSTING ID OF JOB POSTING>" body: { description: "<h2>About the role</h2><p>Join our team as a software engineer. You design and build scalable backend services.</p><ul><li>Competitive salary</li><li>Remote-friendly</li><li>Health and dental benefits</li></ul>" descriptionFormatting: HTML } }] }) { results { jobPosting { sourcedPostingId employerJobId } } } }}updateSourcedJobPostings takes one argument: input, of type UpdateSourcedJobPostingsInput.
input has one field, updates, which is an array of UpdateSourcedJobPostingInput objects. Each object defines updates for one job posting.
Each UpdateSourcedJobPostingInput object supports these fields:
| Field | Type | Description |
|---|---|---|
sourcedPostingId | ID! | Required. For each job posting, provide one of these values:
|
metadata.url | WebUrl | The ad agency URL where a job seeker can apply if Indeed Apply is not available. |
metadata.campaignCategories | [String!] | Category tags that group related jobs for campaign selection. Query Sponsored Jobs API with ad_campaign_category:{category} for the values you provide. |
metadata.trackingUrl | WebUrl | The job tracking URL. When a job seeker views the job on Indeed, Indeed sends an HTTP request to this URL. |
body.title | String | The job title. |
body.description | String | The job description:
|
body.descriptionFormatting | DescriptionFormatting | The job description format. Set this field to |
body.jobLocation .general.cityRegionPostal | String! | Required if you update location. The city, administrative region such as state, county, or prefecture, and postal code for the job. If you set this field for a remote job, Indeed treats the job as a regional remote job. |
body.jobLocation .general.streetAddress | String | The street address of the job's primary location. Include the full address so Indeed can improve location matching and show the address to job seekers. |
body.salary.currency | CurrencyCode | The salary currency code in ISO 4217 format. |
body.salary.maximumMinor | Int64 | The maximum salary in local minor currency. For USD, |
body.salary.minimumMinor | Int64 | The minimum salary in local minor currency. For USD, |
body.salary.period | JobSalaryPeriod! | Required if you update salary. The rate used to calculate salary, such as hourly, daily, or weekly. |
body.companyName | String | Updates the company name for the job posting. To leave it unchanged, omit this field or set it to |
For more information, see the API reference.
Confirm your updates
The updateSourcedJobPostings response includes job IRIs. To verify changes, use the node query with the returned IRIs.
See Get job posting status by ID.
Partial updates
Field updates are not atomic. If you update multiple fields in one request, the API can rarely apply only some changes. When that happens, the response includes an error.
An error response does not always mean a partial update occurred. If a multi-field request returns an error, view the updated job posting to confirm which fields, if any, succeeded. For error-handling guidance, see Troubleshoot GraphQL errors.
Response – Update job posting
updateSourcedJobPostings returns an UpdateSourcedJobPostingsPayload object. It includes a results field, which is an array of UpdateSourcedJobPostingResult objects. Each object corresponds to one job posting update.
Each UpdateSourcedJobPostingResult object includes a jobPosting field of type SourcedJobPostingUpdate. If Indeed does not accept the update, this field is null. Otherwise, it includes:
sourcedPostingId: The job posting UUID. This matchesSourcedJobPosting.sourcedPostingId, which Indeed generated when it created the job posting. Use this value to expire or update the job posting.employerJobId: The Indeed Resource Identifier (IRI) for the job posting. This matchesEmployerJob.id.
Choose the query method to get job posting information
Use one of these methods to get job information:
| Method | Description |
|---|---|
Get job posting status by ID (node or nodes query) | Use this method when you already have the job IRI, which is the It is faster than Use cases:
|
List job postings by criteria (findEmployerJobsPartner) | Use this search-based method to list all jobs. It works best for bulk inventory retrieval. Use case:
|
Get job posting status by ID
To get job status by IRI, which is the EmployerJob ID, call the GraphQL node or nodes query. These queries are more efficient than list job postings by criteria.
Authentication
Use the same authentication and authorization as findEmployerJobsPartner. See Authentication. The access token must include these scopes:
employer_accessemployer.hosted_job
Single job query (node)
Get one job by its IRI, which is the EmployerJob ID, with the Relay Node pattern:
query GetJob($id: ID!) { node(id: $id) { ...on EmployerJob { id jobData { title description company dateCreated datePostedOnIndeed jobLocation { city countryCode fullAddress } salary { max min period } externalPostingMetadata { jobPostingId jobRequisitionId } } managementUrls { viewJob } } }}Variables:
{ "id": "dXJuOmluZGVlZDplbXBsb3llcmpvYjphMWIyYzNkNC1lNWY2LTc4OTAtYWJjZC1lZjEyMzQ1Njc4OTA="}Job IRIs (EmployerJob IDs) are base64-encoded. The id field in the response is the encoded IRI.
See EmployerJob.
POST https://apis.indeed.com/graphqlAuthorization: Bearer YOUR_ACCESS_TOKENContent-Type: application/json
{ "query": "query GetJob($id: ID!) { node(id: $id) { ... on EmployerJob { id jobData { title description company } } } }", "variables": { "id": "dXJuOmluZGVlZDplbXBsb3llcmpvYjphMWIyYzNkNC1lNWY2LTc4OTAtYWJjZC1lZjEyMzQ1Njc4OTA=" }}Batch job query (nodes)
Get status for multiple jobs by their IRIs (EmployerJob IDs).
Use this query to confirm multiple updates or process batches of webhook events.
query GetMultipleJobs($ids: [ID!] !) { nodes(ids: $ids) { ... on EmployerJob { id jobData { title description company datePostedOnIndeed jobLocation { city countryCode } } } }}Variables:
{ "ids": [ "dXJuOmluZGVlZDplbXBsb3llcmpvYjphMWIyYzNkNC1lNWY2LTc4OTAtYWJjZC1lZjEyMzQ1Njc4OTA=", "dXJuOmluZGVlZDplbXBsb3llcmpvYjpiMmMzZDRlNS1mNmE3LTg5MDEtYmNkZS1mMjM0NTY3ODkwMTI=", "dXJuOmluZGVlZDplbXBsb3llcmpvYjpjM2Q0ZTVmNi1hN2I4LTkwMTItY2RlZi0zNDU2Nzg5MDEyMzQ=" ]}Job IRIs (EmployerJob IDs) are base64-encoded. The id fields in the response are the encoded IRIs.
See EmployerJob.
Work with webhooks
Webhook payloads include the job IRI:
{ "eventType": "job.updated", "jobIri": "dXJuOmluZGVlZDplbXBsb3llcmpvYjphMWIyYzNkNC1lNWY2LTc4OTAtYWJjZC1lZjEyMzQ1Njc4OTA=", "timestamp": "2025-12-10T15:30:00Z"}Use the node query with the IRI to get the current job status. For examples, see Get job posting status by ID.
Benefits:
- Real-time updates
- Fast IRI-based retrieval
- Pre-visibility enrichment window
List job postings by criteria
Contact Indeed to use this feature. Additional requirements apply.
Lists job postings for an employer.
This call is rate limited.
If you call this operation once per hour for each client, you might never hit the limit. However, HTTP 429 can still occur. If it does, reduce your request rate. See 429 error code.
For rate limits on this call, see Rate limits.
Request – List job postings by criteria
To list an employer's jobs, call findEmployerJobsPartner:
This example calls findEmployerJobsPartner to list job postings in descending order by the Indeed post date:
query FindEmployerJobsPartner { findEmployerJobsPartner(input: { filters: { legacySourceId: "60a9614a5d973a21", jobFeedType: ["INTEGRATED_FROM_PARTNER"] }, sort: [{ sortDirection: DESC, sortField: datePostedOnIndeed }] }, first: 10, before: null, after: null) { employerJobs { id jobData { title datePostedOnIndeed dateCreated description company jobLocation { countryCode city postalCode fullAddress } externalJobPageUrl externalPostingMetadata { jobPostingId jobRequisitionId campaignCategories trackingUrls rawInputLocation isIntegratedJob } } managementUrls { viewJob } seatsConnection { pageInfo { endCursor hasNextPage hasPreviousPage startCursor } seats { jobPost { id externalPartnerCallToAction(input: { locale: "en-us" }) { imageAltText imageUrl } status { globalStatus { isIndeedApplyActive } surfaceStatuses { isRejected isSponsorshipRequired isMissingRequiredSponsorship } } } } } } estimatedTotalResultsCount pageInfo { endCursor hasNextPage hasPreviousPage startCursor } }}findEmployerJobsPartner finds jobs by source ID or lists an employer's jobs. It supports these input fields:
| Field | Description |
|---|---|
input.filters.jobFeedType | Filters jobs by feed type, which identifies the job source. If the feed type is Valid values are:
Default: If your client’s jobs come from web crawling or are hosted on Indeed in Scenario 2, specify the correct |
input.sort | An array of objects that defines how to sort job postings in the response. Each object contains these fields:
|
first | The number of job postings to return.
|
before | Returns items with a cursor value before this value. Use PageInfo in the response for pagination details. |
after | Returns items with a cursor value after this value. Use PageInfo in the response for pagination details. |
Response – List job postings by criteria
findEmployerJobsPartner lists jobs for the employer associated with the access token.
If you include filters or sorting in the request, the API applies them to the results.
If your token does not return the jobs you expect, ask the user to contact their Indeed support representative through their Indeed employer account page. The representative can help connect jobs on Indeed to the advertiser or user account, if appropriate.
The API returns a FindEmployerJobsPartnerConnection object with these fields:
| Field | Type | Description |
|---|---|---|
employerJobs | [EmployerJob]! | An array of job objects. For field details, see Response - View job posting. |
estimatedTotalResultsCount | Int! | The estimated total number of jobs in the response. |
pageInfo | PageInfo! | Pagination information. |
This example response lists job postings.
The API returns only one item in seats, so startCursor and endCursor are the same, and hasNextPage and hasPreviousPage are false.
{ "data": { "node": { "id": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==", "jobData": { "title": "Certified Nursing Assistant CNA", "datePostedOnIndeed": "2022-03-22T20:33:28Z", "dateCreated": "2022-03-22T20:33:28Z", "description": "Anytown Health and Rehabilitation Center in Anytown, USA is a 186-bed center offering a variety of individualized, health care services for our patients and residents. We are seeking a qualified and committed team member to join our team.", "company": "Anytown Health and Rehabilitation Center", "jobLocation": { "countryCode": "US", "city": "Cambridge", "postalCode": null, "fullAddress": null }, "externalJobPageUrl": "http://www.indeed.com/job/certified-nursing-assistant-cna-9354ed892ad3a1b6", "externalPostingMetadata": { "jobPostingId": "CBA-Anytown-Posting-Id", "jobRequisitionId": "CBA-Anytown-Req-Id", "campaignCategories": [], "trackingUrls": [], "isIntegratedJob": false } }, "managementUrls": { "viewJob": "https://employers.indeed.com/jobs/view?employerJobId=aXJpOi8vYXBpcy5pbmRlZWQuY29tL0VtcGxveWVySm9iLzkxZGU0ZjVhLWE1MWYtNGQ1Ni1iOWI0LWNhMDQzZWVjNDAzMQ==" }, "seatsConnection": { "pageInfo": { "endCursor": "YVhKcE9pOHZZWEJwY3k1cGJtUmxaV1F1WTI5dEwwcHZZbEJ2YzNRdk5EQXhOVFkxTW1OaFpEYzJZVFF4TlE9PQ==", "hasNextPage": false, "hasPreviousPage": false, "startCursor": "YVhKcE9pOHZZWEJwY3k1cGJtUmxaV1F1WTI5dEwwcHZZbEJ2YzNRdk5EQXhOVFkxTW1OaFpEYzJZVFF4TlE9PQ==" }, "seats": [ { "jobPost": { "id": "aXJpOi8vYXBpcy5pbmRlZWQuY29tL0pvYlBvc3QvNDAxNTY1MmNhZDc2YTQxNQ==", "externalPartnerCallToAction": [ { "imageUrl": "https://dlogqfjusi9uq.cloudfront.net/cta/en_US/not_searchable.svg", "imageAltText": "Update needed on Indeed" } ], "status": { "globalStatus": [ { "lifecycleStatus": "INACTIVE", "isIndeedApplyActive": false } ], "surfaceStatuses": [ { "isRejected": false, "isSponsorshipRequired": false, "isMissingRequiredSponsorship": false } ] } } } ] } } }}To troubleshoot validation errors, see Troubleshoot GraphQL errors. For more information, see Validation in the GraphQL documentation.
Clear job posting updates
This beta feature is not available in Japan. Contact Indeed for more information.
An ad agency that updates a client's job posting can later clear those updates.
Workflow
Use this operation to clear updates that an ad agency made to job postings.
For example, if you stop working with a client, clear the updates you made to that client’s jobs. The operation restores the latest ATS data so the client can manage the job again with other Indeed tools.
| # | Description | See |
|---|---|---|
| 1. | Update job postings: Add clients and update their job postings. | Update job postings |
| 2. | List job postings by criteria: Call | |
| 3. | Clear job posting updates: Call | |
| 4. | List job postings by criteria: Call |
For rate limits on this call, see Rate limits.
Request – Clear job posting updates
To clear fields that updateSourcedJobPostings previously changed, call the jobsIngest.clearSourcedJobPostingUpdates mutation.
This operation requires an access token for the advertiser that originally made the updates.
The access token must include these scopes:
employer_accessemployer.hosted_job
See Get access token that represents employer. Instead of an employer ID, associate the token with an advertiser ID.
This example calls the clearSourcedJobPostingUpdates mutation to clear updates from a job posting:
mutation ClearSourcedJobPostingUpdates { jobsIngest { clearSourcedJobPostingUpdates(input: { updates: [{ sourcedPostingId: "<SOURCED POSTING ID OF JOB POSTING>" }] }) { results { jobPosting { sourcedPostingId employerJobId } } } }}clearSourcedJobPostingUpdates takes one argument, input, of type ClearSourcedJobPostingUpdatesInput.
input has one field, updates, which is an array of ClearSourcedJobPostingUpdateInput objects. Each object identifies one job posting whose updates you want to clear.
To clear updates for multiple job postings in one request, include multiple ClearSourcedJobPostingUpdateInput objects.
Each ClearSourcedJobPostingUpdateInput object supports these fields:
| Field | Type | Description |
|---|---|---|
sourcedPostingId | ID! | Required. For each job posting, provide one of these values:
|
Response – Clear job posting updates
clearSourcedJobPostingUpdates returns a ClearSourcedJobPostingUpdatesPayload object. It includes a results field, which is an array of ClearSourcedJobPostingUpdateResult objects. Each object corresponds to one job posting whose updates were cleared.
Each ClearSourcedJobPostingUpdateResult object includes a jobPosting field of type SourcedJobPostingUpdate. If Indeed does not accept the request, this field is null. Otherwise, it includes:
sourcedPostingId: The job posting UUID. This matchesSourcedJobPosting.sourcedPostingId, which Indeed generated when it created the job posting. Use this value to expire or update the job posting.employerJobId: The Indeed Resource Identifier (IRI) for the job posting. This matchesEmployerJob.id.
Job status
Because feed policy has changed, most jobs you manage on Indeed no longer come from your feeds.
| Job status | Booleans | See |
|---|---|---|
| Organic |
| Organic non-sponsored jobs |
| Sponsored only with spend |
| Sponsored jobs |
| Sponsored only without spend |
| |
| Nowhere |
|
Organic non-sponsored jobs
To get organic traffic data for jobs that are not sponsored, use one of these approaches:
| Approach | Description | |
|---|---|---|
| 1. | Add the trackingUrl field | To receive an HTTP request for each job click, add this field whether or not:
See |
| 2. | Use custom job URLs | Replace the job URL with a career page that you own, or work with ATS partners to append your tracking metadata to the job URL. If a job does not use Indeed Apply, job seekers go to this URL. If it does use Indeed Apply, they do not. See |
| 3. | Collaborate with client ATS | Work with your clients and their ATS to gather organic performance data. |
| 4. | Have clients sign in to the Indeed Analytics interface | Your clients can sign in to Indeed Analytics to view complete organic performance for all jobs, whether sponsored or not. |
Sponsored jobs
To get sponsored-job traffic data, call Sponsored Jobs API v8 or later to get employer job IDs that match the IDs returned by the Job Update API.
Rate limits
The Job Update API enforces rate limits on these operations:
findEmployerJobsPartnerto list job postings by criteriajobsIngest.updateSourcedJobPostingsto update job postingsjobsIngest.clearSourcedJobPostingUpdatesto clear job posting updates
These limits help keep the API available. Indeed sets them above normal daily Job Update API usage, but throttles large request volumes over short periods. To reduce the chance of throttling, spread requests over 10 minutes.
If you exceed a limit, the API returns HTTP 429, either in the HTTP response or in the GraphQL JSON errors array.
You do not need to take special action. If you need help working around these limits, request support.
If you exceed these rate limits, the API notifies you:
| Query or mutation | Rate limit |
|---|---|
findEmployerJobsPartner query | 5 requests per second |
| 20 requests per second total across both mutations |
See also:
Troubleshoot errors
To troubleshoot OAuth errors that occur before you access GraphQL, see Troubleshoot OAuth errors.
To troubleshoot GraphQL errors, see Troubleshoot GraphQL errors.
These errors can occur:
- FORBIDDEN: Advertiser is in a restricted moderation status
- FORBIDDEN: You are missing permissions for this action
- FORBIDDEN: Advertiser is requesting an update to EJ
- UNAUTHENTICATED
- BAD_USER_INPUT
- NOT_FOUND
- DOWNSTREAM_SERVICE_ERROR or INTERNAL_SERVER_ERROR
FORBIDDEN: Advertiser is in a restricted moderation status
Example error message
{ "errors": [ { "extensions": { "code": "FORBIDDEN", "message": "Advertiser is in a restricted moderation status" } } ]}What it means
Indeed restricted the advertiser associated with the OAuth token as a spam-protection measure.
What to do
This error is rare. If it occurs, contact your partner manager to remove the restriction.
FORBIDDEN: You are missing permissions for this action
Example error message
{ "errors": [ { "extensions": { "code": "FORBIDDEN", "message": "You are missing permissions for this action. Ask your administrator for the permissions [Hosted_Job Create, Hosted_Job Update, Hosted_Job Read]" } } ]}What it means
The user associated with the OAuth token does not have permission to update jobs.
What to do
If an admin user did not create the OAuth client, grant job-management permission to the user associated with the OAuth client. Any admin user can grant this permission in the UI. See Indeed account settings.
FORBIDDEN: Advertiser is requesting an update to EJ
Example error message
{ "errors": [ { "extensions": { "code": "FORBIDDEN", "message": "Advertiser is requesting an update to EJ (id=<EJID>), but the job is claimed by a different advertiser." } } ]}What it means
A different advertiser already updated this job, so this advertiser cannot update it. Only one advertiser can update a job at a time.
Verify that you requested the OAuth token for the correct advertiser.
What to do
If another advertiser updated the job, this error continues until that advertiser's updates are cleared. See Clear job posting updates.
This can happen for either of these reasons:
-
The agency can access the job through more than one advertiser.
After the agency updates the job through one advertiser, it gets this error if it tries to update the same job through a different advertiser.
-
The employer edited the job in the UI.
The employer must remove those edits in the UI before the agency can update the job through the API.
UNAUTHENTICATED
Example error message
"extensions.code": "UNAUTHENTICATED"What it means
Indeed cannot authenticate the request. The OAuth token is expired or malformed.
What to do
See Troubleshoot OAuth errors.
BAD_USER_INPUT
Example error message
"extensions.code": "BAD_USER_INPUT"What it means
The request contains malformed input. See the message field for details.
What to do
Fix the malformed request fields.
For correctly formatted request examples, see:
NOT_FOUND
Example error message
"extensions.code": "NOT_FOUND"What it means
Indeed cannot find the job.
What to do
Verify that sourcedPostingId is correct and that you requested the OAuth token for the correct advertiser. This error can also occur if the advertiser does not have permission to view the job.
DOWNSTREAM_SERVICE_ERROR or INTERNAL_SERVER_ERROR
Example error message
"extensions.code": "DOWNSTREAM_SERVICE_ERROR"Or:
"extensions.code": "INTERNAL_SERVER_ERROR"What it means
An internal server error occurred.
What to do
Try the request again later. If the error continues, contact your partner manager.