Skip to content

Requests & pagination

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.

  • Property names are camelCaseproductVariantId, 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.

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.

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.