List or search products
List products, or search with q. Search supports offset and caps page size at 250. Without q, use cursor for stable pagination with limit.
GET
/productsAuthorization
AuthorizationBearer token (API key) · headerrequiredOrganization API key.
Query parameters
qstringSearch text. Enables `offset` pagination.
limitintegerPage size (1–5000, default 100; max 250 with `q`).
min 1 · max 5000 · default: 100
offsetintegerSkip search hits. Only with `q`.
min 0 · max 10000 · default: 0
storestringFilter by store id. Works with and without `q`. When set, `meta.total` reflects the filtered page (not the unfiltered search estimate).
cursorstringOpaque document id for the next page. Only without `q`. Do not parse. Follow `meta.nextCursor` until it is absent.
Responses
200List of products with meta.
dataProduct[]requiredShow propertiesHide properties
Array of
ProductidstringProduct document id
externalIdstringOptional external identifier
namestringpriceintegerPrice in cents.
supplierstringSupplier id
taxCategorystringSwiss VAT category code
Allowed:
8.12.63.80categorystringCategory id
declarationsstringbarcodestringbarcodeAliasesobject[]Optional additional EANs. Absent when unused. Empty array is not persisted. Available when the barcode aliases feature is enabled for the organization.
Show propertiesHide properties
Array of
objectcodestringrequiredAdditional EAN, lowercased like barcode
quantitynumberBase units represented by this code. Defaults to 1.
priceintegerOptional pack price in cents
labelstringexternalIdstringOptional external article ID
depositProductintegerDeposit in cents.
depositProductLabelstringdescriptionstringsalePriceintegerSale price in cents.
salePercentagenumbersalePriceDateFromstring<date-time>salePriceDateTostring<date-time>costPriceintegerCost price in cents.
marginnumbershowOnScreenbooleanageRestrictionbooleanshowOnScalebooleansaleStopbooleandeactivatedbooleanopenInputbooleanimageUrlstringImage URL. Set via product create/update or POST /products/{productId}/image. Empty string on update clears the field and deletes org-owned storage.
indexintegerallowStorestring[]Allowed store ids (read-only).
hideStorestring[]Hidden store ids (read-only).
deletedbooleanSoft-deleted when true.
createdatestring<date-time>lastupdatestring<date-time>instancestringOrganization id when present
metaListMetarequiredList metadata. `returned` is the length of `data`. Soft-deleted catalog rows are omitted from list results, so `returned` may be less than `limit` even when more active items exist. When `nextCursor` is present, more pages may exist — keep paging until `nextCursor` is absent.
Show propertiesHide properties
totalintegerrequiredWith product search (`q`) without `store`: estimated match count. With `store`: equals `returned` after store visibility filtering. Otherwise equals `returned`. Soft-deleted items are omitted, so a page may be shorter than `limit` even when more active items exist.
returnedintegerrequiredNumber of active items in `data` (soft-deleted rows excluded).
limitintegerrequiredApplied page size.
offsetintegerOnly for product search with `q`.
nextCursorstringOpaque cursor for the next page. Present when more results may exist. Do not parse; pass unchanged as `cursor`. Under soft-delete filtering, `returned < limit` does not mean the list is finished.
400Bad request
errorValidationErrorrequiredValidation details.
Show propertiesHide properties
formErrorsstring[]requiredfieldErrorsobjectrequired403Unauthorized
statusCodeintegerrequiredHTTP status code
messagestringrequiredHuman-readable error message
timestampstring<date-time>requiredpathstringrequiredRequest path
503Search unavailable
errorstringrequiredRequest
curl -X GET "https://dashboard.scango.ch/api/v1/products" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("https://dashboard.scango.ch/api/v1/products", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});Response
{
"data": [
{
"id": "string",
"externalId": "string",
"name": "string",
"price": 0,
"supplier": "string",
"taxCategory": "8.1",
"category": "string",
"declarations": "string",
"barcode": "string",
"barcodeAliases": [
{
"code": "string",
"quantity": 0,
"price": 0,
"label": "string",
"externalId": "string"
}
],
"depositProduct": 0,
"depositProductLabel": "string",
"description": "string",
"salePrice": 0,
"salePercentage": 0,
"salePriceDateFrom": "2019-08-24T14:15:22Z",
"salePriceDateTo": "2019-08-24T14:15:22Z",
"costPrice": 0,
"margin": 0,
"showOnScreen": true,
"ageRestriction": true,
"showOnScale": true,
"saleStop": true,
"deactivated": true,
"openInput": true,
"imageUrl": "string",
"index": 0,
"allowStore": [
"string"
],
"hideStore": [
"string"
],
"deleted": true,
"createdate": "2019-08-24T14:15:22Z",
"lastupdate": "2019-08-24T14:15:22Z",
"instance": "string"
}
],
"meta": {
"total": 0,
"returned": 0,
"limit": 0,
"offset": 0,
"nextCursor": "string"
}
}{
"error": {
"formErrors": [
"string"
],
"fieldErrors": {
"property1": [
"string"
],
"property2": [
"string"
]
}
}
}{
"statusCode": 0,
"message": "string",
"timestamp": "2019-08-24T14:15:22Z",
"path": "string"
}{
"error": "string"
}