A valid request URL is required to generate request examples{
"from": null,
"to": null,
"store": null,
"overall": {
"sessionCount": 1,
"countedCount": 1,
"uncountedCount": 0,
"balancedCount": 0,
"shortageCount": 1,
"overageCount": 0,
"openingFloatCents": 20000,
"expectedCashCents": 157000,
"countedCashCents": 156500,
"netVarianceCents": -500,
"shortageCents": 500,
"overageCents": 0
},
"byStore": [
{
"store": "store-bastille",
"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 the period close
Returns the period-close aggregate (clôture de période) — the overall cash-variance summary (écart de caisse) plus a per-store breakdown — over the same register-session projection. This is the LIVE read; sealing the period is the separate write at POST /v1/finance/period-close. Optionally narrow by from / to (YYYY-MM-DD, inclusive; from <= to) and store. A malformed or inverted period returns 400.
A valid request URL is required to generate request examples{
"from": null,
"to": null,
"store": null,
"overall": {
"sessionCount": 1,
"countedCount": 1,
"uncountedCount": 0,
"balancedCount": 0,
"shortageCount": 1,
"overageCount": 0,
"openingFloatCents": 20000,
"expectedCashCents": 157000,
"countedCashCents": 156500,
"netVarianceCents": -500,
"shortageCents": 500,
"overageCents": 0
},
"byStore": [
{
"store": "store-bastille",
"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.

