Ask for an invitation
Menu

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 order object
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

Fields of data.object in order.paid
FieldIn this example
id"ord_0zymngngvf12b8b2cra7tb8e"
object"order"
livemodetrue
created"2026-10-11T14:03:22.418Z"
updated"2026-10-11T14:09:55.764Z"
status"paid"
source"checkout"
amount"21.99"
currency"USD"
valueAn object with amount, currency
fxnull
description"Order #1042"
reference"1042"
customer"cus_8ea07c40qsvv19f7rgmeb8ha"
customer_email"jane@example.com"
line_itemsA list of 1 item
settlementAn 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_latefalse
accepted_shortfalse
refundedfalse
partially_refundedfalse
finalizedtrue
has_unconfirmedfalse
screening_holdfalse
provider_refund_receivedfalse
overpaymentnull
rails_allowedA list of 3 items
acceptA list of 0 items
app_pay_allowedtrue
active_instructionnull
instructionsA list of 1 item
paymentsA list of 1 item
checkout_session"cs_z7ek5wj68fyz80j7bz1eq4e0"
payment_linknull
invoicenull
subscriptionnull
pos_devicenull
receipt"rcpt_ppaxx20nbqv0kqgkwcxcc5xh"
expires_at"2026-10-11T15:03:22.418Z"
paid_at"2026-10-11T14:09:55.764Z"
cancelled_atnull
metadataAn object with cart_id
screeningAn 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.