Overview
The Flo webhook contract clients receive from Flo.
Webhooks
Flo webhooks are normalized outbound events sent by Flo.
Clients should integrate against the Flo contract only. The underlying billing gateway is an implementation detail and should not affect webhook consumers.
To create an endpoint and choose which events it receives, including filters by product or product tag, see Webhook configuration.
Build Against Flo Terms
Every webhook payload is designed to be consumed in Flo terms:
eventIdidentifies the Flo delivery record for the webhook sent to that endpoint.eventTypetells you what happened in Flo.objectTypetells you which Flo resource family changed.user.idis the Flo user id.user.clientUserIdis your client-defined user id as stored by Flo.subscription,item,invoice,payment,dispute, orpreDisputeAlertcontains the normalized Flo payload for that event.- On dispute and Pre-Dispute Alert events,
usercarries onlyidandclientUserId, and it is omitted when Flo cannot resolve exactly one user.
On invoice events, Flo may also include root-level subscription and/or item when the invoice is linked to a local transaction that resolves those checkout records.
Optional fields such as invoiceDetails.gatewayEventType and these related root-level objects can provide extra trace context, but they should not be the basis of your integration logic.
Event Families
Flo currently sends events for six resource families:
subscriptioniteminvoicepaymentdisputepre_dispute_alert(payload rootpreDisputeAlert)
Those families currently map to these Flo event types:
subscription.createdsubscription.updatedsubscription.cancelledsubscription.renewedsubscription.reactivatedsubscription.pausedsubscription.resumedsubscription.expireditem.purchaseditem.refundeditem.charged_backinvoice.createdinvoice.updatedinvoice.deletedinvoice.payment_failedinvoice.paidinvoice.overduepayment.authorizedpayment.capture_failedpayment.authorization_voidedpayment.authorization_expireddispute.createddispute.updateddispute.wondispute.lostpre_dispute_alert.createdpre_dispute_alert.updated
The dispute and Pre-Dispute Alert families describe a case, not a money movement. A withdrawal or reinstatement caused by a dispute still arrives through item.charged_back and invoice.updated. See Dispute events and Pre-Dispute Alert events.
What Clients Receive
Each delivered webhook contains one Flo event payload.
The top-level eventId identifies that specific Flo delivery record.
That payload includes:
- a delivery identifier via
eventId - a Flo event classification via
eventTypeandobjectType - the Flo user via
user - a normalized resource payload via
subscription,item,invoice,payment,dispute, orpreDisputeAlert - optional invoice and payment context via
invoiceDetails - optional related root-level
subscriptionanditemenrichment on invoice events - optional root-level
paymentonitem.purchasedevents: the Flo payment behind the purchase, described in Item Purchase Payment
See Events for the event catalog and examples, and Payloads for field-level schema details. For the inbound PayPal event catalog when a direct PayPal gateway is configured, see PayPal webhook events.
Versioning
- Current event version:
v1 - New integrations should treat
v1as the public contract - Dispute and Pre-Dispute Alert events are published at
v1alongside the existing families
Unavailable operations
Operations FloPay MCP deliberately does not serve, plus the default-deny boundary for privileged, internal, callback, and checkout surfaces.
Webhook configuration
Create webhook endpoints, filter deliveries by product or product tag, predict which events are sent or skipped, and troubleshoot missing events.