Error
A valid request URL is required to generate request examples{
"subjectId": "cust-1",
"entries": [
{
"scope": "marketing_email",
"status": "granted",
"at": "2026-07-14T10:31:00.000Z",
"source": "counter"
}
],
"history": [
{
"scope": "marketing_email",
"status": "granted",
"at": "2026-07-14T10:31:00.000Z",
"actorId": "user-42",
"source": "counter",
"correlationId": "corr-8f21"
}
]
}{
"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
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Customers
Record a customer consent decision
Appends one consent decision to the customer’s immutable trail. status picks the verb: granted records consent for the scope, withdrawn revokes it. source says where the decision was captured (counter, kiosk, web, phone) and is part of the legal record — state it truthfully. Only ever record a decision the customer actually made. Returns the recomputed record. 409 when the scope is already granted, 422 when withdrawing a scope with no active consent, 404 for a subject with no record at all.
POST
/
v1
/
customers
/
{id}
/
consent
Error
A valid request URL is required to generate request examples{
"subjectId": "cust-1",
"entries": [
{
"scope": "marketing_email",
"status": "granted",
"at": "2026-07-14T10:31:00.000Z",
"source": "counter"
}
],
"history": [
{
"scope": "marketing_email",
"status": "granted",
"at": "2026-07-14T10:31:00.000Z",
"actorId": "user-42",
"source": "counter",
"correlationId": "corr-8f21"
}
]
}{
"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
}
}{
"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).
Minimum string length:
1Body
application/json

