Stripe
Connect Stripe to FlowAlert with a native webhook — no Zapier, no automation tool in the middle. You paste a FlowAlert URL into Stripe and your Stripe signing secret into FlowAlert; every event is signature-verified, then routed to the right person with acknowledgement and escalation.
1. Create a Stripe source in FlowAlert
In your FlowAlert dashboard go to Setup → Integrations, click Connect, choose Stripe, and give it a name. FlowAlert generates a unique receiver URL:
https://api.flowalert.io/v1/hooks/stripe/whk_xxxxxxxxxxxxxxxxCopy it — you'll paste it into Stripe next.
2. Add the webhook endpoint in Stripe
- In the Stripe Dashboard (opens in a new tab), go to Developers → Webhooks
- Click Add endpoint
- Paste your FlowAlert receiver URL as the Endpoint URL
- Under Select events, add the events you want to route (see the table below)
- Click Add endpoint
Stripe only delivers the event types this endpoint is subscribed to. If you test an event that isn't selected here — including the dashboard's Send test webhook or stripe trigger — Stripe never sends it to FlowAlert, so nothing arrives. Add every event you want to route and any you'll test with to the selected events.
3. Paste the signing secret back into FlowAlert
On the endpoint's page Stripe shows a Signing secret that starts with whsec_. Click Reveal, copy it, and paste it into the Stripe source under Setup → Integrations, then Save.
The signing secret is how FlowAlert proves each request genuinely came from Stripe. Until it's set, the source shows "Add the signing secret to activate" and won't accept events.
Events FlowAlert understands
| Stripe event | FlowAlert event key | Priority |
|---|---|---|
invoice.payment_failed | stripe.payment_failed | HIGH |
charge.failed | stripe.payment_failed | HIGH |
payment_intent.payment_failed | stripe.payment_failed | HIGH |
charge.dispute.created | stripe.dispute_created | URGENT |
checkout.session.completed | stripe.payment_succeeded | NORMAL |
payment_intent.succeeded | stripe.payment_succeeded | NORMAL |
invoice.payment_succeeded | stripe.invoice_paid | NORMAL |
customer.subscription.created | stripe.subscription_created | NORMAL |
customer.subscription.trial_will_end | stripe.subscription_trial_ending | HIGH |
customer.subscription.deleted | stripe.subscription_canceled | NORMAL |
Other event types are accepted and acknowledged (Stripe shows a ✓) but won't create an alert.
Several Stripe events map to the same FlowAlert key on purpose — pick the one that matches how you take payments, or a single payment fires multiple alerts. For a successful payment (stripe.payment_succeeded): checkout.session.completed (Stripe Checkout) or payment_intent.succeeded (Payment Element / Payment Intents API). For a failed payment (stripe.payment_failed): invoice.payment_failed (Billing / subscriptions) or charge.failed / payment_intent.payment_failed (one-off). Subscription renewals are separate — invoice.payment_succeeded → stripe.invoice_paid.
FlowAlert stores a small, normalized set of fields under data.* for routing conditions — data.amount (in major units, e.g. 49.99, not cents), data.currency (uppercase, e.g. USD), data.customer_email, and data.reason (the merchant-facing failure or dispute reason, e.g. insufficient funds). For example, route disputes over $500 with a condition on data.amount.
4. Route the events
In Setup → Routing Rules, create a rule for each stripe.* key you want to act on. For example:
stripe.dispute_created→ your finance lead, requires acknowledgement, with an escalation policystripe.payment_failed→ your billing or support group
See Routing Rules for conditions and targets.
Stripe retries failed deliveries, and FlowAlert de-duplicates by Stripe's event id — a redelivered event is a no-op, so you'll never get the same alert twice.
Verify
Use Stripe's Send test webhook on the endpoint page, or trigger a real test event, then check Dashboard → Alerts in FlowAlert to confirm it arrived.
The event you test must be one of the endpoint's selected events (Step 2), or Stripe won't deliver it. The dashboard's default test is payment_intent.succeeded, which FlowAlert maps to stripe.payment_succeeded — so add that event if you'll test with it. A delivered event shows in Dashboard → Alerts (it pushes to a phone once a routing rule exists for the key).