Holdfast

Stripe · received 18 Oct 2026, 16:48:29 IST

Payment received · ₹250 from Asha · 2 × Masala chai tin

Held safely

The message arrived in a new layout

Stripe changed the layout of its messages, and Chai & Co. still expects the old one, so it couldn't read this one. It's kept safe here and can be sent again once that's fixed.

Is it really from Stripe?

Yes. Its signature matched, so it really came from Stripe.

What happened on each try

  1. Try 1 · Bad Request (400)The app turned it away, and sending the same thing again won't help, so it is held safely.

What changed since the last one that worked

  • data.object.customer added
  • data.object.customer.id added
  • data.object.customer_id removed

Send it again

Holdfast first checks it is genuine and hasn't already been delivered.

For your developer

Stripe now sends data.object.customer.id instead of data.object.customer_id, and the app still reads the old field. Read the new one (or accept both), deploy, then resend the held events.

Cause payload_changed

The raw message

Headers

Accept-Encoding
gzip
Content-Length
340
Content-Type
application/json; charset=utf-8
Stripe-Signature
t=1792322309,v1=db3ef1c9fe9a102acad301fb6d4ca69d9c25ccfb7e196b5f20ba9b4a6373063e
User-Agent
Stripe/1.0 (+https://stripe.com/docs/webhooks) holdfast-demo

Body

{
  "id": "evt_1dz66d997m0lr",
  "object": "event",
  "type": "payment_intent.succeeded",
  "created": 1792322309,
  "livemode": false,
  "data": {
    "object": {
      "id": "pi_9eg1kad42602",
      "object": "payment_intent",
      "amount": 25000,
      "currency": "inr",
      "customer": {
        "id": "cus_n569b0hnv3r2"
      },
      "status": "succeeded",
      "metadata": {
        "customer_name": "Asha",
        "item": "2 × Masala chai tin"
      }
    }
  }
}

Last answer from Chai & Co.

{"error":"missing required field customer_id"}