A valid request URL is required to generate request examples{
"from": "2026-07-16",
"to": "2026-07-16",
"store": "store-bastille",
"rows": [
{
"sessionId": "cash-2026-07-16-1",
"store": "store-bastille",
"date": "2026-07-16T20:00:00.000Z",
"sessionStatus": "closed",
"openingFloatCents": 20000,
"expectedCashCents": 157000,
"countedCashCents": 156500,
"varianceCents": -500,
"status": "shortage"
}
],
"summary": {
"sessionCount": 1,
"countedCount": 1,
"uncountedCount": 0,
"balancedCount": 0,
"shortageCount": 1,
"overageCount": 0,
"openingFloatCents": 20000,
"expectedCashCents": 157000,
"countedCashCents": 156500,
"netVarianceCents": -500,
"shortageCents": 500,
"overageCents": 0
}
}{
"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
}
}Report cash discrepancies for a period
Returns the per-session expected-vs-counted cash variance report (rapport d’écart de caisse) over the LIVE register-session projection, plus an aggregated summary. Optionally narrow by from / to (YYYY-MM-DD, inclusive; from <= to) and store; absent bounds mean all time. A malformed or inverted period returns 400.
A valid request URL is required to generate request examples{
"from": "2026-07-16",
"to": "2026-07-16",
"store": "store-bastille",
"rows": [
{
"sessionId": "cash-2026-07-16-1",
"store": "store-bastille",
"date": "2026-07-16T20:00:00.000Z",
"sessionStatus": "closed",
"openingFloatCents": 20000,
"expectedCashCents": 157000,
"countedCashCents": 156500,
"varianceCents": -500,
"status": "shortage"
}
],
"summary": {
"sessionCount": 1,
"countedCount": 1,
"uncountedCount": 0,
"balancedCount": 0,
"shortageCount": 1,
"overageCount": 0,
"openingFloatCents": 20000,
"expectedCashCents": 157000,
"countedCashCents": 156500,
"netVarianceCents": -500,
"shortageCents": 500,
"overageCents": 0
}
}{
"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
Inclusive period start (YYYY-MM-DD, from <= to); omit for all time. Bad value → 400.
Inclusive period end (YYYY-MM-DD, from <= to); omit for all time. Bad value → 400.
Narrow the report to one store by its canonical store id; omit for the network.

