> ## Documentation Index
> Fetch the complete documentation index at: https://docs.vendi.technology/llms.txt
> Use this file to discover all available pages before exploring further.

# Catalogue API reference

> Read-only JSON catalogue for the warehouse tool.

Read-only. JSON over HTTPS. All prices are CAD.

## Authentication

Send your key on every request, either way:

```
Authorization: Bearer <your key>
x-api-key: <your key>
```

Keep the key secret (server side only, never in a browser app). A missing or wrong key returns `401`. Keys can be revoked and replaced at any time.

## List the catalogue

`GET /api/v1/catalog`

| Query | Meaning |
| - | - |
| `limit` | Page size, default 500, max 1000 |
| `cursor` | Value of `next_cursor` from the previous page |
| `updated_since` | ISO date; only products changed since then (use this for incremental syncs), e.g. `2026-10-01T00:00:00Z` |
| `category`, `brand` | Case-insensitive exact filters |

```json theme={null}
{
  "data": [
    {
      "sku": "NICP-ALP-CHMT-6MG",
      "name": "ALP Chilled Mint 6mg Nicotine Pouches",
      "cost": 36.25,
      "currency": "CAD",
      "category": "Nicotine Pouches",
      "brand": "ALP",
      "unit_of_measure": "Sleeve",
      "eta_days": 21,
      "supplier": "CK",
      "updated_at": "2026-10-09T15:34:27.449Z"
    }
  ],
  "count": 1,
  "next_cursor": null,
  "generated_at": "2026-10-09T18:00:00.000Z"
}
```

Keep requesting with `cursor=<next_cursor>` until `next_cursor` is `null`.

## One product

`GET /api/v1/catalog/{sku}` returns `{ "data": { ... } }` or `404`.

## Fields

* `cost` is the vendor cost to you: the final price Vendi sells the product to the warehouse, per `unit_of_measure`. Add your own store markup on top.
* `eta_days` defaults to 21.
* `supplier` is for your internal use and must be hidden from buyers.
* Vendor, markup % and store price are deliberately not sent.
* Only approved products with a price are listed; products Vendi has flagged as unreliable are left out.

## Errors

`401` bad or missing key, `400` bad parameter, `404` unknown SKU, `500` try again shortly.

## SKU standard

Every product supplied by CK or Guy has a SKU in the form `{CATEGORY}-{BRAND}-{PRODUCT}[-{VARIANT}]-{SUPPLIER}`, for example `NICP-ALP-CHILMINT-6MG-CK`. If two products would collide, a pack/case disambiguator (e.g. `P8`, `C30`) or a number is added before the supplier code. Products that come from WooCommerce / the master catalogue keep their own SKU.

* Store the `sku` field as the product identifier on your side. It is stable once assigned.
* Legacy SKUs (for example `CK-230068`, `GUY-1234`) still resolve: `GET /api/v1/catalog/{sku}` and the other SKU inputs accept either the current or an old SKU and return the product under its current SKU. Always use the `sku` in the response from then on.
* New products get their SKU from one server helper (`generateProductSku`), so the format is the same however the product was created.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.