Troubleshoot Send Candidates API errors
Common Send Candidates API errors and how to resolve them.
How to detect errors
#The Send Candidates API returns errors in two contexts:
- GraphQL responses — Most API errors return HTTP
200with error details in theerrorsarray. - S3 upload responses — File attachment uploads return S3-specific error codes.
Always check both the GraphQL errors array and S3 upload responses for failures.
Upload validation errors
#S3 rejects file uploads that fail validation during the attachment upload step.
| Error code | Cause | Resolution |
|---|---|---|
SignatureDoesNotMatch | Missing or incorrect headers or content. | Verify that all headers match initialization values. |
BadDigest | File content does not match the MD5 checksum. | Verify file integrity and checksum calculation. |
AccessDenied | The pre-signed URL expired (URLs expire after 5 minutes). | Reinitialize the application to get a new URL. |
Verify MD5 checksums
#Pre-calculate the MD5 checksum before uploading to avoid BadDigest errors. The checksum must be base64-encoded.
JavaScript/Node.js:
const crypto = require('crypto');const fs = require('fs');
function calculateMD5(filePath) { const fileBuffer = fs.readFileSync(filePath); const hash = crypto.createHash('md5'); hash.update(fileBuffer); return hash.digest('base64');}Python:
import hashlibimport base64
def calculate_md5(file_path): with open(file_path, 'rb') as f: file_content = f.read() return base64.b64encode( hashlib.md5(file_content).digest() ).decode('ascii')Application processing errors
#After submission, applications might have processing errors. Monitor the processingStatus and errors fields in AtsSyncCandidateSyncApplicationVersionStatus to identify and resolve issues:
type AtsSyncCandidateSyncApplicationVersionStatus { processingStatus: AtsSyncCandidateSyncApplicationProcessingStatusType errors: [AtsSyncCandidateSyncApplicationErrorType!]}Common integration errors
#| Scenario | Error | Resolution |
|---|---|---|
| Invalid Partner App | Invalid partner app configuration. | Contact your Indeed partner representative. |
| Invalid registration ID | The specified employer registration does not exist. | Verify the registration ID. See the Employer Registration API guide. |
| Employer not opted in | The employer registration does not have the send applications feature enabled. | Update employer features using the Employer Registration API. |
| GraphQL validation | Missing required fields. | Review schema requirements. |
| Large application files | The total size of all attachments must not exceed 15 MB. | Exclude non-essential or large files. |
| Duplicate application files | Attachments must not be duplicated. | Exclude duplicated files. |
| Multiple resumes | Include only one resume. | Use type RESUME for only one attachment. Use OTHER_RESUME for additional resumes. |
| Multiple cover letters | Include only one cover letter. | Use type COVER_LETTER for only one attachment. |
| Publishing deleted application | The application was already deleted. | Do not re-initialize or submit a deleted application. |
Retry strategy
#| Error | Retryable? | Strategy |
|---|---|---|
| Network timeout | Yes | Exponential backoff with jitter |
| HTTP 429 Too Many Requests | Yes | Wait for Retry-After header value |
AccessDenied (expired URL) | Yes | Reinitialize the application, then retry upload |
SignatureDoesNotMatch | No | Fix headers to match initialization values |
BadDigest | No | Recalculate the MD5 checksum |
| Invalid Partner App | No | Contact Indeed |
Get support
#If you encounter issues not covered in this guide:
- Check the GraphQL error
messageandextensionsobject. - Check S3 error codes for upload failures.
- Verify all required fields are present and correctly formatted.
- Contact your Indeed representative.
See also: