Skip to main content
POST
Upload Workforce Trainings CSV
← Own Workforce API Mint a presigned S3 URL and upload a trainings 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_trainings, documented in Own Workforce Import Templates. It validates each row before submission and reports per-row errors; this path has no validation step, so a malformed file fails after the upload rather than at request time.
Trainings attach to employees by external_employee_id, so the employees must already exist before you upload their trainings.

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 Trainings 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: trainings_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

The seven columns this CSV must carry

Create an import session

The recommended write path