Stripe webhooks
When an invoice’s payment status in Stripe changes topaid
, the invoice.paid
event in Stripe will be emitted. We suggest you also listen to the payment.intent_succeeded
to ensure you are notified of a payment.
Common confusion
When a Loop payment occurs, apayment_intent.canceled
event is emitted. This is because Stripe will want to charge the payment method on file (fiat). Thus, Loop cancels this event and instead updates the invoice to be paid outside of Stripe."
The invoice.paid
event will emit once the payment takes place on chain and Loop marks the invoice as paid. There is nothing you need to do here but be aware of this.
If you have Stripe already configured, you may also already be listening to the invoice.charge.succeeded
event from Stripe. This invoice.charge.succeeded
event is triggered specifically when a single charge associated with an invoice successfully completes, while an invoice.paid
event is triggered whenever an entire invoice is marked as paid, which can include scenarios where the payment was manually marked as paid outside of a standard charge process (which is the case when you use Loop!). As a result, it is important to ensure you are listening to invoice.paid
.
Loop webhooks
If you would like, you can still listen to webhook events emitted from Loop. When running testing, some teams like to listen to Loop webhooks in Slack. If you would like to configure Loop’s webhooks, you can set them up using the Webhooks endpoint under the Stripe integration section.Available webhooks
Webhook | Description |
---|---|
AgreementSignedUp | Triggered when a new customer completes checkout |
TransferCreated | Triggered when a draft invoice is created |
TransferFinalized | Triggered when a draft invoice is finalized |
TransferProcessed | Triggered when a payment confirms onchain |
LatePayment | Triggered 10 minutes after a new customer completes checkout |
ScheduledAgreementCancel | Triggered when a subscription is canceled and the cancelation date is in the future |
AgreementCancelled | Triggered when a subscription is canceled |