Ask for an invitation
Menu

Webhook event

checkout_session.completed

The session's order became paid or overpaid. Sent together with order.paid; handle one of them.

Type
checkout_session.completed
The object it carries
the checkout_session object
Subscribe with
checkout_session.completed, checkout_session.* 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_anjv9wf0v6yat0kha3gzzszb",
  "object": "event",
  "livemode": true,
  "created": "2026-10-11T14:03:22.418Z",
  "type": "checkout_session.completed",
  "api_version": "2026-10-11",
  "data": {
    "object": {
      "id": "cs_z7ek5wj68fyz80j7bz1eq4e0",
      "object": "checkout_session",
      "livemode": true,
      "created": "2026-10-11T14:03:22.418Z",
      "status": "completed",
      "mode": "payment",
      "order": "ord_0zymngngvf12b8b2cra7tb8e",
      "url": "https://pay.orrerie.com/c/cs_z7ek5wj68fyz80j7bz1eq4e0",
      "app_url": "https://pay.orrerie.com/o/cs_z7ek5wj68fyz80j7bz1eq4e0",
      "success_url": "https://acme.example/thanks?session={CHECKOUT_SESSION_ID}",
      "cancel_url": "https://acme.example/cart",
      "customer": "cus_8ea07c40qsvv19f7rgmeb8ha",
      "customer_email": "jane@example.com",
      "client_reference_id": "1042",
      "collect": {
        "email": "required",
        "name": "optional",
        "shipping_address": "hidden"
      },
      "collected": {
        "email": "jane@example.com",
        "name": "Jane Doe",
        "shipping_address": null
      },
      "locale": "auto",
      "subscription": null,
      "expires_at": "2026-10-11T15:03:22.418Z",
      "completed_at": "2026-10-11T14:09:55.764Z",
      "metadata": {
        "cart_id": "c_7781"
      }
    },
    "previous_attributes": {
      "status": "open",
      "completed_at": null
    }
  },
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "pending_webhooks": 1
}

Fields of data.object

Fields of data.object in checkout_session.completed
FieldIn this example
id"cs_z7ek5wj68fyz80j7bz1eq4e0"
object"checkout_session"
livemodetrue
created"2026-10-11T14:03:22.418Z"
status"completed"
mode"payment"
order"ord_0zymngngvf12b8b2cra7tb8e"
url"https://pay.orrerie.com/c/cs_z7ek5wj68fyz80j7bz1eq4e0"
app_url"https://pay.orrerie.com/o/cs_z7ek5wj68fyz80j7bz1eq4e0"
success_url"https://acme.example/thanks?session={CHECKOUT_SESSION_ID}"
cancel_url"https://acme.example/cart"
customer"cus_8ea07c40qsvv19f7rgmeb8ha"
customer_email"jane@example.com"
client_reference_id"1042"
collectAn object with email, name, shipping_address
collectedAn object with email, name, shipping_address
locale"auto"
subscriptionnull
expires_at"2026-10-11T15:03:22.418Z"
completed_at"2026-10-11T14:09:55.764Z"
metadataAn object with cart_id

What each field means is on the page of the checkout_session object. data.previous_attributes holds the old values of exactly the fields that changed: here status, completed_at.

Endpoints behind it

Calls that change checkout sessions. 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.