A valid request URL is required to generate request examples{
"customer": {
"id": "cust-1",
"name": "Client anonymisé",
"tier": "Or",
"points": 1240,
"spend": 842.5,
"orders": 17,
"optIn": false,
"status": "anonymized",
"anonymizedAt": "2026-08-04T09:12:00.000Z"
},
"identityCopiesCleared": 2
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Erase a customer's personal data (GDPR)
IRREVERSIBLY anonymizes one customer in place for a GDPR erasure request: the name becomes a placeholder, every contact field is cleared and marketing consent is withdrawn. The record and its id SURVIVE so past sales stay resolvable, and the loyalty ledger is untouched. Idempotent, and audited with the acting actor. Only call this on an explicit, verified erasure request — never to ‘clean up’ data. 404s for an unknown id. Requires pos.customers.privacy — a key held by the named people who handle data-subject requests, not by the till.
A valid request URL is required to generate request examples{
"customer": {
"id": "cust-1",
"name": "Client anonymisé",
"tier": "Or",
"points": 1240,
"spend": 842.5,
"orders": 17,
"optIn": false,
"status": "anonymized",
"anonymizedAt": "2026-08-04T09:12:00.000Z"
},
"identityCopiesCleared": 2
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123,
"fieldErrors": [
{
"field": "<string>",
"message": "<string>"
}
]
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Authorizations
Authorization: Bearer <token>. Accepts EITHER a Keycloak access token (scopes-in-token) OR an opaque POS session token; both resolve to the same pos.* scope vocabulary the route guards enforce.
Path Parameters
The customer id to act on, e.g. cust-1 (client Customer.id).
1Response
The erasure receipt: the scrubbed customer AS IT NOW STANDS (id and loyalty ledger preserved, status already the terminal anonymized) plus how many denormalized copies of their name were cleared alongside the record. Adopt this record as the customer's new state — do not re-read, and never assemble the standing yourself.
The erasure receipt: the scrubbed customer AS IT NOW STANDS (id and loyalty ledger preserved, status already the terminal anonymized) plus how many denormalized copies of their name were cleared alongside the record. Adopt this record as the customer's new state — do not re-read, and never assemble the standing yourself.

