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.