Overview
The Kibo Redaction API implements a two-phase workflow for processing GDPR right-to-erasure requests (and similar data subject deletion obligations). The two phases are:- Create a draft report — Kibo scans the tenant’s data for all PII associated with the subject and returns a report listing every affected record. No data is modified at this stage.
- Execute the redaction — After reviewing the draft, you trigger the irreversible redaction that overwrites or removes the identified PII.
How This Domain Fits Into Kibo
A single data subject’s PII can exist across many parts of the Kibo platform. The redaction engine covers:| Entity type | What is redacted |
|---|---|
| Orders | Billing/shipping addresses, contact details, custom attributes |
| Payments | Payment method identifiers attached to orders |
| Checkouts | In-progress or abandoned checkout PII |
| Returns | Return contact and address details |
| Wishlists | Wishlist owner identity |
| Shipments | Recipient contact and address details |
| Customer account | The account record itself (identified by customerAccountId) |
Prerequisites
- Kibo API credentials (client ID and shared secret) with access to the
platform/datanamespace - The
customerAccountId(integer) oruserId(string) of the data subject whose data must be erased - An understanding of any custom attribute FQNs attached to orders, customers, returns, or shipments for your tenant, if you need those included in the redaction
The Two-Phase Workflow
Phase 1 — Create a Redaction Report (Draft)
Endpoint:POST /platform/data/redaction/report — API reference
This call scans the tenant’s data and returns a draft report. No data is modified.
Request body
| Field | Type | Description |
|---|---|---|
customerAccountId | integer | The Kibo customer account ID of the data subject. Required if userId is not provided. |
userId | string | The user ID of the data subject. Required if customerAccountId is not provided. |
attributeFqns.order | string[] | Fully-qualified names of custom order attributes to include in the redaction scope. |
attributeFqns.customer | string[] | Fully-qualified names of custom customer attributes to include. |
attributeFqns.return | string[] | Fully-qualified names of custom return attributes to include. |
attributeFqns.shipment | string[] | Fully-qualified names of custom shipment attributes to include. |
clearDataNodes.orders | boolean | If true, wipes the entire order data node rather than field-level PII only. |
clearDataNodes.checkouts | boolean | If true, wipes the entire checkout data node. |
clearDataNodes.shipments | boolean | If true, wipes the entire shipment data node. |
Example response
status: "Draft". The report has been created and the affected entities have been identified, but nothing has been changed yet.
Phase 2 — Review the Draft Report
Endpoint:GET /platform/data/redaction/report/{reportId} — API reference
Retrieve the draft report and verify the scope before committing to the redaction.
affectedEntities object carefully:
orders.count/orders.ids— the orders that will have PII removedpayments.count/payments.ids— payment records linked to those orderscheckouts.count/checkouts.ids— any checkout records foundreturns.count/returns.ids— return recordswishlists.count/wishlists.ids— wishlist recordsshipments.count/shipments.ids— shipment recordscustomerAccountId— the resolved account ID of the subject
status is "Draft" before proceeding to execution. A report with status: "Executed" cannot be executed again.
Phase 3 — Execute the Redaction
Endpoint:POST /platform/data/redaction/execute/{reportId} — API reference
reportId in the path identifies which draft to execute.
Example response
status changes to "Executed", executionCompletedAt is populated, and operationLog contains one entry per operation performed.
Reading the operation log
| Field | Description |
|---|---|
timestamp | When this individual operation ran |
phase | Processing phase (e.g., "Execution") |
store | The data store or context within the tenant |
entityType | The type of record affected (e.g., "Order", "CustomerAccount") |
entityId | The ID of the specific record |
operation | The action taken (e.g., "RedactPii") |
status | "Success" or "Failed" for this individual operation |
recordsAffected | Number of records modified by this operation |
durationMs | Time taken in milliseconds |
errorMessage | Populated only on failure; describes what went wrong |
status: "Failed", check errorMessage for details and review errorSummary on the report for a rolled-up description.
Listing and Auditing Reports
Endpoint:GET /platform/data/redaction/report — API reference
Use this endpoint to retrieve a paginated list of reports — useful for auditing which requests have been fulfilled and which drafts are awaiting execution.
Query parameters
| Parameter | Type | Description |
|---|---|---|
status | string | Filter by report status: Draft or Executed |
from | date-time | Return only reports created at or after this timestamp (ISO 8601) |
to | date-time | Return only reports created at or before this timestamp (ISO 8601) |
page | integer | Page number (1-based) |
pageSize | integer | Number of results per page |
Example request
Example response
RedactionReportSummaryResponse objects, which do not include affectedEntities, request, or operationLog. To get those fields, retrieve the individual report by ID.
Field Reference
Key fields onRedactionReportResponse:
| Field | Type | Description |
|---|---|---|
reportId | string | Unique identifier for this redaction report |
status | string | "Draft" before execution, "Executed" after |
tenantId | integer | The Kibo tenant this report belongs to |
subject.customerAccountId | integer | Resolved customer account ID of the data subject |
subject.resolvedEmailAddresses | string[] | Email addresses resolved from the subject’s account |
affectedEntities | object | Counts and IDs of all records that will be / were redacted |
operationLog | array | Per-record operation results; populated only after execution |
createdAt | date-time | When the draft report was created |
executionStartedAt | date-time | When execution began (null on Draft) |
executionCompletedAt | date-time | When execution finished (null on Draft) |
errorSummary | string | High-level error description if any operations failed |
Troubleshooting
EmptyaffectedEntities on a draft report
The subject identifier provided (customerAccountId or userId) did not match any records. Verify the ID is correct for your tenant. Note that customerAccountId is a tenant-scoped integer, not a global Kibo user ID.
400 or 422 when creating a report
Ensure you are providing at least one of customerAccountId or userId. Providing neither, or providing an attributeFqns array with invalid FQN strings, will result in a validation error.
Attempting to execute an already-executed report
Once a report has status: "Executed", calling POST /platform/data/redaction/execute/{reportId} again will return an error. Each data subject erasure request requires a new draft report.
Partial failures in the operation log
If some operationLog entries show status: "Failed", the redaction completed partially. Records that failed were not redacted. Review each failed entry’s errorMessage. You may need to create and execute a new report to retry the affected records, or investigate the underlying data integrity issue before retrying.
