Webhook event
order.paid
The event to fulfil on. Sent once, the first time the order is paid in full with the confirmations its network needs: status is paid or overpaid (read it). The merchant wallet's own chain read shows the value. Also sent when an underpaid order is topped up or accepted, and when a late payment completes an expired or cancelled order (paid_late: true). For a high-value order finalized may be false; order.finalized follows.
This is the one event to fulfil on
Ship the goods or switch the service on when order.paid arrives and data.object.status is paid or overpaid. It is sent once for an order. Never fulfil on the payer's browser coming back to your site.
- Type
order.paid- The object it carries
- the
orderobject - Subscribe with
order.paid,order.*or*
Example payload
The body of the request your endpoint receives, shown here over several lines. On the wire it is compact JSON; check its signature over the bytes exactly as they arrive.
Example payload
{
"id": "evt_mm505bp07z2vgqk5jp3mp9ts",
"object": "event",
"livemode": true,
"created": "2026-10-11T14:09:55.764Z",
"type": "order.paid",
"api_version": "2026-10-11",
"data": {
"object": {
"id": "ord_0zymngngvf12b8b2cra7tb8e",
"object": "order",
"livemode": true,
"created": "2026-10-11T14:03:22.418Z",
"updated": "2026-10-11T14:09:55.764Z",
"status": "paid",
"source": "checkout",
"amount": "21.99",
"currency": "USD",
"value": {
"amount": "21.99",
"currency": "USD"
},
"fx": null,
"description": "Order #1042",
"reference": "1042",
"customer": "cus_8ea07c40qsvv19f7rgmeb8ha",
"customer_email": "jane@example.com",
"line_items": [
{
"name": "Ethiopia Yirgacheffe, 1 kg",
"quantity": 1,
"unit_amount": "21.99",
"amount": "21.99",
"price": "price_mbk5s5r45kwheaq89dbmk2gz"
}
],
"settlement": {
"mode": "convert",
"asset": "base:usdc",
"amount_expected": "21.990000",
"amount_received": "21.990000",
"wallet": "wal_bsfw07hymawmda7gg8jsyy3g"
},
"fee_bearer": "payer",
"amount_paid": "21.99",
"amount_due": "0.00",
"amount_refunded": "0.00",
"paid_late": false,
"accepted_short": false,
"refunded": false,
"partially_refunded": false,
"finalized": true,
"has_unconfirmed": false,
"screening_hold": false,
"provider_refund_received": false,
"overpayment": null,
"rails_allowed": [
"orrerie_app",
"relay",
"direct"
],
"accept": [],
"app_pay_allowed": true,
"active_instruction": null,
"instructions": [
"pin_h73hkjr8dyp4zymaet5e2gbv"
],
"payments": [
"pay_2pe50hae6w2jk4sp1rcq5pae"
],
"checkout_session": "cs_z7ek5wj68fyz80j7bz1eq4e0",
"payment_link": null,
"invoice": null,
"subscription": null,
"pos_device": null,
"receipt": "rcpt_ppaxx20nbqv0kqgkwcxcc5xh",
"expires_at": "2026-10-11T15:03:22.418Z",
"paid_at": "2026-10-11T14:09:55.764Z",
"cancelled_at": null,
"metadata": {
"cart_id": "c_7781"
},
"screening": {
"status": "clear"
}
},
"previous_attributes": {
"status": "processing",
"amount_paid": "0.00",
"amount_due": "21.99",
"paid_at": null,
"receipt": null
}
},
"request": {
"id": null,
"idempotency_key": null
},
"pending_webhooks": 1
}Fields of data.object
| Field | In this example |
|---|---|
id | "ord_ |
object | "order" |
livemode | true |
created | "2026-10-11T14: |
updated | "2026-10-11T14: |
status | "paid" |
source | "checkout" |
amount | "21.99" |
currency | "USD" |
value | An object with amount, currency |
fx | null |
description | "Order #1042" |
reference | "1042" |
customer | "cus_ |
customer_email | "jane@example.com" |
line_items | A list of 1 item |
settlement | An object with mode, asset, amount_expected, amount_received, wallet |
fee_bearer | "payer" |
amount_paid | "21.99" |
amount_due | "0.00" |
amount_refunded | "0.00" |
paid_late | false |
accepted_short | false |
refunded | false |
partially_refunded | false |
finalized | true |
has_unconfirmed | false |
screening_hold | false |
provider_refund_received | false |
overpayment | null |
rails_allowed | A list of 3 items |
accept | A list of 0 items |
app_pay_allowed | true |
active_instruction | null |
instructions | A list of 1 item |
payments | A list of 1 item |
checkout_session | "cs_ |
payment_link | null |
invoice | null |
subscription | null |
pos_device | null |
receipt | "rcpt_ |
expires_at | "2026-10-11T15: |
paid_at | "2026-10-11T14: |
cancelled_at | null |
metadata | An object with cart_id |
screening | An object with status |
What each field means is on the page of the order object. data.previous_attributes holds the old values of exactly the fields that changed: here status, amount_paid, amount_due, paid_at, receipt.
Endpoints behind it
Calls that change orders. An event is also sent when a payer, the network, a timer or a person in the dashboard causes the change; the sentence above says which.
- POSTCreate an order/v1/orders
- PATCHUpdate an order/v1/orders/{id}
- POSTCancel an order/v1/orders/{id}/cancel
- POSTCreate a payment instruction/v1/orders/{id}/instructions
- POSTAccept an underpaid order as paid/v1/orders/{id}/accept_underpayment
- POSTKeep an overpayment as customer credit/v1/orders/{id}/keep_overpayment