Requests & pagination
Base URL and headers
Section titled “Base URL and headers”https://{store primary domain}{path}Authorization: Bearer ciqra_at_…Content-Type: application/json (on requests with a body)Paths have no version prefix and no store id. The store is the domain.
JSON conventions
Section titled “JSON conventions”- Property names are camelCase —
productVariantId,updatedAt. - Enums are strings —
"status": "Active", never a number. Each enum’s allowed values are listed on the schema in the reference. - Ids are UUIDs; timestamps are ISO 8601 with offset (
2026-09-22T10:15:00+00:00). - Unknown properties in your request body are ignored — they do not cause an error, so a typo silently does nothing. Check the schema.
Pagination
Section titled “Pagination”List routes use offset paging with skip and take:
GET /apps/catalog/products?skip=100&take=100→ { "total": 1284, "skip": 100, "take": 100, "items": [ … ] }| Route | Default take |
Maximum take |
|---|---|---|
GET /apps/catalog/products |
50 | 100 |
GET /apps/catalog/collections/{id}/products |
50 | 250 |
GET /apps/inventory/levels |
50 | 250 |
GET /apps/catalog/collections |
— | not paginated |
Values outside the range are clamped, not rejected: take=1000 returns 100 rows and says "take": 100. Read
take from the response rather than assuming yours was used. Stop when skip + take >= total.
Offset paging is not a snapshot: rows added or removed while you page can shift. For a full sync, page by the stable order the route documents and reconcile by id.
Omitted versus null
Section titled “Omitted versus null”Write routes distinguish three states for an optional field:
| You send | Meaning |
|---|---|
| field absent | leave it unchanged |
"field": null |
clear it (where clearing is allowed) |
"field": value |
set it |
This matters for partial updates: sending a full object with nulls for fields you did not intend to touch
clears them. Send only the fields you are changing. Each field’s exact behaviour is on the route’s page —
for example bulk product updates.