A valid request URL is required to generate request examples{
"id": "clo-1",
"chainId": "store-close",
"kind": "daily",
"period": "2026-07-16",
"periodStart": "2026-07-16",
"periodEnd": "2026-07-16",
"ticketCount": 2,
"grossTotalCents": 7200,
"grandTotalCents": 7200,
"sequenceNumber": 1,
"closedAt": "2026-07-16T18:00:00.000Z",
"previousValue": "GENESIS",
"algorithm": "hmac-sha256-v2",
"value": "c2f3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3"
}{
"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
}
}Seal a mandatory fiscal closure
Seals a period { store, kind, period } into the register’s closure chain (clôture fiscale, chaînée) as its own sequenced, chain-linked fiscal event (NF525 G3). store (the chain id), kind (daily = clôture Z / monthly / annual) and the matching period key (YYYY-MM-DD / YYYY-MM / YYYY) are all REQUIRED — a missing store or a period that does not match its kind 400s. IDEMPOTENT per (store, kind, period): re-closing a period returns the already-sealed record, it never double-seals.
A valid request URL is required to generate request examples{
"id": "clo-1",
"chainId": "store-close",
"kind": "daily",
"period": "2026-07-16",
"periodStart": "2026-07-16",
"periodEnd": "2026-07-16",
"ticketCount": 2,
"grossTotalCents": 7200,
"grandTotalCents": 7200,
"sequenceNumber": 1,
"closedAt": "2026-07-16T18:00:00.000Z",
"previousValue": "GENESIS",
"algorithm": "hmac-sha256-v2",
"value": "c2f3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3"
}{
"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
}
}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
REQUIRED — the register chain id (per store) to seal the closure into. Missing → 400.
REQUIRED — the closure kind (daily / monthly / annual) to seal.
daily, monthly, annual REQUIRED — the period key matching the kind (YYYY-MM-DD / YYYY-MM / YYYY); a mismatch 400s.
Response
The sealed (or already-sealed) closure record.
The sealed (or already-sealed) closure record.
daily, monthly, annual -9007199254740991 <= x <= 9007199254740991-9007199254740991 <= x <= 9007199254740991-9007199254740991 <= x <= 9007199254740991-9007199254740991 <= x <= 9007199254740991
