Mock a Stripe webhook payload

A GET mock that returns a Stripe-shaped payment_intent.succeeded event, ready to feed into your webhook handler.

This template gives you a live URL that returns a Stripe-shaped payment_intent.succeeded event, so you can build and debug a webhook handler without triggering real payments. Point your handler at the URL, or copy the payload straight into a test fixture. It reproduces the event's shape, not Stripe's signature — so it is the right tool for parsing logic and the wrong one for verifying Stripe-Signature.

Returns a ready-made event — feed it straight into your own handler.

Response payload

{
  "id": "evt_1QsErTLl2dK9Nqi7",
  "object": "event",
  "type": "payment_intent.succeeded",
  "created": {{now.unix}},
  "data": {
    "object": {
      "id": "pi_3QsErTLl2dK9Nqi71m2XvBnR",
      "object": "payment_intent",
      "amount": 4999,
      "currency": "usd",
      "status": "succeeded"
    }
  }
}

Fields worth knowing

Field What it means
id A synthetic event ID — Stripe's real IDs follow the same evt_... shape but are never reused.
type The event type your handler switches on; change it to trigger a different code path.
created Unix timestamp of the event, generated fresh on every call via {{now.unix}}.
data.object.amount The charge amount in minor units (cents) — 4999 means $49.99.
data.object.status The payment_intent status; edit the response body to test other states like requires_action.

Create the mock

curl -X POST https://quickmock.dev/api/mocks \
  -H 'Content-Type: application/json' \
  -d '{
  "method": "GET",
  "response_status": 200,
  "content_type": "application/json",
  "response_body": "{\"id\":\"evt_1QsErTLl2dK9Nqi7\",\"object\":\"event\",\"type\":\"payment_intent.succeeded\",\"created\":{{now.unix}},\"data\":{\"object\":{\"id\":\"pi_3QsErTLl2dK9Nqi71m2XvBnR\",\"object\":\"payment_intent\",\"amount\":4999,\"currency\":\"usd\",\"status\":\"succeeded\"}}}"
}'

Call it

curl https://quickmock.dev/m/<slug>

What you get

GET /m/<slug> -> 200 a Stripe-style payment_intent.succeeded event
data.object.amount is in minor units (cents)

How this differs from the real thing

This is a static event trimmed down from a real Stripe payload — no Stripe-Signature header, no live objects behind the IDs. Use it to shape your handler's parsing logic, not to test signature verification.

Sources

FAQ

Is this the real Stripe API?
No. It is a static event trimmed from a real Stripe payload and served from your own mock URL. The IDs are synthetic and nothing exists behind them — no charge, no customer, no live object to fetch.
Can I test signature verification with it?
No, and that is deliberate. There is no Stripe-Signature header, because producing one would need Stripe's signing secret. Test verification against Stripe's own CLI; use this for everything after the signature check passes.
How do I test a different event type?
Edit the response body and change the type field, plus whatever the new event carries under data.object. That is the fastest way to exercise a branch of your handler you cannot easily trigger in Stripe's test mode.

Ready to use it?

Open it in the mock builder to tweak first

Pairs well with this guide: Test a webhook receiver

Related templates

← All templates

Last updated: 2026-10-17