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.
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