A valid request URL is required to generate request examples{
"id": "b8f1c0d2-6d4f-4a2b-9c31-0f7a2e5d1a94",
"customerId": "cust-1",
"kind": "accrual",
"points": 100,
"valueCents": 10000,
"at": "2026-07-28T09:00:00.000Z"
}{
"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
}
}Accrue loyalty points for a sale (points de fidélité)
Appends an EARN entry to a customer’s ledger for a settled sale. subtotalCents is the sale subtotal in integer cents; the points granted follow the active program’s accrualPointsPerCent. entryId is the IDEMPOTENCY KEY: supply the sale’s own stable id and a replay returns 409 instead of double-crediting; omit it and the server mints a UUID — never invent a key from a client-side counter, which collides across sessions. 422 when the subtotal is too small to earn a whole point.
A valid request URL is required to generate request examples{
"id": "b8f1c0d2-6d4f-4a2b-9c31-0f7a2e5d1a94",
"customerId": "cust-1",
"kind": "accrual",
"points": 100,
"valueCents": 10000,
"at": "2026-07-28T09:00:00.000Z"
}{
"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
}
}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.
Body
Response
The appended accrual entry (kind: "accrual").
The appended accrual entry (kind: "accrual").
11accrual, redemption 0 < x <= 90071992547409910 <= x <= 9007199254740991^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$
