Full Data Endpoint
Overview
FullData is the Data API operation that exports the complete current state of one or more HR/Payroll entities for a tenant.
This endpoint allows the consumer to start a data loader operation for configured entities, extracting all the data from the configured tables in a single request. This means the endpoint provides the complete dataset stored in our tables — which is particularly useful for initial loads of downstream systems.
On the backend, each requested entity is read and a file (CSV or JSON) is generated per entity. The operation is asynchronous: the initial POST request returns immediately with an operationId, while the extraction jobs run in the background. The consumer polls the status endpoint using this operationId to track progress until all jobs are complete.
The consumer can also:
- Check the status of the operation.
- Cancel an in-progress operation.
- Delete the files generated by a completed operation.
- Retry an operation that had failed jobs.
Base URL
https://data.youforce.com/data/v1/fulldata
Swagger: https://data.youforce.com/data/swagger/index.html
Authentication & Scopes
All requests require a Bearer token in the Authorization header.
| Base URL pattern | Required scope (read) | Required scope (manage) |
|---|---|---|
https://data.youforce.com/data/v1/ |
youforce-data-api:data:read |
youforce-data-api:jobs:manage |
DPoP support
In addition to standard Bearer token authentication, FullData operations can optionally be protected using DPoP (Demonstrating Proof-of-Possession, RFC 9449). This provides an additional layer of assurance that the caller holds the private key associated with the token, rather than relying solely on token possession.
Important Considerations
Field selection follows your configuration
If your configurationId mapping restricts which fields are returned (as configured in the Configuration API), IncrementalData respects that same restriction — column projection is applied consistently regardless of whether a record was inserted, updated, or deleted.
Omitting entity returns one job per entity
As with FullData, if entity is omitted from the request body, the operation fans out into one job per entity defined in the configuration mapping, rather than a single job.
Payroll data limitation
There is a limitation on the payroll table (payroll-results entity): The DaaS backend applies a date range filter to this entity: only records within the current and previous calendar years are exported.
Note: this filter does not apply to
Deleterecords forpayroll-results, since deleted records no longer carry aCalculationYearvalue — deletions are always returned regardless of the original record’s year.Examples:
- Today is 1 November 2025 → the API retrieves payroll data from 1 January 2024 onward.
- Today is 15 February 2025 → the API retrieves payroll data from 1 January 2024 onward.
Queueing, concurrency, and limits
Triggered operations — and therefore their jobs — are processed through an internal queue:
- Jobs that cannot start immediately are placed in the queue with status Pending.
- As running jobs complete, pending jobs are automatically picked up and executed.
- A maximum of 20 jobs can run in parallel, per configuration (a tenant can have several clients defined in the Developer Portal).
- Each configuration can trigger up to 3 operations per day.
- There is no specific concurrency limit per entity or table beyond the limits above.
- However, only one active job per entity is allowed at a time: if a second request targets an entity that already has a job in flight, the API returns
409 Conflict. An in-flight job can be cancelled via the cancel endpoint if needed.
Developer tip
- Applications should monitor the operation status and wait for completion before submitting another operation for the same client.
- Files can be downloaded as soon as their jobs have been completed, you don’t need to wait for the whole operation to be finished to start the downloading process.
Endpoints
1. Trigger a FullData operation
POST /data/v1/fulldata
Starts a data loader operation for the selected configured entities. It runs one job per configured entity/table, or a single job if the entity parameter is provided.
If a new request is submitted while another operation is already being processed for the same client, the response returns 409 Conflict.
Parameters
| Type | Name | Description |
|---|---|---|
| Header | Authorization |
Bearer token (required) |
| Path | — | None |
| Query | — | None |
| Body | configurationId |
Explicit configuration to apply. If omitted, the default configuration set in the Configuration API is used. |
| Body | fileFormat |
Format of the returned file. Currently only csv and json are accepted. |
| Body | entity |
Entity for which the operation will run. Only one job/output file is created for this entity. If omitted, all entities defined for the configuration are triggered, each producing its own job and output file. |
| Body | version |
Desired version of the entity, if it has multiple versions. If omitted, the latest version is used. Required when entity is specified. |
Request example
curl --location 'https://data.youforce.com/data/v1/fulldata' \
--header 'Authorization: Bearer abc' \
--header 'Content-Type: application/json' \
--data '{
"configurationId": "testing-default-4028868",
"fileFormat": "csv",
"entity": "sickness-case",
"version": 1
}'
Response
202 Accepted — the response body includes the operationId, used for all subsequent queries on this operation:
{
"operationId": "88549862-af91-49c1-9545-683edd948931"
}
Error responses
| Code | Cause |
|---|---|
400 Bad Request |
version is not a valid integer, entity does not exist in the configuration, or fileFormat is not csv/json, for example |
409 Conflict |
An operation is already running for this client/configuration |
429 Too Many Requests |
The configuration’s maxRequestsPerDay limit has been reached |
2. Check operation status
GET /data/v1/fulldata/{fulldataOperationId}/status
Returns the processing status of each job within the operation, plus the overall operation status.
When jobs within an operation have different outcomes, the overall status may reflect a partial state:
- PartiallyFailed — some jobs failed, the rest completed.
- PartiallyCancelled — some jobs were cancelled, the rest completed.
- PartiallyDeleted — some job files were deleted, the rest completed.
Parameters
| Type | Name | Description |
|---|---|---|
| Header | Authorization |
Bearer token (required) |
| Path | fulldataOperationId |
Id of the operation returned by the initial POST request |
| Query | — | None |
| Body | — | None |
Request example
curl --location 'https://data.youforce.com/data/v1/fulldata/88549862-af91-49c1-9545-683edd948931/status' \
--header 'Authorization: Bearer abc'
Response
200 OK
| Field | Description |
|---|---|
operationId |
The requested operation Id |
configurationId |
Configuration Id applied for generating the output |
status |
Overall status of the operation: Pending, Completed, Cancelled, Failed (and partial variants above) |
jobs |
Array with the status of each individual job |
jobs[].id |
Job Id |
jobs[].entity |
Entity related to the job |
jobs[].version |
Version of the job being delivered |
jobs[].status |
Status of the job: Pending, Completed, Cancelled, Failed |
jobs[].createdAt |
Date/time the request was created |
jobs[].startedAt |
Date/time the job started |
jobs[].completedAt |
Date/time the job finished |
jobs[].cancelledAt |
Date/time the job was cancelled |
jobs[].failedAt |
Date/time the job failed |
jobs[].failedReason |
Reason the job failed |
jobs[].totalCount |
Total number of rows to be returned |
jobs[].processedCount |
Number of rows processed so far |
jobs[].expirationDate |
Date/time when the generated file will be removed from our systems |
jobs[].links |
Links to download the successfully processed files |
Example — Pending operation
{
"operationId": "88549862-af91-49c1-9545-683edd948931",
"configurationId": "testing-default-4028868",
"status": "Pending",
"jobs": [
{
"id": "0d629dbc-8d49-46df-8c0a-8469a67fd7d3",
"entity": "sickness-case",
"version": 1,
"status": "Pending",
"createdAt": "2025-10-30T13:24:33.078654Z"
}
]
}
Example — Completed operation
{
"operationId": "88549862-af91-49c1-9545-683edd948931",
"configurationId": "testing-default-4028868",
"status": "Completed",
"jobs": [
{
"id": "0d629dbc-8d49-46df-8c0a-8469a67fd7d3",
"entity": "sickness-case",
"version": 1,
"status": "Completed",
"createdAt": "2025-10-30T13:24:33.078654Z",
"startedAt": "2025-10-30T13:25:05.183246Z",
"completedAt": "2025-10-30T13:25:08.219779Z",
"totalCount": 400,
"processedCount": 400,
"expirationDate": "2025-10-31T13:25:08.219808Z",
"links": {
"download": "https://data.youforce.com/data/v1/jobs/0d629dbc-8d49-46df-8c0a-8469a67fd7d3"
}
}
]
}
3. Retry a failed operation
PUT /data/v1/fulldata/{fulldataOperationId}/retry
Retries a failed data loader operation. Only the failed jobs within the operation are retried — jobs that already completed successfully are left untouched.
If the operation has no failed jobs and a retry is triggered, the API returns 404 Not Found.
Parameters
| Type | Name | Description |
|---|---|---|
| Header | Authorization |
Bearer token (required) |
| Path | fulldataOperationId |
Id of the operation returned by the initial POST request |
| Query | — | None |
| Body | — | None |
Request example
curl --location --request PUT 'https://data.youforce.com/data/v1/fulldata/ed41e267-8cbb-4e08-b4bf-60d7a26d7fd8/retry' \
--header 'Authorization: Bearer abc'
Response
202 Accepted
4. Cancel an operation
POST /data/v1/fulldata/{fulldataOperationId}/cancel
Cancels a data loader operation. This stops all jobs of that operation that are still in progress — a job can only be cancelled if it has not completed yet; a completed job cannot be cancelled.
Error responses
| Code | Cause |
|---|---|
400 Bad Request |
The operation has already completed |
404 Not Found |
There are no jobs pending or being processed at the time of the request |
Parameters
| Type | Name | Description |
|---|---|---|
| Header | Authorization |
Bearer token (required) |
| Path | fulldataOperationId |
Id of the operation returned by the initial POST request |
| Query | — | None |
| Body | — | None |
Request example
curl --location --request POST 'https://data.youforce.com/data/v1/fulldata/ed41e267-8cbb-4e08-b4bf-60d7a26d7fd8/cancel' \
--header 'Authorization: Bearer abc'
Response
204 No Content
5. Delete operation files
DELETE /data/v1/fulldata/{fulldataOperationId}
Deletes the files generated by a data loader operation — specifically, all downloadable files belonging to jobs that completed successfully within the specified operation.
Returns 400 Bad Request if the jobs are not yet completed.
Parameters
| Type | Name | Description |
|---|---|---|
| Header | Authorization |
Bearer token (required) |
| Path | fulldataOperationId |
Id of the operation returned by the initial POST request |
| Query | — | None |
| Body | — | None |
Request example
curl --location --request DELETE 'https://data.youforce.com/data/v1/fulldata/ed41e267-8cbb-4e08-b4bf-60d7a26d7fd8' \
--header 'Authorization: Bearer abc'
Response
204 No Content
6. Download a job file
GET /data/v1/jobs/{jobId}
Downloads the file generated for a specific job (available once the job’s status is Completed, via the links.download field returned by the status endpoint).
Response
The file content in the requested format (csv or json), with an X-Content-MD5 header containing the base64-encoded MD5 hash of the response body — use this to verify the integrity of the downloaded file.
Operation Status Lifecycle
POST /data/v1/fulldata
│
▼
[Pending] ◄── concurrent POST for the same client/configuration → 409 Conflict
│
▼
[Processing]
│
├──► [Completed] — all entity jobs processed successfully
├──► [PartiallyFailed] — some jobs failed, others completed
├──► [PartiallyCancelled] — some jobs cancelled, others completed
├──► [PartiallyDeleted] — some job files deleted, others completed
├──► [Cancelled] — cancelled by the client
└──► [Failed] — all jobs failed
- A cancelled operation stays queryable —
GET statuswill keep returningCancelled. - A deleted operation’s files are removed, but the operation itself remains queryable until it expires.
Summary of Key Behaviors
| Scenario | Result |
|---|---|
No entity / version specified |
All entities in the configuration are exported; one job per entity |
entity + version specified |
Only that entity/version is exported; exactly one job |
Invalid version (non-integer) |
400 Bad Request |
| Entity not present in configuration | 400 Bad Request |
fileFormat other than csv/json |
400 Bad Request |
| New operation requested while one is active for the same client | 409 Conflict |
| Configuration’s daily request limit exceeded | 429 Too Many Requests |
| Cancel an already-completed operation | 400 Bad Request |
| Cancel with no pending/running jobs | 404 Not Found |
| Retry with no failed jobs | 404 Not Found |
| Delete files before jobs complete | 400 Bad Request |