Skip to content
DEV preview — API version 1.0.0 — not the public production site — Development API: dev-api.theprioryshop.co.uk

First API Request

This walks through the response from Quickstart field by field. The exact, generated schema is always the API Reference - this page is a guided introduction to reading it.

{
"rows": [ /* ... */ ],
"page": 1,
"pageSize": 5,
"total": 479,
"totalPages": 96
}

List endpoints that support pagination (products, inventory stock) always return this shape: rows (the actual data for this page), page and pageSize (what you asked for, or the defaults), and total/totalPages, which are independent of pagination - total is always the count of everything matching your filters, not just what’s on this page. Endpoints that don’t paginate (categories, promotions) return a plain array instead - see each route’s entry in the API Reference for which shape it uses.

{
"id": "clx1product000001",
"storeId": "clx1store0000001",
"categoryId": "clx1category000001",
"name": "Alpha Bread 800g",
"sku": "SKU-ALPHA-BREAD",
"barcode": "5000000000001",
"brand": "Priory",
"size": "800g",
"unitType": "item",
"sellingPriceGross": "1.25",
"sellingPriceNet": "1.04",
"taxCategory": "STANDARD",
"vatRate": { "id": "clx1vatrate000001", "code": "STD", "name": "Standard Rate", "percentage": "20.00" },
"isActive": true,
"variablePrice": false,
"ageRestricted": false,
"alcoholRestricted": false,
"tobaccoRestricted": false,
"vapeRestricted": false,
"updatedAt": "2026-08-27T17:51:41.976Z"
}

A few things worth knowing before you write code against this:

  • Money is always a string. sellingPriceGross/sellingPriceNet are "1.25", not 1.25. This preserves exact decimal precision - don’t parseFloat() unless you specifically need a float for display; prefer a decimal-safe parser for anything involving totals.
  • categoryId/barcode/brand/size/vatRate can be null. Not every product has a category, barcode, brand, size, or an assigned VAT rate.
  • updatedAt is ISO 8601 UTC. Use it with updatedSince (see Catalog Sync) to fetch only what’s changed.
  • Restriction flags are booleans, not a single “restricted” flag. A product can be ageRestricted and alcoholRestricted at once, or neither.
  • What you don’t see is deliberate. No cost price, no margin, no supplier information, no stock movement history. This API returns what’s safe to expose to an external integration, not a mirror of the internal database - see each resource’s page under API for what’s excluded and why.
Terminal window
curl "https://dev-api.theprioryshop.co.uk/v1/catalog/products?storeId=clx1store0000001&categoryId=clx1category000001&page=2&pageSize=20" \
-H "Authorization: Bearer epos_dev_sk_example_not_real"

See Products for the full filter list, or the Examples section for more request patterns (search, updatedSince sync, error handling, pagination loops).