Finalize a settled sale
Turns a settled cart plus its tenders into one idempotent sale event, booked against the register session (201). This is the ONLY way to commit a sale. The submitted cart prices are ADVISORY — the server re-prices every catalog line from its own reference authority (plus any declaredDiscounts, automatic promotions and a presented couponCode) and refuses a cart it prices differently. Idempotent by transactionId: replaying the same id with the same content is a no-op. Reach for it to ring up a customer at the till. Gotchas: mark a self-priced line (Article libre / gift card) with custom: true so it is trusted instead of re-priced; a registerId keys the NF525 fiscal chain per till. Failure conditions: 400 on a malformed body; 403 for a declared discount the principal may not grant (needs price:override, or a single-use x-elevation-token); 409 when the same transactionId was already finalized with DIFFERENT content; 422 on an empty cart, a price/settlement mismatch (beyond the deployment’s cash-rounding tolerance) or a SKU the price authority does not carry.
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
1111111sale, rental, repair, return - Option 1
- Option 2
- Option 3
1Response
The committed sale event: its transaction, ticket, loyalty, and stock movements.

