Guide
Stripe Integration Guide
Connect Stripe webhooks to Charon Gate for durable capture, automatic signature verification, retries, and DLQ alerting on critical billing events.
This guide shows you how to forward Stripe webhooks through Charon Gate so that critical billing events — invoice.paid, payment_intent.succeeded, customer.subscription.deleted — are captured durably and delivered reliably to your application.
Prerequisites
- A Charon Gate account (sign up free)
- A Stripe account with a webhook endpoint to configure
1. Create a Charon Gate endpoint
- Log in to the Charon Gate dashboard
- Go to Endpoints → New endpoint
- Select the Stripe template from the provider list
- Set Destination URL to your application's webhook handler (e.g.
https://your-app.com/webhooks/stripe) - Note the Ingest URL — this is what you'll give to Stripe (looks like
https://charongate.com/ingest/ep_…)
The Stripe template automatically configures Stripe's HMAC-SHA256 signature verification using your signing secret.
2. Add a Stripe webhook
- Go to the Stripe Dashboard → Webhooks
- Click Add endpoint
- Set the URL to your Charon Gate ingest URL
- Select the events you want to forward (recommended:
invoice.paid,invoice.payment_failed,payment_intent.succeeded,customer.subscription.deleted,checkout.session.completed) - Click Add endpoint
3. Copy the signing secret
After creating the Stripe endpoint:
- Click the endpoint in the Stripe Dashboard
- Under Signing secret, click Reveal
- Copy the secret (starts with
whsec_)
Back in Charon Gate:
- Open your endpoint → Settings
- Paste the signing secret under Ingest signing secret
- Save
Charon Gate now verifies every Stripe-Signature header before forwarding. Events with invalid signatures are rejected with a 400 and logged — they never reach your application.
4. Test the connection
Use the Test delivery button in Charon Gate to send a synthetic event to your destination. Or trigger a real Stripe event using the Stripe test dashboard.
Charon Gate logs the full delivery pipeline for each event: received time, verification status, forward attempt, HTTP status from your destination, and any retry schedule.
What Charon Gate handles for you
| Concern | How Charon Gate handles it |
|---|---|
| Signature verification | HMAC-SHA256 with Stripe's Stripe-Signature + timestamp window |
| Your server is down | Retries with exponential backoff (up to 12 attempts by default) |
| All retries exhausted | Event enters DLQ; Slack/email alert fires |
| Stripe retries the same event | Deduplication via Stripe-Signature event ID; no double delivery |
| Your handler is slow | Charon Gate acknowledges Stripe immediately; your processing is async |
Recommended Stripe events to capture
invoice.paid
invoice.payment_failed
invoice.upcoming
customer.subscription.created
customer.subscription.updated
customer.subscription.deleted
payment_intent.succeeded
payment_intent.payment_failed
checkout.session.completed
Troubleshooting
Events showing signature_verification_failed in Charon Gate
→ Check that you've saved the correct whsec_… secret. The secret changes every time you regenerate it in Stripe.
Events arriving at Charon Gate but not being forwarded → Check your destination URL is correct and accessible from the internet. Use the Health probe button to test reachability.
Stripe test events not appearing → Make sure you're using a Stripe test mode endpoint key and your Charon Gate ingest URL is correct.