A valid request URL is required to generate request examples{
"items": [
{
"id": "quote-ok",
"customerId": "cust-1",
"storeId": "store-rivoli",
"currency": "EUR",
"lines": [
{
"description": "Custom sofa",
"skuId": null,
"quantity": 1,
"unitPriceCents": 120000,
"vatRate": 20
}
],
"validUntil": "2030-01-01T00:00:00.000Z",
"status": "draft",
"revision": 0,
"actorId": "user-camille",
"createdAt": "2026-07-28T09:00:00.000Z"
}
],
"total": 1,
"page": 1,
"pageSize": 20,
"pageCount": 1
}{
"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
}
}List quotes
Returns a page of quotes, newest-first, optionally narrowed by customer, store and/or status (draft | sent | accepted | expired | cancelled). Page with page/pageSize (max 100) until page reaches pageCount. This is the clienteling devis list — for a single estimate use the get operation.
A valid request URL is required to generate request examples{
"items": [
{
"id": "quote-ok",
"customerId": "cust-1",
"storeId": "store-rivoli",
"currency": "EUR",
"lines": [
{
"description": "Custom sofa",
"skuId": null,
"quantity": 1,
"unitPriceCents": 120000,
"vatRate": 20
}
],
"validUntil": "2030-01-01T00:00:00.000Z",
"status": "draft",
"revision": 0,
"actorId": "user-camille",
"createdAt": "2026-07-28T09:00:00.000Z"
}
],
"total": 1,
"page": 1,
"pageSize": 20,
"pageCount": 1
}{
"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
1-based page index to return. Defaults to 1.
1 <= x <= 9007199254740991Rows per page, 1..100. Defaults to 20.
1 <= x <= 100Narrow to one customer's quotes (devis) by id.
Narrow to one store's quotes by store id.
Filter by status: draft | sent | accepted | expired | cancelled.
draft, sent, accepted, expired, cancelled Response
A page of matching quotes with the pagination totals.
A page of matching quotes with the pagination totals.
The rows on this page, in the query's sort order.
Show child attributes
Show child attributes
Total rows matching the filter across ALL pages, not just this one.
0 <= x <= 9007199254740991The 1-based page number served.
0 < x <= 9007199254740991Rows requested per page.
0 < x <= 9007199254740991Total number of pages; stop walking when page reaches it.
0 <= x <= 9007199254740991
