All payload examples

Stripe payment_intent.succeeded Payload Example

The event type says a PaymentIntent completed payment successfully. data.object is the PaymentIntent, not a Checkout Session or Charge. The event id identifies the notification; data.object.id identifies the payment. amount and amount_received are integer minor-unit values; 2000 USD minor units means 20 USD. livemode is false in both objects.

Updated · Reduced synthetic fixture, not a complete provider schema.

Synthetic data only. All identities, IDs, commits and signature values are invented. No customer payloads or signing secrets are included. This tests request inspection, not provider delivery or signature verification. Never send production credentials or personal data here.

JSON payload

Download JSON
{
  "id": "evt_synthetic_example",
  "object": "event",
  "created": 1790640000,
  "livemode": false,
  "type": "payment_intent.succeeded",
  "data": {
    "object": {
      "id": "pi_synthetic_example",
      "object": "payment_intent",
      "amount": 2000,
      "amount_received": 2000,
      "currency": "usd",
      "status": "succeeded",
      "livemode": false,
      "metadata": {
        "fixture": "synthetic"
      }
    }
  }
}

Provider headers

Representative application headers. Stripe-Signature carries a timestamp and signature. Both this timestamp and signature are fixed synthetic placeholders, not credentials or a valid verification vector. Transport headers are omitted.

Content-Type
application/json
Stripe-Signature
t=1790640000,v1=SYNTHETIC_NOT_A_VALID_SIGNATURE

Inspect this request

Create a temporary endpoint, send this exact synthetic JSON, and open the dashboard to inspect or delete it. No provider account is contacted. The default endpoint acknowledges the request; it does not validate the signature.

For Bash or a POSIX shell. Replace YOUR_BUCKET_ID before running; placeholder signatures will not pass a real receiver’s verification.

curl --request POST '/webhook/YOUR_BUCKET_ID' \
  --header 'Content-Type: application/json' \
  --header 'Stripe-Signature: t=1790640000,v1=SYNTHETIC_NOT_A_VALID_SIGNATURE' \
  --data-binary '{
  "id": "evt_synthetic_example",
  "object": "event",
  "created": 1790640000,
  "livemode": false,
  "type": "payment_intent.succeeded",
  "data": {
    "object": {
      "id": "pi_synthetic_example",
      "object": "payment_intent",
      "amount": 2000,
      "amount_received": 2000,
      "currency": "usd",
      "status": "succeeded",
      "livemode": false,
      "metadata": {
        "fixture": "synthetic"
      }
    }
  }
}
'

Receiver checks and limits

  • Dispatch on type and inspect data.object.status; do not treat every Stripe event as payment success.
  • Deduplicate event IDs and make payment fulfillment idempotent; arrival order is not guaranteed.
  • This is a reduced snapshot-style envelope, not a thin event. API-version-specific and optional fields are omitted; use your destination version and Stripe test tooling for full integration coverage.

Official sources

Documentation reviewed 2026-09-29. Provider contracts can change; consult these references for complete fields.

Read the Stripe testing guide