Skip to main content
POST
Upload Workforce Absences CSV
← Own Workforce API Mint a presigned S3 URL and upload an absences and accidents CSV to it. The call ingests nothing by itself: it returns a URL, and the file is parsed asynchronously once it lands.
Prefer the Imports API for new integrations — template own_workforce_accidents_absenteeisms, documented in Own Workforce Import Templates. That path matters more here than elsewhere: this data has real validation rules — an accident must not duplicate one already recorded for the same employee on the same day, and an absence must not overlap another — and the Imports API reports those as per-row errors before you submit. This endpoint has no validation step, so violations surface after the upload.
Records attach to employees by external_employee_id, so the employees must already exist before you upload their absences.

How it works

1

Ask for a URL

POST here with the file name. You get back upload_url, a file_id and the destination key.
2

PUT the file

Upload the CSV bytes to upload_url. That request goes to S3 and carries no Dcycle headers.
3

Wait for ingestion

Poll List Workforce Absences Paginated filtering on the file_id you were given, and read each row’s status.

Request

Headers

string
required
Your API key for authenticationExample: sk_live_1234567890abcdef
string
required
Your organization UUIDExample: a8315ef3-dd50-43f8-b7ce-d839e68d51fa

Body

string
required
Name of the file you are about to uploadExample: absences_2026.csv

Response

201 Created.
string
Presigned S3 URL. PUT the file bytes here. Short-lived — request it immediately before uploading.
string
Id of the file record, to follow ingestion and later to delete everything from this upload
string
Object key the file will be stored under
string
Echo of the name you sent
string
Organization the upload is attributed to
string
Human-readable confirmation

Example

Successful Response

Common Errors

401 Unauthorized

Cause: the key is invalid, or it does not belong to the organization in x-organization-id — the two are looked up as a pair. A request carrying no credentials at all answers AUTH_REQUIRED instead.

403 Forbidden

Cause: the key’s owner is not an enabled member of the organization, or their role cannot write.

422 Unprocessable Entity

Cause: file_name missing from the body.

Own workforce import templates

Columns and the duplicate/overlap rules

Validate an import

Catch violations before submitting