- How to detect errors
- FORBIDDEN error
- Advertiser is in a restricted moderation status
- You are missing permissions for this action
- Advertiser is requesting an update to a job claimed by a different advertiser
- UNAUTHENTICATED error
- BAD_USER_INPUT error
- NOT_FOUND error
- DOWNSTREAM_SERVICE_ERROR or INTERNAL_SERVER_ERROR
- Retry strategy
- Get support
Troubleshoot Job Update API errors
Common Job Update API errors and how to resolve them.
How to detect errors
The Job Update API returns errors as GraphQL responses. Most errors return HTTP 200 with error details in the response body.
Always check the errors array in the response body, even with HTTP 200:
{ "data": null, "errors": [{ "message": "Error description", "extensions": { "code": "FORBIDDEN" } }]}The extensions.code field contains the error type (such as FORBIDDEN, BAD_USER_INPUT, NOT_FOUND).
FORBIDDEN error
code | FORBIDDEN |
|---|---|
| Summary | The access token lacks permissions for the requested operation. The |
Advertiser is in a restricted moderation status
{ "errors": [{ "extensions": { "code": "FORBIDDEN", "message": "Advertiser is in a restricted moderation status" } }]}The advertiser associated with the OAuth token has been restricted as a spam protection measure.
To resolve:
- Contact your partner manager to lift the restriction.
You are missing permissions for this action
{ "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]" } }]}The user associated with the OAuth token does not have the necessary permissions to update jobs.
To resolve:
- Verify that the OAuth client was created with an admin user.
- Grant
Hosted_Job Create,Hosted_Job Update, andHosted_Job Readpermissions to the user associated with the OAuth client. Any admin user can grant this permission. See Indeed account settings.
Advertiser is requesting an update to a job claimed by a different advertiser
{ "errors": [{ "extensions": { "code": "FORBIDDEN", "message": "Advertiser is requesting an update to EJ (id=<EJID>), but the job is claimed by a different advertiser." } }]}Another advertiser already updated this job. Only one advertiser can update a job at a time.
To resolve:
- Verify the OAuth token was requested with the correct advertiser.
- If another advertiser updated the job, use the clear job posting updates mutation.
This can occur when:
- The agency has access to the job from more than one advertiser. After updating the job from one advertiser, updating from a different advertiser causes this error.
- The employer edited the job in the UI. The employer must undo these edits in the UI before the agency can update the job through the API.
UNAUTHENTICATED error
code | UNAUTHENTICATED |
|---|---|
| Summary | The OAuth token has expired or is malformed. |
{ "errors": [{ "extensions": { "code": "UNAUTHENTICATED" } }]}To resolve:
- Verify the OAuth token has not expired (tokens are valid for 1 hour).
- Request a new access token.
- See Troubleshoot OAuth errors for detailed resolution steps.
BAD_USER_INPUT error
code | BAD_USER_INPUT |
|---|---|
| Summary | The request is malformed. See the |
{ "errors": [{ "extensions": { "code": "BAD_USER_INPUT" } }]}To resolve:
- Check the
messagefield for details about which field is invalid. - Verify the request fields are correctly formatted.
- See API references for examples of correctly formatted requests:
NOT_FOUND error
code | NOT_FOUND |
|---|---|
| Summary | The job is not found. |
{ "errors": [{ "extensions": { "code": "NOT_FOUND" } }]}To resolve:
- Verify the
sourcedPostingIdis correct. - Verify the OAuth token is requested with the correct advertiser. If the requesting advertiser does not have permission to view the job, this error occurs.
DOWNSTREAM_SERVICE_ERROR or INTERNAL_SERVER_ERROR
code |
|
|---|---|
| Summary | An internal server error occurred. |
{ "errors": [{ "extensions": { "code": "DOWNSTREAM_SERVICE_ERROR" } }]}To resolve:
- Retry the request later.
- If the error persists, contact your partner manager.
Retry strategy
| Error | Retryable? | Strategy |
|---|---|---|
DOWNSTREAM_SERVICE_ERROR | Yes | Exponential backoff |
INTERNAL_SERVER_ERROR | Yes | Exponential backoff |
UNAUTHENTICATED (expired token) | Yes | Refresh token, then retry once |
FORBIDDEN | No | Fix permissions |
BAD_USER_INPUT | No | Fix the request |
NOT_FOUND | No | Verify the sourcedPostingId and advertiser |
Get support
If you encounter issues not covered in this guide:
- Check the GraphQL error
messageandextensionsobject. - Verify all required fields are present and correctly formatted.
- Test with minimal input first, then add fields incrementally.
- Contact your Indeed representative.
See also: