Stripe
Solo founder / small team - get pinged on every sale.

The classic solo-founder dopamine hit: every successful charge → push notification with the customer email and amount. Chirp's @stripe inspector handles the most common Stripe events with built-in formatting (amounts converted from cents, customer email pulled from the expanded charge, subscription plan resolved from the price ID).
Easy first webhook integration. Most relevant events: `payment_intent.succeeded` (sale!), `payment_intent.payment_failed` (decline), `customer.subscription.created` (new sub), `invoice.payment_failed` (renewal failed). Add `customer.subscription.deleted` if you want churn pings.
Prerequisites
- A Stripe account.
- A Chirp inspector / webhook URL.
Setup
- 1
Open the Stripe webhook settings
Stripe Dashboard → Developers → Webhooks → "Add endpoint". Note: Stripe has a separate "Test mode" toggle in the dashboard - set up the webhook in both test and live modes if you want pings during local development.
- 2
Configure the endpoint
Paste the Chirp URL. Tick the events you care about (suggested set below). Stripe signs every webhook with a
whsec_...secret on the endpoint detail page - that secret is for *your* server to verify Stripe's signatures. Chirp's @stripe normalizer trusts the inspector key in the URL as the auth (since the key is the secret that grants posting rights), so you don't need to share Stripe's signing secret with us.shellEndpoint URL: https://api.chirpapp.dev/v1/webhooks/stripe?key=YOUR_KEY Description: Chirp lock screen Events: payment_intent.succeeded payment_intent.payment_failed customer.subscription.created customer.subscription.deleted invoice.payment_failed charge.refunded - 3
Trigger a test event
Stripe's webhook detail page has a "Send test webhook" button. Pick
payment_intent.succeeded, send. Chirp's notification fires within seconds. If you want to verify Stripe-Signature properly (defense in depth), pair this with the Webhook Inspector integration - it forwards verbatim to your real backend, which can validate the signature there.
What you’ll see
Notification: "Chirp · Stripe" - title is the event type (e.g. "Payment succeeded · $24.00"), body is the customer email + product line. Tap to deep-link to the Stripe dashboard for that event. Failed payments show in red. Subscription events include the plan name. No persistent activity by default - Stripe events are one-shot pushes; if you want a card that aggregates today's revenue, the @openrouter-spend pattern (see that integration) is the closest analogue.
Troubleshooting
- Test webhook from Stripe says "failed" with a 400.
- Stripe's test events are real-format payloads with synthetic IDs. If Chirp 400s, check the inspector's recent-events log - most often it's a malformed event type (the @stripe normalizer expects events from the suggested list above; rare event types fall through to a generic representation but Chirp may still 400 if the payload shape is unexpected).
- Pings work in test mode but not live mode.
- Test and live modes have separate webhook configurations in Stripe. Add the Chirp endpoint in BOTH modes (toggle the dashboard's test/live switch).
- Some events fire, others don't.
- Stripe's event ticklist on the webhook page is the source of truth. Re-edit the endpoint and confirm every event you expect is ticked.
- I want to ignore failed-payment retries (they fire on every retry).
- Stripe retries failed payments automatically; each retry fires
invoice.payment_failed. If you only want the first failure, filter in the Chirp inspector byattempt_count == 1.