Skip to content

Stripe webhook

Failed payments, refunds, disputes, new subscriptions and large payments from Stripe, with typed amounts.

Setup

  1. In the Stripe Dashboard open Developers, then Webhooks, and choose Add endpoint. Use Test mode first if you want to try it safely.
  2. In PingLoom open Webhooks, choose New webhook source, pick Stripe, and paste the endpoint's signing secret (starts with whsec_). Stripe shows it after the endpoint exists, so create the endpoint with a placeholder URL first, then edit its URL.
  3. Tick the events in PingLoom's list, and select the same event types in Stripe: invoice.payment_failed, charge.failed, charge.dispute.created, charge.dispute.closed, charge.refunded, checkout.session.completed, customer.subscription.deleted, payment_intent.succeeded. Add customer.subscription.created and refund.created only if you want them.
  4. Optional: set Large payment minimum on the source (for example 500) and turn on Large payment. Payments at or above it then arrive as Large payment.
  5. Send a test event from Stripe. The request appears under Recent requests on the PingLoom source page.

Verification

Stripe sends a Stripe-Signature header (t=timestamp,v1=HMAC-SHA256 of the timestamp, a dot and the raw body), signed with the endpoint's whsec_ signing secret. PingLoom rejects requests whose timestamp is more than five minutes off, and uses the Stripe event id to drop repeats.

Events

You choose which events become alerts when you create the source, and you can change it later on the source page.

EventPriorityOn by default
Invoice payment failedhighYes
Charge failedhighYes
Dispute openedhighYes
Dispute closed (lost is high, won is normal)highYes
Charge refundednormalYes
Checkout completednormalYes
Subscription cancellednormalYes
Payment succeededlowYes
Refund created (repeats Charge refunded)normalNo
Subscription startedlowNo
Large paymentnormalNo

Every money alert carries data.amount (a whole number in the currency's smallest unit, so 4999 is 49.99 USD), data.currency, data.event_type and the Stripe object id. Customer emails, names and card details are never copied.

The large payment minimum is a number in the payment's own currency. It does not convert between currencies.