Read endpoints
Every list endpoint shares the same envelope, cursor pagination, and updatedSince incremental-sync filter (see Overview):
{
"data": [ … ],
"nextCursor": "01H…" // null on the last page
}Endpoints
| Endpoint | Scope | Filters |
|---|---|---|
GET /api/v1/items | items.view | status, locationId, categoryId, tag, updatedSince |
GET /api/v1/items/{id} | items.view | include=codes,service (service also needs the service.view scope) |
GET /api/v1/products | products.view | trackingMode, categoryId, updatedSince |
GET /api/v1/locations | items.view or stock.view | — (returns the full tree with materialized paths) |
GET /api/v1/stock-levels | stock.view | productId, locationId |
Filters are exact matches, AND-combined. Location filters do not expand subtrees — fetch /api/v1/locations once and expand paths on your side. Economy fields (purchase price, book-value inputs) appear only for tokens holding economy.view.
curl "https://your-org.leidang.app/api/v1/items?updatedSince=2026-07-01T00:00:00Z&limit=200" \ -H "Authorization: Bearer ldg_XXXXXXXXXXXXXXXX"