A valid request URL is required to generate request examples{
"items": [
{
"id": "corr-9a02:ageVerification:sale-58:2026-07-16T18:12:00.000Z",
"operatorId": "user-camille",
"transactionRef": "sale-58",
"at": "2026-07-16T18:12:00.000Z",
"outcome": "block"
},
{
"id": "corr-8f21:ageVerification:sale-42:2026-07-16T09:00:00.000Z",
"operatorId": "user-camille",
"transactionRef": "sale-42",
"at": "2026-07-16T09:00:00.000Z",
"outcome": "pass"
}
],
"total": 2,
"page": 1,
"pageSize": 20,
"pageCount": 1
}{
"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
}
}List age-verification attestations
Reads the durable age-verification compliance trail (justificatif de contrôle d’âge) — the append-only legal record that a restricted-item check was performed. Reach for this to produce the evidence a regulator asks for, or to audit a given transaction or operator. Every facet is OPTIONAL and combined as AND: transactionRef (one sale), operatorId (one cashier), outcome (pass/block/needs_check), and the inclusive instant range from/to (ISO-8601). With no filter it matches the WHOLE trail, ordered newest-first. The rows carry NO customer identity — by construction the trail cannot hold a date of birth, name or document number. There is deliberately no store filter (the row has no store column). Gating: the router rides the till scope pos.checkout.operate.
PAGING IS NOT OPTIONAL HERE. The trail is append-only and grows with every restricted-item check, so this returns ONE PAGE (page/pageSize, max 100). total counts the matching rows across ALL pages: keep requesting pages until page reaches pageCount. Producing the first page as if it were the evidence is a COMPLIANCE GAP, not a display detail — a regulator asking for a period’s checks must be shown every one of them, so narrow with from/to and walk the pages rather than reading page 1 and stopping.
A valid request URL is required to generate request examples{
"items": [
{
"id": "corr-9a02:ageVerification:sale-58:2026-07-16T18:12:00.000Z",
"operatorId": "user-camille",
"transactionRef": "sale-58",
"at": "2026-07-16T18:12:00.000Z",
"outcome": "block"
},
{
"id": "corr-8f21:ageVerification:sale-42:2026-07-16T09:00:00.000Z",
"operatorId": "user-camille",
"transactionRef": "sale-42",
"at": "2026-07-16T09:00:00.000Z",
"outcome": "pass"
}
],
"total": 2,
"page": 1,
"pageSize": 20,
"pageCount": 1
}{
"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
}
}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.
Query Parameters
1-based page index to return. Defaults to 1.
1 <= x <= 9007199254740991Rows per page, 1..100. Defaults to 20.
1 <= x <= 100Filter to the check(s) recorded for one transaction/ticket reference.
1Filter to the checks a single operator (cashier) recorded.
1Filter to one decision: pass, block or needs_check.
pass, block, needs_check Inclusive lower bound on the instant (at >= from).
1Inclusive upper bound on the instant (at <= to).
1Response
A page of the matching attestations, newest first, with the whole-trail totals (empty items when none match).
A page of the matching attestations, newest first, with the whole-trail totals (empty items when none match).
The rows on this page, in the query's sort order.
Show child attributes
Show child attributes
Total rows matching the filter across ALL pages, not just this one.
0 <= x <= 9007199254740991The 1-based page number served.
0 < x <= 9007199254740991Rows requested per page.
0 < x <= 9007199254740991Total number of pages; stop walking when page reaches it.
0 <= x <= 9007199254740991
