Skip to main content
Places an order for one of the account’s contacts. It is the same order a WhatsApp cart opens: it shows in the panel’s Orders, gets the next order number, starts new, and its history begins “Placed through the API”. When the account has set Catalogue to open a deal for each order, it opens one in Pipelines too. Webhooks get order.opened.
Needs the catalogue.orders:write scope.

Body

Each line in items: The total is worked out from the lines. Send an Idempotency-Key header so a retried request places the order once.

Request

Response

201 Created — the order. status is new, confirmed, declined, fulfilled or cancelled. source is where it came from: cart (a WhatsApp cart), agent (an AI agent’s draft, approved by a person), person (made by hand in the panel) or api. channel is the channel it came in on, where replies about it go. Each line keeps its own copy of the name and price, so a later change to the product doesn’t rewrite it; product is the product’s id, or null for a SKU the catalogue doesn’t have. Money is in minor units.

Errors

Every refusal is {"error": {"code", "message", "field"}}; field is there when one input is at fault. Any request can also be refused for its key, its account or its rate (key_required, invalid_key, account_suspended, plan_excludes_api, address_not_allowed, rate_limited); see the overview.