- Catalogue’s endpoints are under
/v1/catalogue/…. They exist when your account has Catalogue on; otherwise they answer404 module_off. - Money is always in minor units — paise for
INR, so249900is ₹2,499.00 — except in a CSV import, where prices are in rupees. - Changes made through the API are recorded under the key’s name, as “API · Shopify sync”, in a product’s history and an order’s.
Scopes
See Keys and scopes.
Products
A product’s SKU is your product code — up to 100 letters, digits, dots, dashes and
underscores, unique in your account — and is what WhatsApp calls the retailer ID. It
can’t change once the product is on WhatsApp. Availability is
in_stock or
out_of_stock; set stock to count what’s left (or null not to), and a stock of 0
makes the product out of stock.
Every product on sale that is added or changed is queued for your WhatsApp catalogue, and its
whatsapp.state follows it there: pending, then synced — or error, with the
reason. Taking a product off sale hides it from customers and agents, but keeps it for
the orders and conversations that name it.
Pictures and imports are multipart form posts, not JSON: the picture in the field
image, the CSV in the field file. An import checks every row before saving any, so
a file with a bad row changes nothing.
Sets
A set is a collection of products sent together — as one WhatsApp product list, or one link on SMS and RCS.
Put products in sets through their
sets — a list of set names, on
add or
change, or the sets column of an import. A
product is put in exactly the sets named, and a name that isn’t a set yet makes one.
Orders
Placing one
POST /v1/catalogue/orders takes a contact and the lines ordered, each naming a product by id or a SKU:unit_price_minor. Each line keeps its own copy of the name and price, so a later
change to the product never rewrites what someone ordered. The order’s source is
api, and its history begins “Placed through the API”. When your account has set
Catalogue to open a deal for each order, the order opens one in
Pipelines too. Send an Idempotency-Key header so a retried
request places it once.
What happens to an order
An order startsnew, and is then confirmed, declined, fulfilled or cancelled — by a
person in the panel, an AI agent a person approved, or the API.
A declined or cancelled order can’t be fulfilled: asking is refused with
invalid_state (409), and the message says why. Asking for the status an order already
has changes nothing and sends nothing again. If the channel can’t send a reply, the
decision still stands and the order’s history says why the reply didn’t go.
Webhook events
Subscribe a webhook endpoint to:
An order event carries the order, as
order, and product.changed the product, as
product — each in the shape its GET answers
(order, without its history;
product).
A CSV import doesn’t send
product.changed for each row it saves. After an import, read
the products you need with GET /v1/catalogue/products.