- Disputes and inquiries (
charge.dispute.*): an alert opens when a cardholder disputes a charge or the issuer sends an inquiry, and recovers when Stripe closes the case (won, lost, or inquiry closed) - Failed payouts (
payout.failed): an alert opens when a payout to a bank account or debit card fails - Early fraud warnings (
radar.early_fraud_warning.*): an alert opens when a card issuer reports a payment as possibly fraudulent, and recovers once the payment is disputed or fully refunded
In Flashduty On-call
You can get the integration push URL in either of the following ways.
Use a dedicated integration
- In the Flashduty console, go to Channels and open a channel
- Select Configuration → Integrations → Private integration, then click Add an integration
- Select Stripe and click Save
- Open the new integration card and copy the push URL
Use a shared integration
- In the Flashduty console, go to Integration Center → Alert Events
- Select Stripe and enter an integration name
- Configure the default route and select a channel. You can add more rules under Routes after creation
- Click Save and copy the generated push URL
Configure Stripe
1
Create an event destination
You need a Stripe role that can manage webhooks, such as Administrator or Developer.
- Sign in to the Stripe Dashboard, open the Webhooks tab in Workbench, and click Add destination
- For Events from, select Your account. If you run a Connect platform and want events from connected accounts, select Connected accounts (create one destination for each scope if you need both)
- Keep the default API version. If you are asked to choose an event payload style, choose Snapshot: thin events do not contain the object, so Flashduty cannot parse them
2
Select events
Select the following events:
If the destination subscribes to other event types (for example
charge.succeeded), Flashduty returns success and creates no alert. We recommend subscribing only to the events above.3
Enter the push URL
- Click Continue and select Webhook endpoint as the destination type
- For Endpoint URL, enter the full Flashduty push URL
- Optionally enter a Destination name, then click Create destination. Flashduty does not use the signing secret (starting with
whsec_) shown on the endpoint page, so you do not need to copy it
4
Test
The Send test events button on the destination page only shows Stripe CLI instructions and sends nothing. Create real test events in a test environment in any of these ways:
- Run
stripe trigger charge.dispute.createdwith the Stripe CLI - Pay with test card
4000000000000259: the payment succeeds and is then disputed as fraudulent. Pay with4000000000005423to receive an early fraud warning - Submit
winning_evidence(orlosing_evidence) as the dispute evidence: the dispute closes as won (or lost) and Flashduty recovers the alert. Fully refund the early-fraud-warning payment: Stripe sendsradar.early_fraud_warning.updatedwithactionableset tofalseand Flashduty recovers the alert payout.failedneeds a failed payout. A sandbox does not accept test bank accounts in its own payout settings; on a Connect platform, pay out from a test connected account whose bank account uses account number000111111116, with a destination that receives Connected accounts events
livemode set to false. Flashduty creates alerts for them as usual and adds the label livemode=false.5
Turn on the auto-resolve timeout
Failed payouts have no recovery event, and an early fraud warning that is never disputed or refunded is not followed by another event. In the channel that receives these alerts, turn on the auto-resolve timeout. We suggest a timeout of 72 hours, counted from Incident trigger. Closing the incident also closes its alerts.A dispute usually takes 2 to 3 months from creation to closure, and the auto-resolve timeout also closes incidents for disputes that are still open. To keep dispute alerts open until Stripe closes the dispute, use a shared integration and route alerts whose
object label is dispute to a channel without the auto-resolve timeout.Payload
Stripe sends one event (an Event object) per request, with the affected object in
data.object:
Every alert also carries the label
source=stripe. Example titles: Stripe dispute needs response: fraudulent, Stripe inquiry under review: general, Stripe payout failed: account_closed, Stripe early fraud warning: made_with_stolen_card.
Alert Key
Flashduty uses
data.object.id (the ID of the dispute, payout, or warning itself) as the Alert Key, not the event ID:
- The created, funds_withdrawn, updated, and closed events for one dispute land on the same alert, which recovers when the dispute closes
- The created and updated events for one early fraud warning land on the same alert
- A dispute and an early fraud warning on the same payment are two alerts
- Stripe retries failed deliveries (for up to 3 days in live mode) and occasionally sends two events for one change; these events merge into the original alert instead of creating duplicates
Status and severity
A request is rejected if an event that creates an alert has no
data.object.id.
FAQ
Why did a dispute not create an alert?
Why did a dispute not create an alert?
Some disputes cannot be challenged (for example, disputes on the Cartes Bancaires network), and Stripe closes them as
lost at the time it notifies you. There is nothing to act on, so Flashduty treats the event as a recovery and does not open an alert. These disputes still appear in the disputes list in the Stripe Dashboard.How do I receive only live-mode events?
How do I receive only live-mode events?
Create the endpoint in live mode only. According to the Stripe documentation, a Connect platform’s live-mode endpoint for Connected accounts also receives test events from connected accounts. Those alerts carry the label
livemode=false, and you can route them to another channel by that label in a shared integration.Do I need to configure the signing secret?
Do I need to configure the signing secret?
No. Flashduty identifies the integration by the
integration_key in the push URL and does not verify the Stripe-Signature header. Keep the push URL as secret as a key.Troubleshooting
- Stripe shows failed deliveries (4xx): make sure the push URL is complete (it includes
integration_key) and the event payload style is Snapshot - Deliveries succeed but no alert appears: make sure the event type is in the table above; other event types create no alert
- The alert does not recover after the dispute closes: make sure the endpoint subscribes to
charge.dispute.closed - Check delivery history: in Workbench, select the endpoint under Webhooks and open the Event deliveries tab to see each delivery’s status code and resend events