Chargebee Webhooks: Send Billing Events to Sazabi
Webhook facts checked on the platform’s docs on Nov 8, 2026.
Chargebee records every change on your billing site as an event: a subscription starts, an invoice is generated, a payment fails. A webhook sends those events to a URL as they happen. This page covers the payload and how to keep the events in Sazabi.
What Chargebee sends
Chargebee names events in lowercase with underscores. Examples are subscription_created, subscription_cancelled, subscription_activated, invoice_generated, payment_succeeded, payment_failed, payment_refunded, customer_created and payment_source_expiring. The events reference lists the full set.
Each call is an HTTP POST with content type application/json. The body is the event: an id, occurred_at, source, event_type, api_version and a content object. The content object holds the affected resources, so a subscription event includes the subscription and usually the customer.
Why send it to Sazabi
Billing events explain customer-visible behavior. A burst of payment_failed events, a wave of subscription_cancelled after a release or an invoice_generated that never arrived all matter when you debug an incident. Sazabi's Webhook Events source stores each JSON payload as a searchable log record, with the payload under webhook.* attributes, so those events sit next to your application logs.
Chargebee gives each webhook its own URL, which makes path suffixes easy. Use /chargebee for one webhook, or /chargebee/payments and /chargebee/subscriptions for several. Sazabi stores the suffix as webhook.path.
Set it up in Chargebee
- Go to Settings, then Configure Chargebee, then API Keys and Webhooks. Open the Webhooks tab.
- Select Add Webhook. You can create up to five.
- Enter a webhook name and your Sazabi intake URL with a suffix.
- Leave Protect webhook URL with basic authentication off. The intake URL is the credential.
- Under Events to Send, select the events you want. All events are selected by default, so narrow the list.
- Save, then select Test Webhook on the webhook card, choose an event and select Test URL. Chargebee shows the request, the response status and the response.
Chargebee has test sites and live sites. Create the webhook on each site you want to observe. On a test site, an unused webhook gets a deactivation notice by email and is deactivated if you take no action.
Example payload
An abbreviated event using attributes from the Chargebee docs. It is an example, not a captured delivery.
{
"id": "ev_16BPgETyVrQbiGhA",
"occurred_at": 1702645601,
"source": "admin_console",
"object": "event",
"api_version": "v2",
"event_type": "subscription_created",
"content": {
"subscription": {
"id": "16BPgETyVrQVHGh1",
"customer_id": "sarah",
"status": "active",
"resource_version": 1702645601793
},
"customer": { "id": "sarah" }
}
}In a Sazabi thread, search for a top-level field such as webhook.event_type to isolate one event type. The event id is a good key for finding duplicates.
What to watch for
- Retries and duplicates. Chargebee notes that webhooks can be delivered more than once because of retries and says to deduplicate on the event
id. The payload doesn't change on a retry. - Order. Events can arrive out of order.
resource_versionon the resource increases with each change, so compare it rather than arrival time. - Stale snapshots. A payload is a point-in-time snapshot taken right after the change. By the time you read it, the resource may have moved on.
- Timeouts. On a live site Chargebee waits up to 20 seconds to connect, 20 seconds to read and 60 seconds for the whole call. Test sites allow 10, 10 and 20.
- Event volume. With All Events selected, a busy site can produce many records. Choose the events you will search.
- Personal data. Events include customer email addresses and masked card details. An Exclude card information option exists on the webhook.
The Intake page in the Sazabi dashboard shows ingestion volume per source.
Retries
Chargebee treats any 2XX status as success. A failed call is retried up to seven times: two minutes after the failure, then six minutes, 30 minutes, one hour, five hours, one day and two days after the previous retry. You can also resend an event from Logs, then Events in the Chargebee console. Chargebee documents basic authentication rather than HMAC signatures.
For store orders that feed the same billing system, see Shopify. For CRM changes around the same customers, see HubSpot.
Chargebee webhook facts
Signatures: Sazabi doesn’t verify Chargebee requests and doesn’t reject unsigned ones. Chargebee protects webhooks with basic authentication, not a signature, and the intake URL needs no authentication headers. The Webhook Events source accepts any JSON POST to your intake URL, so the intake URL is the only credential. It’s hard to guess, so keep it private, and rotate the project’s public key if it leaks.
- Events: Events such as subscription_created, subscription_cancelled, payment_succeeded, payment_failed, invoice_generated and customer_created are recorded, and each webhook sends the events you select. (Chargebee docs, accessed Nov 8, 2026)
- Payload: The webhook call is an HTTP POST with the content type application/json, carrying an event with an id, occurred_at, event_type and a content object. (Chargebee docs, accessed Nov 8, 2026)
- Signing: Chargebee recommends protecting webhook URLs with basic authentication and HTTPS, and names basic authentication as the mechanism for verifying that calls come from Chargebee. (Chargebee docs, accessed Nov 8, 2026)
- Retries: Failed webhook calls are retried up to 7 times, from 2 minutes after the failure to 2 days after the previous retry. (Chargebee docs, accessed Nov 8, 2026)
Frequently Asked Questions
Does Chargebee send webhooks as JSON?
Yes. Chargebee makes an HTTP POST with the content type application/json, and the body is an event object with a content section holding the affected resources.
Where do I add a Chargebee webhook?
Go to Settings, Configure Chargebee, then API Keys and Webhooks, open the Webhooks tab and select Add Webhook. You can create up to five.
How many times does Chargebee retry a webhook?
Up to seven times. The first retry is two minutes after the failure and the last is two days after the previous one.
Should I turn on basic authentication for the Sazabi URL?
No. Sazabi needs no authentication headers because the intake URL is the credential. Keep the URL secret.
Does Sazabi verify Chargebee signatures?
No. Chargebee protects webhooks with basic authentication, not a signature, and the intake URL needs no authentication headers. Sazabi doesn’t reject unsigned requests, so keep the intake URL private: it’s the only credential.
Sources
- Configuring webhooks under Settings, API Keys and Webhooks, basic authentication, events to send, test webhook, timeouts, the seven-step retry schedule and duplicate handling (accessed Nov 8, 2026)
- Event object attributes, the sample event, event types, the HTTP POST with application/json content type and the 2XX success rule (accessed Nov 8, 2026)
- Overview of Chargebee events and webhooks (accessed Nov 8, 2026)
- Webhook Events source: JSON only, payload under webhook.* attributes, path suffix stored as webhook.path; signature verification with the Standard Webhooks and Custom HMAC options, and rejected deliveries (accessed Nov 8, 2026)