Error
A valid request URL is required to generate request examples{
"id": "count-2026-07-28-001",
"shopId": "store-rivoli",
"status": "open",
"lines": [
{
"skuId": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"expectedQuantity": 10,
"countedQuantity": null,
"unitCostCents": 1500
}
]
}{
"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
}
}{
"error": {
"code": "VALIDATION_FAILED",
"message": "<string>",
"statusCode": 123
}
}Inventory
Open a count session (comptage / inventaire physique)
Opens a physical inventory count (comptage) for one shop from a seeded set of lines (each a SKU with its book quantity and unit cost in cents). Every line starts uncounted (countedQuantity: null); record counts against it, then close to emit the valued adjustment. 409s when the session id already exists.
POST
/
v1
/
inventory
/
counts
Error
A valid request URL is required to generate request examples{
"id": "count-2026-07-28-001",
"shopId": "store-rivoli",
"status": "open",
"lines": [
{
"skuId": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
"expectedQuantity": 10,
"countedQuantity": null,
"unitCostCents": 1500
}
]
}{
"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
}
}{
"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
application/json
Response
The opened count session (status open, every line uncounted).

