A valid request URL is required to generate request examples{
"items": [
{
"id": "nike-fr",
"name": "Nike France",
"category": "sportswear",
"email": "orders@nike.fr",
"leadTimeDays": 7,
"active": true
}
],
"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 suppliers (fournisseurs)
Returns one page of suppliers (fournisseurs), optionally filtered by category and/or active and sorted by name or leadTimeDays (délai de réappro). To find a vendor by name or id, pass ?search= — it filters SERVER-SIDE over the WHOLE directory before paginating, so a picker queries instead of page-walking. Use page/pageSize (max 100) to walk the result; total/pageCount tell you when to stop. To resolve a KNOWN set of vendors — naming the suppliers the rows you are showing point at — pass ?ids=a,b,c instead of searching: a batch lookup of up to 100 ids, where an unknown id is absent from the answer rather than invented. ids, search, category and active combine as AND.
A valid request URL is required to generate request examples{
"items": [
{
"id": "nike-fr",
"name": "Nike France",
"category": "sportswear",
"email": "orders@nike.fr",
"leadTimeDays": 7,
"active": true
}
],
"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 <= 100Free-text search matched SERVER-SIDE, case-insensitive, against the supplier's name and id. Applied across the WHOLE directory before the page window, so total is the real match count — a picker never has to walk the directory to search it.
1BATCH LOOKUP — a comma-separated set of supplier ids to resolve, e.g. ids=sup-denim,sup-outdoor. This is the RESOLVER's read, the counterpart of search: use it to name the vendors that rows already on screen point at, instead of paging the whole directory into memory to build a lookup.
At most 100 ids (the page size cap — a page of rows can carry no more), deduplicated. The set must FIT the requested page: pass pageSize ≥ the number of ids, or the request is a 400 rather than a silently short answer.
An id the directory does not carry is simply ABSENT from items — never a placeholder row — and total counts the ids that RESOLVED, so total below the number you asked for is how you learn which ones do not exist. An empty ids= and a blank entry (a,,b) are both a 400: 'resolve nothing' must never be read as 'the whole directory'.
Combines with the other facets as AND — which means a resolver should normally pass ids ALONE: adding active=true would drop the vendors that have since been archived, and a link to an archived vendor still has to be named.
1Filter to one supplier category (exact match).
1Filter by active flag: true for active suppliers, false for archived ones.
true, false Sort key: supplier name or replenishment lead time in days (default name).
name, leadTimeDays Sort direction (default asc).
asc, desc Response
A page of suppliers with the pagination totals.
A page of suppliers 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
