Skip to main content
POST
Upload Workforce Employees CSV
← Own Workforce API Mint a presigned S3 URL and upload an employee CSV to it. The call itself ingests nothing: it hands you a URL, and the file is parsed asynchronously once it lands in the bucket.
Prefer the Imports API for new integrations. It covers the same three workforce templates with column mapping, row-level validation before submission, and per-row error reporting — see Own Workforce Import Templates. This endpoint is the older path: it has no validation step and no way to correct rows, so a malformed file fails silently after the upload rather than at request time. It is documented because it is open and in use.

How it works

1

Ask for a URL

POST here with the file name you intend to upload. You get back upload_url, a file_id and the key the object will live under.
2

PUT the file

Upload the CSV bytes to upload_url with an HTTP PUT. This request goes to S3, not to the Dcycle API, and carries no Dcycle headers.
3

Wait for ingestion

Arrival triggers the ingestion job. Nothing is returned synchronously — poll List Workforce Employees filtering on the file_id you were given, and read each row’s status.
The presigned URL is short-lived. Request it immediately before uploading rather than storing it.

Request

Headers

string
required
Your API key for authenticationExample: sk_live_1234567890abcdef
string
required
Your organization UUIDExample: a8315ef3-dd50-43f8-b7ce-d839e68d51fa
string
required
The partner the upload is filed under. Required only on this endpoint — the trainings and absences uploads read it from the organization instead, so it is easy to miss when copying one of those.Example: dcycle

Body

string
required
Name of the file you are about to upload. It is stored alongside the rows and surfaces as file_name on the employee list.Example: workforce_2026.csv

Response

201 Created.
string
Presigned S3 URL. PUT the file bytes here.
string
Id of the file record. Use it as file_id[] on the employee list to follow the ingestion, and later to delete everything that came 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, or the required x-partner header absent.

Own workforce import templates

The columns this CSV must carry

Create an import session

The recommended write path