Data types and file handling
Data types, file attachments, and upload requirements for the Send Candidates API.
legal notice
By using this API and its documentation and building an integration, you agree to the Additional API Terms and Guidelines.
Data types
#Applicant details
#The applicant object contains the candidate's details.
Required fields
#| Field | Type | Description |
|---|---|---|
name | String | Applicant's full name |
email | EmailAddress | Applicant's contact email address |
Location information
#| Field | Type | Description |
|---|---|---|
streetAddress | String | Full street address, used for geolocation |
postalCode | String | Postal or ZIP code |
country | CountryCode | ISO country code |
Professional information
#| Field | Type | Description |
|---|---|---|
workExperience | Object | Employment history |
education | List of Objects | Education history |
skills | List of Objects | Technical and soft skills |
certifications | List of Objects | Professional licenses and certifications |
Supported file attachment types
#| Type | Enum value | Description | Processing |
|---|---|---|---|
| Primary resume | RESUME | Main resume | Parsed for matching and ranking |
| Additional resumes | OTHER_RESUME | Other resumes | Stored unless removed as unsafe; not parsed |
| Primary cover letter | COVER_LETTER | Main cover letter | Stored unless removed as unsafe |
| Additional cover letters | OTHER_COVER_LETTER | Other cover letters | Stored unless removed as unsafe |
| Other | OTHER | Other supporting documents | Stored unless removed as unsafe |
Important notes
#- Each application can include only one
RESUMEattachment. Indeed parses it for candidate matching. - Each application can include only one
COVER_LETTERattachment.
File upload requirements
#Presigned URL constraints
#S3 validates every upload to a presigned URL. If a header doesn't match, S3 rejects the upload.
Required headers
#Content-Type: Must exactly match the content type that you declared during initialization.Content-Length: Must match the file size in bytes that you declared.Content-MD5: The Base64-encoded MD5 hash of the file.
Upload request example
#curl -X PUT \ "https://s3.amazonaws.com/..." \ -H "Content-Type: application/pdf" \ -H "Content-Length: 245123" \ -H "Content-MD5: rL0Y20zC+Fzt72VPzMSk2A==" \ --data-binary @resume.pdfMD5 checksum calculation
#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')Upload validation
#If an upload fails validation, S3 rejects it with one of these error codes:
| Error code | Cause | Solution |
|---|---|---|
SignatureDoesNotMatch | A header is missing or incorrect. | Check that each header matches the value that you declared during initialization. |
BadDigest | The file content doesn't match the Content-MD5 hash. | Check that the file isn't corrupted and that you calculated the hash correctly. |
AccessDenied | The presigned URL expired. URLs expire after 5 minutes. | Reinitialize the application. |
Error handling
#Application processing errors
#After you submit an application, processing can still fail. The application's version status reports these failures:
type AtsSyncCandidateSyncApplicationVersionStatus { # ... other fields ... processingStatus: AtsSyncCandidateSyncApplicationProcessingStatusType errors: [AtsSyncCandidateSyncApplicationErrorType!]}Check the status field for the application version state. Check the response-level errors array for GraphQL errors.
Common integration errors
#| Scenario | Error | Resolution |
|---|---|---|
| Invalid partner app | Invalid partner app configuration. Contact Indeed for assistance. | Contact your Indeed partner representative. |
| Invalid registration ID | The specified employer registration does not exist. | Check that the registration ID is correct. See the Employer Registration API guide. |
| Employer not opted in | The employer registration does not have the send applications feature enabled. | Enable the feature for the employer. See the Employer Registration API guide. |
| GraphQL validation | Missing required fields. | Add the fields that the schema requires. |
| Large application files | The total size of all attachments must not exceed 15 MB. | Remove nonessential files. |
| Duplicate application files | Attachments must not be duplicated. | Remove duplicate files. |
| Multiple resumes | Include only one resume. | Change the extra files’ types to OTHER_RESUME. |
| Multiple cover letters | Include only one cover letter. | Change the extra files’ types to OTHER_COVER_LETTER. |
| Publishing deleted application | Application already deleted. | Don't reinitialize or submit a deleted application. |
See also
#