A valid request URL is required to generate request examples{
"items": [
{
"id": "rep-2030-000471",
"article": {
"label": "Smartphone screen",
"skuId": "d4c81e5b0f7a396248ce15b7d0a83f62915ce4d7b0863af251d94c7e08b3f6a1",
"purchasedAt": "2029-01-16T09:00:00.000Z"
},
"issueDescription": "Cracked screen after a drop",
"quoteAmountCents": 12000,
"depositAmountCents": 3600,
"expectedPickupDate": "2030-07-20T18:00:00.000Z",
"customerId": "cust-1",
"storeId": "store-rivoli",
"status": "intake",
"actorId": "user-camille",
"createdAt": "2030-07-10T14:05:00.000Z",
"updatedAt": "2030-07-10T14:05: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 repair orders
Returns ONE PAGE of the repair board, NEWEST-CREATED FIRST. Page with page/pageSize (max 100) and keep going until page reaches pageCount; total is the count across ALL pages, not just this one. Reach for this to answer ‘what is in the workshop’, ‘what is waiting to be collected’ or to FIND an order id; when you already hold an id use getRepairOrder. Narrow with status — intake (taken in, not yet sent through), in_workshop (being worked on), ready (repaired, awaiting pickup), collected (terminal, handed back) or unrepairable (terminal, written off) — and with store (the store the article was dropped at). WARNING: omitting store returns orders from EVERY store, not just the caller’s; pass it unless you really want the estate-wide board. expectedPickupDate is a PROMISE, not a status: an order past its date is still ready/in_workshop, so compare it yourself to find late jobs. No match is an empty items array (200), never a 404.
A valid request URL is required to generate request examples{
"items": [
{
"id": "rep-2030-000471",
"article": {
"label": "Smartphone screen",
"skuId": "d4c81e5b0f7a396248ce15b7d0a83f62915ce4d7b0863af251d94c7e08b3f6a1",
"purchasedAt": "2029-01-16T09:00:00.000Z"
},
"issueDescription": "Cracked screen after a drop",
"quoteAmountCents": 12000,
"depositAmountCents": 3600,
"expectedPickupDate": "2030-07-20T18:00:00.000Z",
"customerId": "cust-1",
"storeId": "store-rivoli",
"status": "intake",
"actorId": "user-camille",
"createdAt": "2030-07-10T14:05:00.000Z",
"updatedAt": "2030-07-10T14:05: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 <= 1001intake, in_workshop, ready, collected, unrepairable Response
A page of matching repair orders, newest-created first, with the pagination totals.
A page of matching repair orders, newest-created first, 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
