Record delete work orders work-order-endpoint
Use the /workorder endpoint in the Data Hygiene API to create, view, and manage record delete work orders in Adobe Experience Platform. Work orders let you control, monitor, and track data removal across datasets to help you maintain data quality and support your organization’s data governance standards.
Getting started
Before you begin, see the overview to learn about required headers, how to read sample API calls, and where to find related documentation.
Quotas and processing timelines quotas
Record delete work orders are subject to daily and monthly identifier submission limits, determined by your organization’s license entitlement. These limits apply to both UI- and API-based record delete requests.
Monthly submission entitlement by product quota-limits
The following table shows identifier submission limits by product and entitlement level. For each product, the monthly cap is the lesser of two values: a fixed identifier ceiling or a percentage-based threshold tied to your licensed data volume.
Record delete work order capacity is a shared service. Your monthly cap reflects the highest entitlement across Real-Time CDP, Adobe Journey Optimizer, Customer Journey Analytics, and any applicable Shield add-ons.
Processing timelines for identifier submissions sla-processing-timelines
After submission, record delete work orders are queued and processed based on your entitlement level.
If your organization requires higher limits, contact your Adobe representative for an entitlement review.
List record delete work orders list
Retrieve a paginated list of record delete work orders for data hygiene operations in your organization. Filter results using query parameters. Each work order record includes the action type (such as identity-delete), status, related dataset and user details, and audit metadata.
API format
GET /workorder
The following table describes the query parameters available for listing record delete work orders.
searchtypeidentity-delete).statusEnum:
received, validated, submitted, ingested, completed, failedauthordisplayNamedescriptionworkorderIdsandboxName* to include all sandboxes.fromDatetoDate to be set.toDatefromDate to be set.filterDatepagelimitorderBy+ or - prefix for ascending/descending. Example: orderBy=-datasetName.propertiesRequest
The following request retrieves all completed record delete work orders, limited to two per page:
curl -X GET \
"https://platform.adobe.io/data/core/hygiene/workorder?status=completed&limit=2" \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}'
Response
A successful response returns a paginated list of record delete work orders.
{
"results": [
{
"workorderId": "DI-1729d091-b08b-47f4-923f-6a4af52c93ac",
"orgId": "9C1F2AC143214567890ABCDE@AcmeOrg",
"bundleId": "BN-4cfabf02-c22a-45ef-b21f-bd8c3d631f41",
"action": "identity-delete",
"createdAt": "2034-03-15T11:02:10.935Z",
"updatedAt": "2034-03-15T11:10:10.938Z",
"operationCount": 3,
"targetServices": [
"profile",
"datalake",
"identity"
],
"status": "received",
"createdBy": "a.stark@acme.com <a.stark@acme.com> BD8C3D631F41@acme.com",
"datasetId": "a7b7c8f3a1b8457eaa5321ab",
"datasetName": "Acme_Customer_Exports",
"displayName": "Customer Identity Delete Request",
"description": "Scheduled identity deletion for compliance"
}
],
"total": 1,
"count": 1,
"_links": {
"next": {
"href": "https://platform.adobe.io/workorder?page=1&limit=2",
"templated": false
},
"page": {
"href": "https://platform.adobe.io/workorder?limit={limit}&page={page}",
"templated": true
}
}
}
The following table describes the properties in the response.
resultsworkorderIdorgIdbundleIdactioncreatedAtupdatedAtoperationCounttargetServicesstatusreceived,validated, submitted, ingested, completed, and failed.createdBydatasetIddatasetNamedisplayNamedescriptiontotalcount_linksnexthref (string) and templated (boolean) for the next page.pagehref (string) and templated (boolean) for page navigation.Create a record delete work order create
To delete records associated with one or more identities from a single dataset or all datasets, make a POST request to the /workorder endpoint.
Work orders are processed asynchronously and appear in the work order list after submission.
API format
POST /workorder
Request
The following request deletes all records associated with specified email addresses from a particular dataset.
curl -X POST \
https://platform.adobe.io/data/core/hygiene/workorder \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'Content-Type: application/json' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-d '{
"displayName": "Acme Loyalty - Customer Data Deletion",
"description": "Delete all records associated with the specified email addresses from the Acme_Loyalty_2023 dataset.",
"action": "delete_identity",
"datasetId": "7eab61f3e5c34810a49a1ab3",
"namespacesIdentities": [
{
"namespace": {
"code": "email"
},
"IDs": [
"alice.smith@acmecorp.com",
"bob.jones@acmecorp.com",
"charlie.brown@acmecorp.com"
]
}
]
}'
The following table describes the properties for creating a record delete work order.
displayNamedescriptionactiondelete_identity.datasetIdALL to target all datasets. Datasets must have a primary identity or identity map. If an identity map exists, it will be present as a top-level field named identityMap.Note that a dataset row may have many identities in its identity map, but only one can be marked as primary.
"primary": true must be included to force the id to match a primary identity.namespacesIdentitiesAn array of objects, each containing:
namespace: An object with acodeproperty specifying the identity namespace (e.g., “email”).IDs: An array of identity values to delete for this namespace.
Identity namespaces provide context to identity data. You can use standard namespaces provided by Experience Platform or create your own. To learn more, see the identity namespace documentation and the Identity Service API specification.
Response
A successful response returns the details of the new record delete work order.
{
"workorderId": "DI-95c40d52-6229-44e8-881b-fc7f072de63d",
"orgId": "8B1F2AC143214567890ABCDE@AcmeOrg",
"bundleId": "BN-c61bec61-5ce8-498f-a538-fb84b094adc6",
"action": "identity-delete",
"createdAt": "2035-06-02T09:21:00.000Z",
"updatedAt": "2035-06-02T09:21:05.000Z",
"operationCount": 1,
"targetServices": [
"profile",
"datalake",
"identity"
],
"status": "received",
"createdBy": "c.lannister@acme.com <c.lannister@acme.com> 7EAB61F3E5C34810A49A1AB3@acme.com",
"datasetId": "7eab61f3e5c34810a49a1ab3",
"datasetName": "Acme_Loyalty_2023",
"displayName": "Loyalty Identity Delete Request",
"description": "Schedule deletion for Acme loyalty program dataset"
}
The following table describes the properties in the response.
workorderIdorgIdbundleIdactioncreatedAtupdatedAtoperationCounttargetServicesstatuscreatedBydatasetIdALL.datasetNamedisplayNamedescriptionidentity-delete in API responses. If the API changes to use a different value (such as delete_identity), this documentation will be updated accordingly.Convert ID lists to JSON for record delete requests
To create a record delete work order from CSV, TSV, or TXT files containing identifiers, you can use conversion scripts to produce the required JSON payloads for the /workorder endpoint. This approach is especially helpful when working with existing data files. For ready-to-use scripts and comprehensive instructions, visit the csv-to-data-hygiene GitHub repository.
Generate JSON payloads
The following bash script examples demonstrate how to run the conversion scripts in Python or Ruby:
| code language-bash |
|---|
|
| code language-bash |
|---|
|
The table below describes the parameters in the bash scripts.
verbosecolumnnamespacecode property specifying the identity namespace (for example, “email”).dataset-idALL.descriptionoutput-dirThe example below shows a successful JSON payload converted from a CSV, TSV, or TXT file. It contains records associated with the specified namespace and is used to delete records identified by email addresses.
{
"action": "delete_identity",
"datasetId": "66f4161cc19b0f2aef3edf10",
"displayName": "output/sample-big-001.json",
"description": "a simple sample",
"identities": [
{
"namespace": {
"code": "email"
},
"id": "1"
},
{
"namespace": {
"code": "email"
},
"id": "2"
}
]
}
The following table describes the properties in the JSON payload.
actiondelete_identity by the conversion script.datasetIddisplayNamedescriptionidentitiesAn array of objects, each containing:
namespace: An object with acodeproperty specifying the identity namespace (for example, “email”).id: The identity value to delete for this namespace.
Submit the generated JSON data to the /workorder endpoint
To submit a request, follow the instructions in the create a record delete work order section. Make sure to use the converted JSON payload as the request body (-d) when sending your curl POST request to the /workorder API endpoint.
Retrieve details for a specific record delete work order lookup
Retrieve information for a specific record delete work order by making a GET request to /workorder/{WORKORDER_ID}. The response includes action type, status, associated dataset and user information, and audit metadata.
API format
GET /workorder/{WORKORDER_ID}
{WORK_ORDER_ID}Request
curl -X GET \
https://platform.adobe.io/data/core/hygiene/workorder/DI-6fa98d52-7bd2-42a5-bf61-fb5c22ec9427 \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}'
Response
A successful response returns the details of the specified record delete work order.
{
"workorderId": "DI-6fa98d52-7bd2-42a5-bf61-fb5c22ec9427",
"orgId": "3C7F2AC143214567890ABCDE@AcmeOrg",
"bundleId": "BN-dbe3ffad-cb0b-401f-91ae-01c189f8e7b2",
"action": "identity-delete",
"createdAt": "2037-01-21T08:25:45.119Z",
"updatedAt": "2037-01-21T08:30:45.233Z",
"operationCount": 3,
"targetServices": [
"ajo",
"profile",
"datalake",
"identity"
],
"status": "received",
"createdBy": "g.baratheon@acme.com <g.baratheon@acme.com> C189F8E7B2@acme.com",
"datasetId": "d2f1c8a4b8f747d0ba3521e2",
"datasetName": "Acme_Marketing_Events",
"displayName": "Marketing Identity Delete Request",
"description": "Scheduled identity deletion for marketing compliance"
}
The following table describes the properties in the response.
workorderIdorgIdbundleIdactioncreatedAtupdatedAtoperationCounttargetServicesstatuscreatedBydatasetIddatasetNamedisplayNamedescriptionUpdate a record delete work order
Update the name and description for a record delete work order by making a PUT request to the /workorder/{WORKORDER_ID} endpoint.
API format
PUT /workorder/{WORKORDER_ID}
The following table describes the parameter for this request.
{WORK_ORDER_ID}Request
curl -X PUT \
https://platform.adobe.io/data/core/hygiene/workorder/DI-893a6b1d-47c2-41e1-b3f1-2d7c2956aabb \
-H 'Authorization: Bearer {ACCESS_TOKEN}' \
-H 'x-api-key: {API_KEY}' \
-H 'x-gw-ims-org-id: {ORG_ID}' \
-H 'x-sandbox-name: {SANDBOX_NAME}' \
-H 'Content-Type: application/json' \
-d '{
"name": "Updated Marketing Identity Delete Request",
"description": "Updated deletion request for marketing data"
}'
The following table describes the properties you can update.
namedescriptionResponse
A successful response returns the updated work order request.
{
"workorderId": "DI-893a6b1d-47c2-41e1-b3f1-2d7c2956aabb",
"orgId": "7D4E2AC143214567890ABCDE@AcmeOrg",
"bundleId": "BN-12abcf45-32ea-45bc-9d1c-8e7b321cabc8",
"action": "identity-delete",
"createdAt": "2038-04-15T12:14:29.210Z",
"updatedAt": "2038-04-15T12:30:29.442Z",
"operationCount": 2,
"targetServices": [
"profile",
"datalake"
],
"status": "received",
"createdBy": "b.tarth@acme.com <b.tarth@acme.com> 8E7B321CABC8@acme.com",
"datasetId": "1a2b3c4d5e6f7890abcdef12",
"datasetName": "Acme_Marketing_2024",
"displayName": "Updated Marketing Identity Delete Request",
"description": "Updated deletion request for marketing data",
"productStatusDetails": [
{
"productName": "Data Management",
"productStatus": "waiting",
"createdAt": "2024-06-12T20:11:18.447747Z"
},
{
"productName": "Identity Service",
"productStatus": "success",
"createdAt": "2024-06-12T20:36:09.020832Z"
},
{
"productName": "Profile Service",
"productStatus": "waiting",
"createdAt": "2024-06-12T20:11:18.447747Z"
},
{
"productName": "Journey Orchestrator",
"productStatus": "success",
"createdAt": "2024-06-12T20:12:19.843199Z"
}
]
}
workorderIdorgIdbundleIdactioncreatedAtupdatedAtoperationCounttargetServicesstatusreceived,validated, submitted, ingested, completed, and failed.createdBydatasetIddatasetNamedisplayNamedescriptionproductStatusDetailsAn array listing the current status of downstream processes for the request. Each object contains:
productName: The name of the downstream service.productStatus: The current processing status from the downstream service.createdAt: The timestamp when the most recent status was posted by the service.
This property is available after the work order is submitted to downstream services to begin processing.