Use Cases
While Autumn handles billing complexity for you, webhooks are helpful for:- Sending activation emails — Welcome new subscribers or notify users when their plan changes
- Triggering workflows — Start onboarding sequences, provision resources, or update CRM records
- Syncing with external systems — Keep your database, analytics, or other tools in sync with subscription changes
- Deprovisioning access to services — Shut off access to downstream services when a customer cancels their subscription
Available Events
billing.updated
Fired whenever a customer’s plans change — new subscriptions, upgrades, downgrades, etc. Each event carries aplan_changes array describing exactly what happened to each affected plan.
Each entry also includes the
subscription (or purchase for one-off products) after the change, and previous_attributes holding the prior values of any fields that were updated. For instance, if a plan was canceled at period end:
tags array surfaces optional reason tags describing why the event fired:
Example payload (upgrade from
free to pro):
entity_id:
- Sync Autumn state back to your DB — listen for every
billing.updatedand persist eachplan_changesentry’ssubscriptionsnapshot keyed bycustomer_id(+entity_idif set). - Notify on upgrades — filter for entries with
action: "activated". For “upgrade from previous plan” specifically, pair it with anaction: "expired"entry on the same event. - Detect cancellations — filter for entries where
previous_attributes.canceled_at === null(a cancellation was just set) orprevious_attributes.canceled_atis a number (an uncancel). - Trial-end emails — filter for
tags.includes("trial_ended").
balances.limit_reached
Fired when a customer hits a usage limit for a feature. A limit can be the included allowance, a max purchase cap, or a spend limit.
Example payload:
entity_id:
billing.auto_topup_succeeded
Fired when an auto top-up successfully grants additional prepaid balance. Useful for sending receipts, updating internal ledgers, or reconciling balance after a recharge. For auto-charged top-ups, the event fires only after the Stripe invoice ispaid. For invoice_mode top-ups, the event fires once credits are granted and the invoice is finalized — invoice.status will typically be "open" until the customer pays.
Use invoice.stripe_id as a stable dedupe key. The top-level id field (e.g. evt_auto_topup_...) is a unique identifier for the event itself.
Example payload (auto-charge):
billing.auto_topup_failed
Fired when an auto top-up is blocked, declined, or fails before granting additional prepaid balance. This includes charge failures, purchase/attempt limits, missing payment methods, unavailable customer billing setup, lock contention, and transient infrastructure issues. Usereason to branch on the failure mode.
Limit-blocked failures are suppressed per blocking window, so repeated attempts while the same purchase, attempt, or failed-attempt limit is active do not emit duplicate webhooks.
Example payload:
balances.usage_alert_triggered
Fired when a customer crosses a configured usage alert threshold. Usage alerts let you monitor when customers approach or exceed specific usage levels for a feature.
Example payload:
Setup
Configure your webhook endpoints in the Autumn dashboard:1
Navigate to Developer Settings
Go to the Developer section in your Autumn dashboard and select the Webhooks tab.
2
Add an Endpoint
Click Add Endpoint and enter the URL where you want to receive webhook events.
3
Select Events
Choose which events you want to subscribe to. You can select all events or specific ones.
4
Save and Test
Save your endpoint configuration. You can use the Send Test Event button to verify your endpoint is receiving events correctly.
Webhook Security
Autumn uses Svix for reliable webhook delivery. Each webhook request includes signature headers that you can use to verify the request is genuinely from Autumn:svix-id— Unique message identifiersvix-timestamp— Timestamp of when the message was sentsvix-signature— Signature for verifying authenticity