Launch special — let's split the check with SPLITCHECK for 50% off

Stripe fixture

payment_intent.succeeded

Fires when a payment is successfully completed. This is the primary 'money has moved' signal for one-time payments — the right place to mark orders as paid, fulfill goods, or trigger receipts.

When does it fire?

PaymentIntent reaches the succeeded status — typically after the customer authorizes the charge (card, wallet, bank debit) and Stripe confirms with the issuer.

Request headers

Content-Type: application/json; charset=utf-8
Stripe-Signature: t=1715600000,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd
User-Agent: Stripe/1.0 (+https://stripe.com/docs/webhooks)

Payload

{
  "id": "evt_1NXyz2AbCdEfGhIj",
  "object": "event",
  "api_version": "2024-09-30.acacia",
  "created": 1715600000,
  "type": "payment_intent.succeeded",
  "livemode": false,
  "data": {
    "object": {
      "id": "pi_1NXyz2AbCdEfGhIj",
      "object": "payment_intent",
      "amount": 2999,
      "currency": "usd",
      "status": "succeeded",
      "customer": "cus_NXyz2AbCdEfGhIj",
      "metadata": {
        "order_id": "ord_9c8b7a6"
      },
      "payment_method": "pm_1NXyz2AbCdEfGhIj",
      "receipt_email": "[email protected]"
    }
  }
}

Key fields

  • id

    Unique event ID. Use as your dedup key for idempotency.

  • data.object.id

    The PaymentIntent ID. Reference this in your orders table.

  • data.object.amount

    Amount in the smallest currency unit (cents for USD).

  • data.object.metadata

    Your custom key/value pairs — usually order or customer references.

  • livemode

    false in test mode, true in production. Always check this.

Test it with cURL

Replace your-endpoint with your HookSense endpoint slug — or any URL you want to test against.

curl -X POST https://hooksense.com/w/your-endpoint \
  -H "Content-Type: application/json; charset=utf-8" \
  -H "Stripe-Signature: t=1715600000,v1=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd" \
  -H "User-Agent: Stripe/1.0 (+https://stripe.com/docs/webhooks)" \
  -d '{
  "id": "evt_1NXyz2AbCdEfGhIj",
  "object": "event",
  "api_version": "2024-09-30.acacia",
  "created": 1715600000,
  "type": "payment_intent.succeeded",
  "livemode": false,
  "data": {
    "object": {
      "id": "pi_1NXyz2AbCdEfGhIj",
      "object": "payment_intent",
      "amount": 2999,
      "currency": "usd",
      "status": "succeeded",
      "customer": "cus_NXyz2AbCdEfGhIj",
      "metadata": {
        "order_id": "ord_9c8b7a6"
      },
      "payment_method": "pm_1NXyz2AbCdEfGhIj",
      "receipt_email": "[email protected]"
    }
  }
}'

Capture this in HookSense

Fire the cURL above at your HookSense endpoint and inspect the request in real time — with headers, body, signature verification, and replay.

Get a free endpoint

More Stripe fixtures