Skip to main content
Read-only. JSON over HTTPS. All prices are CAD.

Authentication

Send your key on every request, either way:
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
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.