Confirm a purchase
const url = 'https://app.mondochat.io/v1/server/purchases/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/confirm';const options = { method: 'POST', headers: { 'Mondochat-App-Id': '<Mondochat-App-Id>', Authorization: 'Bearer <token>', 'Content-Type': 'application/json' }, body: '{"external_ref":"order-1042","status":"paid"}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url https://app.mondochat.io/v1/server/purchases/2489E9AD-2EE2-8E00-8EC9-32D5F69181C0/confirm \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --header 'Mondochat-App-Id: <Mondochat-App-Id>' \ --data '{ "external_ref": "order-1042", "status": "paid" }'Sets a purchase to paid, failed or cancelled from your server, with an optional external_ref. Takes the app id and the server secret, and an Idempotency-Key header. When it becomes paid one purchase card is posted to the conversation and the purchase.updated webhook is sent. See https://docs.mondochat.io/guides/commerce/.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Path Parameters
Section titled “Path Parameters”Header Parameters
Section titled “Header Parameters”Request Bodyrequired
Section titled “Request Bodyrequired”Responses
Section titled “Responses”Successful Response
A purchase of an item by a buyer from a seller.
object
The buyer’s id.
When the purchase was created.
ISO 4217 currency of the price.
The purchase’s id.
How it is paid: the app’s commerce.payment_mode, or external for a purchase recorded from your server.
The price in minor units.
The seller’s id.
pending until paid; insufficient when the balance was short.
Example
{ "buyer_id": "0199d6a0-1000-7000-8000-000000000002", "conversation_id": "0199d6a0-2000-7000-8000-000000000001", "created_at": "2026-11-01T09:30:00Z", "currency": "EUR", "external_ref": "order-1042", "id": "0199d6a0-7000-7000-8000-000000000001", "item": { "id": "private-show", "kind": "show", "title": "Private show" }, "mode": "server_charge", "price_minor": 1500, "seller_id": "0199d6a0-1000-7000-8000-000000000001", "status": "paid"}Problem
An RFC 9457 problem: the body of every error answer.
object
The stable error code to branch on, such as policy_denied.
What went wrong this time, when there is more to say.
For validation, one entry per invalid field.
One invalid field.
object
The path to the field.
What is wrong with it.
The path of the request.
For policy_denied and limit_reached, the rule or limit that refused the request; for forbidden, a short cause such as you_blocked; for banned, temporary when the ban expires.
The HTTP status code.
A short summary of the problem.
A URL that names the problem, https://app.mondochat.io/problems/<code>.
Example
{ "code": "policy_denied", "detail": null, "instance": "/v1/conversations/0199d6a0-2000-7000-8000-000000000001", "reason": "pins", "status": 403, "title": "Policy denied", "type": "https://app.mondochat.io/problems/policy_denied"}