Processor tasks
The endpoints that list stop and erase tasks for your Data Processors and record what each processor reported, with parameters, outcomes and codes.
A processor task tells one registered Data Processor to stop or to erase. It is written when a person withdraws, changes their choices, a consent expires or a person is erased. These endpoints list tasks and record what each processor reported. Paths are relative to https://console.dpconsent.com/consent/sdk/v1. The task is in Pass instructions to processors.
Shared rules#
| Rule | Detail |
|---|---|
| Key | A secret key with the endpoint's scope. A publishable key gets 403 SCOPE_REQUIRED. |
| Test and live | A test key reaches tasks of test records only. A live key reaches live tasks only. |
| Identifiers | A task holds none. Match it to your user by consentId. |
| Budget | 60 calls a minute for each key, shared with the calls on a person, on top of the key's own budget. |
Endpoints#
GET /processor-tasks#
Lists tasks oldest first, with a cursor.
| Key | Scope | Idempotency-Key |
Webhook sent |
|---|---|---|---|
| Secret | processors:read |
Ignored | None |
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
status |
string | No | OPEN, DONE, REJECTED or SUPERSEDED. |
partnerKey |
string | No | One processor's key. |
action |
string | No | STOP or ERASE. |
overdue |
boolean | No | true for open tasks past their due date only. |
consentId |
string, up to 60 | No | The tasks of one record. |
limit |
integer, 1 to 500 | No | Tasks in the page. Default 100. |
cursor |
string, up to 200 | No | The nextCursor of the previous page. |
Request
curl -G https://console.dpconsent.com/consent/sdk/v1/processor-tasks \
-d status=OPEN -d partnerKey=nilgiri-mailers \
-H "Authorization: Bearer $PIEDAP_PROCESSOR_KEY"Response
200:
{
"items": [
{
"taskId": "2b9e4f61-0c3d-4a7e-8f15-6d2c9b0a7e34",
"consentId": "cns_3f1c9a7e2b8d4c6fa0e5d1b7c9f2a4e8",
"partnerKey": "nilgiri-mailers",
"partnerName": "Nilgiri Mailers",
"action": "ERASE",
"cause": "ERASURE",
"purposes": ["marketing", "analytics"],
"issuedOn": "2026-10-03T09:30:12.004Z",
"dueOn": "2026-11-02T09:30:12.004Z",
"retainLogsUntil": "2027-10-03T09:30:12.004Z",
"status": "OPEN",
"outcome": null,
"closedOn": null,
"overdue": false,
"test": false,
"subject": { "type": "EMAIL", "fingerprint": "a71c…" }
}
],
"nextCursor": "WyIyMDI2LTEwLTAzVDA5OjMwOjEyLjAwNFoiLCIyYjllNGY2MS0uLi4iXQ"
}| Field | Type | Description |
|---|---|---|
taskId |
UUID | The task. The same id is in the webhook's processors. |
consentId |
string | The record the task is about. |
partnerKey, partnerName |
string | The processor. |
action |
string | STOP or ERASE. |
cause |
string | WITHDRAWAL, CHANGE, EXPIRY, ERASURE or INACTIVITY_ERASURE. |
purposes |
array | The purposes to stop or erase for. |
issuedOn, dueOn |
time | When the task was written, and when it is due by the processor's days in the register. |
retainLogsUntil |
time or null | On an ERASE: until when the processor may keep processing logs. |
status |
string | See Task status. |
outcome |
string or null | The final or refused outcome reported. |
closedOn |
time or null | When the task was closed. |
overdue |
boolean | true when it is open past dueOn. |
subject |
object | The record's identifier type and fingerprint. The fingerprint is null once kept details are cleared after an erasure. |
nextCursor |
string or null | Send it as cursor for the next page. |
Errors
| Status | Code | When |
|---|---|---|
400 |
INVALID_CURSOR |
cursor is not one this endpoint returned. |
400 |
None. The message is a list | A filter or limit is not valid. |
403 |
SCOPE_REQUIRED |
The key lacks processors:read. |
429 |
None | The budget for calls on a person was reached. |
POST /processor-tasks/acknowledge#
Records what processors reported, for up to 200 tasks in one call.
| Key | Scope | Idempotency-Key |
Webhook sent |
|---|---|---|---|
| Secret | processors:write |
Honoured | None |
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
acknowledgements |
array, 1 to 200 | Yes | One report for each task. A task may appear once. |
acknowledgements[].taskId |
UUID | Yes | The task. |
acknowledgements[].outcome |
string | Yes | STOPPED, ERASED, RETAINED_UNDER_LAW or REJECTED. |
acknowledgements[].completedOn |
string | No | The day, or day and time, the processor says it acted, such as 2026-10-04. |
acknowledgements[].reference |
string, up to 200 | No | The processor's ticket or request number. |
acknowledgements[].note |
string, up to 1,000 | For RETAINED_UNDER_LAW and REJECTED |
Which law and for how long, or why the processor did not act. |
acknowledgements[].evidence |
object | No | A file you keep: fileName, sha256, sizeBytes and contentType. The file itself is never sent. |
Write no names in note, reference or evidence.fileName. A value with an email address or a run of 10 to 13 digits is refused.
Request
curl -X POST https://console.dpconsent.com/consent/sdk/v1/processor-tasks/acknowledge \
-H "Authorization: Bearer $PIEDAP_PROCESSOR_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: nm-req-20431" \
-d '{
"acknowledgements": [{
"taskId": "2b9e4f61-0c3d-4a7e-8f15-6d2c9b0a7e34",
"outcome": "ERASED",
"completedOn": "2026-10-12T10:00:00Z",
"reference": "NM-REQ-20431"
}]
}'Response
200:
{
"results": [
{
"taskId": "2b9e4f61-0c3d-4a7e-8f15-6d2c9b0a7e34",
"result": "RECORDED",
"status": "DONE",
"outcome": "ERASED"
},
{
"taskId": "8c11d2e0-5a7f-4b2c-9e31-0d6f4a8b2c17",
"result": "REFUSED",
"code": "OUTCOME_NOT_VALID_FOR_ACTION",
"message": "An ERASE task takes ERASED, RETAINED_UNDER_LAW or REJECTED"
}
]
}result |
Meaning |
|---|---|
RECORDED |
The report was stored. status and outcome are the task's new state. |
UNCHANGED |
The task already had this outcome. Nothing was stored. |
REFUSED |
Nothing was stored. code says why. |
| Code in a result | Meaning |
|---|---|
TASK_NOT_FOUND |
No task with this id for the key's environment. |
OUTCOME_NOT_VALID_FOR_ACTION |
A STOP takes STOPPED, ERASED, RETAINED_UNDER_LAW or REJECTED. An ERASE takes ERASED, RETAINED_UNDER_LAW or REJECTED. |
NOTE_REQUIRED |
RETAINED_UNDER_LAW or REJECTED was sent without a note. |
COMPLETED_IN_FUTURE |
completedOn is more than 5 minutes ahead. |
COMPLETED_BEFORE_TASK |
completedOn is more than 5 minutes before the task was issued. |
TASK_ALREADY_DONE |
The task is done with another outcome. The first report stands. |
TASK_SUPERSEDED |
REJECTED was sent for a task that is no longer needed. |
TEXT_LOOKS_PERSONAL |
note, reference or the file name holds an email address or a phone number. |
Errors
| Status | Code | When |
|---|---|---|
400 |
DUPLICATE_TASK_ID |
The same task appears twice in the call. |
400 |
None. The message is a list | A field is missing or not valid, or more than 200 reports were sent. |
403 |
SCOPE_REQUIRED |
The key lacks processors:write. |
409, 422 |
IDEMPOTENCY_REQUEST_IN_PROGRESS, IDEMPOTENCY_KEY_REUSED |
See Idempotency. |
429 |
None | The budget for calls on a person was reached. |
Each call writes one audit entry, ACKNOWLEDGE_PROCESSOR_TASKS, with the key's name and the counts.
Task status#
| Status | Meaning | A report of |
|---|---|---|
OPEN |
Waiting for the processor | A final outcome closes it as DONE. REJECTED makes it REJECTED. |
REJECTED |
The processor did not act | A final outcome closes it as DONE. |
DONE |
A final outcome was reported | The same outcome is UNCHANGED. Another is refused. |
SUPERSEDED |
No longer needed: the person allowed the processor again, or an erase task replaced it | A final outcome closes it as DONE. |
The final outcomes are STOPPED, ERASED and RETAINED_UNDER_LAW. Only an OPEN task past its due date is overdue.
When tasks are written#
| Event | Tasks |
|---|---|
| A withdrawal, an expiry, or a change that refuses a processor | A STOP for each processor that was allowed before and is not after, on purposes based on consent |
| An erasure, or an erasure for inactivity | An ERASE for each processor the person ever allowed, on any purpose |
- Only partners registered as Data Processors get tasks.
- A record known only by a cookie or session id gets no tasks, except on an erasure you asked for.
- Tasks are written in the same transaction as the sealed change. A change is never recorded without its tasks.
- Tasks are kept as long as the record.