Stripe checkout.session.completed webhook payload example

Stripe · event: checkout.session.completed · content type: application/json; charset=utf-8

This is a representative sample — fake IDs, real structure. To see a payload with your data, point the provider at a capture URL (button below).

See it live, not frozen

One click creates a free capture bin with this exact payload already in it — pretty-printed, headers inspectable, replayable to your own endpoint:

Then paste the bin's URL into Stripe's webhook settings to capture a real delivery. No signup.

Headers

content-type: application/json; charset=utf-8
user-agent: Stripe/1.0 (+https://stripe.com/docs/webhooks)
stripe-signature: t=1787961600,v1=8a4d2f9b1c7e5a3d0f6b8c2e9a5d7f4b1c8e6a3d9f2b5c7e0a4d8f6b3c9e5a2d

Body

{
  "id": "evt_1PQvYz2eZvKYlo2CFmNoPqRs",
  "object": "event",
  "api_version": "2024-06-20",
  "created": 1787961600,
  "data": {
    "object": {
      "id": "cs_test_a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuVwXyZa1B2c3D4e5F6",
      "object": "checkout.session",
      "amount_subtotal": 2000,
      "amount_total": 2000,
      "currency": "usd",
      "customer": "cus_QGhIjKlMnOpQrS",
      "customer_details": {
        "email": "jenny.rosen@example.com",
        "name": "Jenny Rosen"
      },
      "mode": "payment",
      "payment_intent": "pi_3PQvXk2eZvKYlo2C0abcdefg",
      "payment_status": "paid",
      "status": "complete",
      "metadata": {
        "order_id": "6735"
      },
      "success_url": "https://example.com/success?session_id={CHECKOUT_SESSION_ID}"
    }
  },
  "livemode": false,
  "pending_webhooks": 1,
  "request": {
    "id": null,
    "idempotency_key": null
  },
  "type": "checkout.session.completed"
}

Things that bite people

Send it yourself

Reproduce this delivery against any endpoint (your handler, a bin, staging):

$ curl -X POST https://your-endpoint.example/hook \
  -H 'content-type: application/json; charset=utf-8' \
  -H 'user-agent: Stripe/1.0 (+https://stripe.com/docs/webhooks)' \
  -H 'stripe-signature: t=1787961600,v1=8a4d2f9b1c7e5a3d0f6b8c2e9a5d7f4b1c8e6a3d9f2b5c7e0a4d8f6b3c9e5a2d' \
 -d '{"id":"evt_1PQvYz2eZvKYlo2CFmNoPqRs","object":"event","api_version":"2024-06-20","created":1787961600,"data":{"object":{"id":"cs_test_a1B2c3D4e5F6g7H8i9J0kLmNoPqRsTuVwXyZa1B2c3D4e5F6","object":"checkout.session","amount_subtotal":2000,"amount_total":2000,"currency":"usd","customer":"cus_QGhIjKlMnOpQrS","customer_details":{"email":"jenny.rosen@example.com","name":"Jenny Rosen"},"mode":"payment","payment_intent":"pi_3PQvXk2eZvKYlo2C0abcdefg","payment_status":"paid","status":"complete","metadata":{"order_id":"6735"},"success_url":"https://example.com/success?session_id={CHECKOUT_SESSION_ID}"}},"livemode":false,"pending_webhooks":1,"request":{"id":null,"idempotency_key":null},"type":"checkout.session.completed"}'

← All payload examples · Related guide · Signature debugger · Docs