Overview
The product endpoints expose your venue catalog (the products and services you sell):GET /products- list the whole catalog of your venue (no pagination)GET /products/{id}- retrieve a single product by its ID
package_products array is non-empty.
Every field is always present with an explicit
null when unset. Amounts are verbatim: price/cost are integer cents, vat is in basis points (200 = 2%). Timestamps are Unix milliseconds.Authentication
All requests require a Bearer token (your BookingShake API key):List products
GET /products returns every active product of the authenticated venue.
{ message, data } envelope, where data is an array of product objects.
Get a product
GET /products/{id} returns one product, in the same shape as the list items.
The product document ID.
Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique product ID |
title / subtitle / subsubtitle | string | null | Product titles |
description_html | string | null | Rich-text (HTML) description |
price | number | null | Selling price, in cents |
cost | number | null | Cost price, in cents |
vat | number | null | VAT rate in basis points (200 = 2%) |
price_includes_tax | boolean | null | Whether price is tax-inclusive |
priced_per_person | boolean | null | Priced/quantified per person (quantity = number of guests) |
is_accommodation | boolean | null | Whether the product is an accommodation (lodging) product |
tag / accounting_tag | string | null | Catalog and accounting tags |
package_products | array | null | For packages: sub-products { id, quantity, price?, price_includes_tax? }. price (cents) and price_includes_tax are an optional per-product price override; absent means the sub-product follows its current catalog price. A non-empty array marks the product as a package. |
children_products | array | null | IDs of child products |
locale | array | null | Per-language translations { lang, value, description } |
created_at | number | null | Creation timestamp, Unix milliseconds |
Errors
| Status | Meaning |
|---|---|
400 | Missing/invalid token, or missing product id (GET /products/{id}) |
404 | Product not found - it does not exist, belongs to another venue, or has been deleted |
429 | Rate limit exceeded (60 requests/minute) |
500 | Internal server error |
A
404 is returned uniformly whenever the product is outside your scope, so the existence of another venue’s product is never disclosed.