- Overview
- Detect GraphQL errors
- Common GraphQL error messages
- Authorization Error
- Data Integrity or Validation Error
- Internal Error
- Internal server error
- JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier
- JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress
- PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier
- Unable to parse statusChangeDateTime
- Validation errors in batch requests
- Variable input has an invalid value error
- Common GraphQL error codes
- BAD_USER_INPUT error
- FORBIDDEN error
- GRAPHQL_PARSE_FAILED error
- HTTP status codes
Troubleshoot GraphQL errors
Troubleshoot GraphQL errors.
Overview
Learn how to troubleshoot GraphQL errors.
To troubleshoot OAuth errors that can occur before you access GraphQL, see Troubleshoot OAuth errors.
If you are new to GraphQL, see Apollo Odyssey: GraphQL Tutorials and Errors in the GraphQL specification.
Detect GraphQL errors
To detect errors, check the HTTP status code and the errors array in the results.
The HTTP status code can be 200 but if the errors array is present, an error occurred.
The errors array includes the message field, which describes the error, and extensions with an error code and classification, as this example shows:
{ "errors": [{ "message": "Description of error", "path": ["Path"], "extensions": { "code": "BAD_USER_INPUT", "classification": { "type": "ExtendedValidationError", "validatedPath": [ "patchEmployer", "input", "employerAttributes", "countrySpecificAttributes", 0, "websiteUrl" ], "constraint": "@DossierUrlConstraint" }, "serviceName": "company-data-api", "stacktrace": [ "Stack trace" ] } }], "data": { "patchEmployer": null }}where
| Value | Description |
|---|---|
errors.message | Message that describes the error. See Common GraphQL error messages. Example: |
errors.path | Path where the error occurred. Example: |
errors.extensions | Fields for debugging. |
errors.extensions.code | Error code. See Common GraphQL error codes. |
errors.extensions.code.validatedPath | Path to the field that caused the issue. |
errors.extensions.code.constraint | Constraint in the schema that caused the error. |
errors.extensions.classification | Details for an error due to field constraints. |
Common GraphQL error messages
When a request fails, the data field is null, and the errors field contains information about what went wrong.
The errors field contains the message and code fields, and other fields.
The common error messages are:
- Authorization Error
- Data Integrity or Validation Error
- Internal Error
- Internal server error
- JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier
- JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress
- PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier
- Unable to parse statusChangeDateTime
- Validation errors in batch requests
- Variable input has an invalid value error
See also Common GraphQL error codes and Built-in error codes.
Authorization Error
message | Authorization Error |
|---|---|
| Summary | Can occur for various reasons. Indeed closely monitors this error. For more information, contact Indeed. |
Data Integrity or Validation Error
message | Data Integrity or Validation Error |
|---|---|
| Summary | Can occur when the fields passed as input to the API cannot be processed successfully. Verify that the input values are valid. If the issue continues, contact Indeed. |
Internal Error
message | Internal Error |
|---|---|
| Summary | Can occur for various reasons. Indeed closely monitors this error. For more information, contact Indeed Support. |
Internal server error
While Indeed aims to have services run with 100% uptime, errors can occur and service calls can fail. For example, these services or components can fail:
- A back-end service within the Indeed infrastructure.
- The network between the client and the server.
- Anything in between.
In general, it's good to have some basic retry logic for these kinds of errors. If the error is intermittent, the error might disappear by trying again. If the problem persists, the server might have a real issue. In such cases, reach out to Indeed support.
When you call the Indeed PLUS APIs, initiate a timeout after 5,000 milliseconds.
JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier
message | JobIdentifierInput must specify one of indeedJobKey, employerJobId, or atsApplicationIdentifier |
|---|---|
| Summary | To ensure that dispositions can be processed, provide at least one of these identifiers:
|
JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress
message | JobSeekerIdentifierInput must specify either indeedJobSeekerKey or emailAddress |
|---|---|
| Summary | To ensure that dispositions can be processed, provide at least one of these identifiers:
|
PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier
message | PartnerDispositionIdentifierInput must specify one of indeedApplyID, ittk, universalApplyId, or alternateIdentifier |
|---|---|
| Summary | To ensure that dispositions can be processed, provide at least one of these identifiers:
|
Unable to parse statusChangeDateTime
message | Unable to parse statusChangeDateTime |
|---|---|
| Summary | The server received your request, but could not parse the provided Verify that you are sending the correct This error can occur if the |
Validation errors in batch requests
Sometimes, when you send a batch request that contains multiple jobs, the Job Sync API rejects the entire request even though some jobs succeed and other jobs fail. This behavior is due to the underlying behavior of GraphQL.
In batch calls, the API lists sourcedPostingIds values in the order that you created the job postings.
Depending on the classification of the error, the Job Sync API handles validation errors differently:
| Error classification | The Job Sync API |
|---|---|
ExtendedValidationError | Continues to process the jobs in the batch request even when one or more jobs in the batch request fail. |
Other than | Rejects entire batch request when one or more jobs in the batch request fail. For an example of this type of error, see Example validation error. |
Example validation error
{ "errors": [{ "extensions": { "code": "BAD_USER_INPUT", "classification": "ValidationError" }, "locations": [{ "line": 1, "column": 46 }], "message": "Validation error (WrongType@[jobsIngest/createSourcedJobPostings]) : argument 'input.jobPostings[1].metadata.contacts[0].contactInfo.contactPhone' with value 'StringValue{value='***********'}' is not a valid 'PhoneNumber' - String value `10001212223` is not a valid E.164 phone number" }]}Variable input has an invalid value error
message | Variable 'input' has an invalid value: String value is not a valid web URL. Relative paths are not allowed. Value must be an absolute URL. |
|---|---|
code | BAD_USER_INPUT |
| Summary | When you use variables to provide values for a mutation or query and they do not pass validation checks, GraphQL identifies which variable is at fault and why, but, by default, it does not include path information about where the variable is used in the mutation or query. In short, our app-specific validations update the path variable, but validations run by the GraphQL framework, such as type validations, do not. |
Common GraphQL error codes
See also Built-in error codes.
The common error codes that appear in the code field in the errors array are:
| Error | Description and common causes | Can unmodified query succeed? |
|---|---|---|
BAD_REQUEST | Input is invalid or cannot be processed. See the error message for details. | No |
BAD_USER_INPUT | Input is invalid or cannot be processed. See the error message, then modify the query and retry. For more information, see BAD_USER_INPUT error. | No |
FORBIDDEN | Authentication credentials lack sufficient permissions. Equivalent to HTTP | No |
GRAPHQL_PARSE_FAILED | ||
INTERNAL_SERVER_ERROR | The server encountered an unexpected error and did not respond. Retry the request. | Yes |
QUERY_TOO_COMPLEX | Query exceeded the allowed complexity. Modify the query and retry. | No |
QUERY_TOO_NESTED | Query is too deeply nested. Modify the query and retry. | No |
UNAUTHENTICATED | Request lacks authentication credentials. Equivalent to HTTP | No |
BAD_USER_INPUT error
message | Exception while fetching data |
|---|---|
code | BAD_USER_INPUT |
| Summary | The client sent data that was not valid. |
A validation error of the BAD_USER_INPUT error type occurs when the client sends invalid data. This example shows a validation error:
{ "errors": [{ "message": "Exception while fetching data (/patchEmployer) : EmployerIdentifiersInput contains invalid type or id", "path": [ "patchEmployer" ], "extensions": { "code": "BAD_USER_INPUT", "classification": { "type": "ExtendedValidationError", "validatedPath": [ "patchEmployer", "input", "employerAttributes", "countrySpecificAttributes", 0, "websiteUrl" ], "constraint": "@DossierUrlConstraint" }, "serviceName": "company-data-api", "stacktrace": [ "GraphQLError: Exception while fetching data (/patchEmployer) : EmployerIdentifiersInput contains invalid type or id" ] } }], "data": { "patchEmployer": null }}FORBIDDEN error
message | Client is not authorized |
|---|---|
code | FORBIDDEN |
| Summary | The OAuth client is not registered with the Indeed API gateway. |
You can receive the Client is not authorized message with the FORBIDDEN code when your OAuth client is not registered with the Indeed API gateway. For example:
{ "data": null, "errors": [{ "extensions": { "code": "FORBIDDEN" }, "message": "Client is not authorized." }]}To register your OAuth client with the Indeed API gateway, contact Support.
GRAPHQL_PARSE_FAILED error
message | Syntax Error: Invalid number, expected digit but got: "a". |
|---|---|
code | GRAPHQL_PARSE_FAILED |
| Summary | A GraphQL operation string contains a syntax error. Usually, this error occurs if you do not escape HTML tags in the |
For example, this payload does not escape the HTML:
mutation { createSourcedJobPostings( input: { jobPostings: [{ body: { title: "Server" description: "<h4 style="text - align: left;">Responsibilities include:</h4> <ul> <li style="text-align: left;"> Customer interaction </li> <li style="text-align: left;"> Taking orders and closing checks </li> <li style="text-align: left;"> Food and drink service </li> <li style="text-align: left;"> General table and restaurant maintenance </li> <li style="text-align: left;"> Restaurant opening and closing duties </li> </ul>" location: { country: "US", cityRegionPostal: "Clio, MI 48420" } benefits: [] salary: { currency: "USD" minimumMinor: 387 maximumMinor: 387 period: "HOUR" } } metadata: { jobSource: { companyName: "Company name" sourceName: "Parent company name" sourceType: "Employer" } contacts: { contactType: "contact" contactInfo: { contactName: "Contact name" contactEmail: "contact@email.com" } } jobPostingId: "7308" datePublished: "2023-09-13T17:32Z" url: "https://companyname.com/jobs/1000/server" } applyMethod: { indeedApply: { apiToken: "e03dd8c2dd1748218c6d5cde83824606807f617dfa054b78f9192d1341a5d15d" postUrl: "https://app.companyname.com/ext/indeed/apply/" applyQuestions: "https://app.companyname.com/ext/indeed/apply/questions/1000/" resumeRequired: YES phoneRequired: YES } } }] } ) { results { jobPosting { sourcedPostingId } } }}The following error occurs:
{ 'errors': [{ 'message': 'Syntax Error: Invalid number, expected digit but got: "a".', 'locations': [{ 'line': 7, 'column': 33 }], 'extensions': { 'code': 'GRAPHQL_PARSE_FAILED' } }]}To correct this example, escape the HTML tags in the description field.
Escape the quotes. You can use HTML tags like <h4>, <ul>, and <li> as-is.
mutation { createSourcedJobPostings( input: { jobPostings: [{ body: { title: "Server" description: "<h4 style=\"text - align: left;\">Responsibilities include:</h4> <ul> <li style=\"text-align: left;\"> Customer interaction </li> <li style=\"text-align: left;\"> Taking orders and closing checks </li> <li style=\"text-align: left;\"> Food and drink service </li> <li style=\"text-align: left;\"> General table and restaurant maintenance </li> <li style=\"text-align: left;\"> Restaurant opening and closing duties </li> </ul>" location: { country: "US", cityRegionPostal: "Clio, MI 48420" } benefits: [] salary: { currency: "USD" minimumMinor: 387 maximumMinor: 387 period: "HOUR" } } metadata: { jobSource: { companyName: "Company name" sourceName: "Parent company name" sourceType: "Employer" } contacts: { contactType: "contact" contactInfo: { contactName: "Contact name" contactEmail: "contact@email.com" } } jobPostingId: "7308" datePublished: "2023-09-13T17:32Z" url: "https://companyname.com/jobs/1000/server" } applyMethod: { indeedApply: { apiToken: "e03dd8c2dd1748218c6d5cde83824606807f617dfa054b78f9192d1341a5d15d" postUrl: "https://app.companyname.com/ext/indeed/apply/" applyQuestions: "https://app.companyname.com/ext/indeed/apply/questions/1000/" resumeRequired: YES phoneRequired: YES } } }] } ) { results { jobPosting { sourcedPostingId } } }}HTTP status codes
The GraphQL-related HTTP status codes are:
| HTTP status code | Description and resolution | |
|---|---|---|
| The GraphQL operation succeeded. | |
| An error occurred. See Common error codes. | |
| Apollo Server cannot parse the request into a valid GraphQL document and validate it against your schema. This behavior can also occur with other request problems, such as when a client tries to send a batched HTTP request when | |
| Request used an HTTP method that is not valid, such as | |
| Client sent too many requests in a time period. The rate limit was exceeded. To avoid this error, decrease the number of retries or increase the latency between them. For more information, see: | |
| Possible causes for this error include:
| |
For an overview of the HTTP status codes, see RFC 9110: Overview of Status Codes.
For information about Apollo Server error codes, see Apollo GraphQL Docs: Setting HTTP status code and headers.