Stripe
What It Does
Stripe sends payment events in real time to DURUM.ai: sales, invoice payments, and refunds.
| Stripe Event | Type in DURUM.ai | When It Triggers |
|---|---|---|
checkout.session.completed | Sale | A client completes a purchase via Stripe Checkout |
invoice.paid | Payment | A Stripe invoice is paid |
charge.refunded | Refund | A refund is processed |
Quick Setup (3 Minutes)
You need 2 endpoints in your Stripe Dashboard. No secret to configure: paste the URLs and you're done.
Step 1: Find Your Identifier
Your identifier is either a Business ID (UUID format) or a client_key (short identifier). It was provided by your account manager during onboarding.
You can also find it in DURUM.ai:
- Settings -> Integrations -> Webhook URLs section -> your identifier is pre-filled in the URLs
IMPORTANT: Your identifier must be in every URL
Without your identifier in the URL, your payments won't be attributed to your account and will be rejected.
Step 2: Create Endpoints in Stripe
- Log in to Stripe Dashboard -> dashboard.stripe.com
- Click Developers at the bottom left
- Click Webhooks in the left menu
- Click Add endpoint
Endpoint 1: Payments and Refunds
In the Endpoint URL field, enter:
https://app.durum.ai/api/webhook/payment?client_key=YOUR_KEY(Replace
YOUR_KEYwith your identifier)Click Select events to listen to
Check the following 2 events:
invoice.paidcharge.refunded
Click Add endpoint
Endpoint 2: Sales
Click Add endpoint again
In the Endpoint URL field, enter:
https://app.durum.ai/api/webhook/sale?client_key=YOUR_KEY(Replace
YOUR_KEYwith your identifier)Click Select events to listen to
Check:
checkout.session.completed
Click Add endpoint
Step 3: Test
- In Stripe Dashboard, click the endpoint you just created
- Click Send test webhook
- Select the event type (e.g.,
invoice.paid) - Click Send test webhook
- Verify the response is
200 OK - In DURUM.ai, go to Data Logs to confirm reception
Quick Test
If you see 200 OK in Stripe and the event in DURUM.ai's Data Logs, everything is working. You can move on.
FAQ
Do I need to configure a signing secret?
No. DURUM.ai accepts Stripe webhooks automatically if your identifier (client_key or bid) is present in the URL. No secret to copy or configure.
If you want to add an extra layer of security, you can send the Signing secret (whsec_...) to your account manager who will configure it in DURUM.ai.
Why 2 endpoints and not 3?
The /payment endpoint handles both payments (invoice.paid) and refunds (charge.refunded). A dedicated /refund endpoint also exists if you prefer to separate, but it's not necessary.
Which endpoint if I use Stripe Checkout?
Use Endpoint 2 (/sale) with the checkout.session.completed event. This is what creates the sale in DURUM.ai.
If your clients pay via Stripe Invoicing, use Endpoint 1 (/payment) with invoice.paid.
My webhooks were active but stopped working
Stripe automatically disables an endpoint after too many consecutive errors. Go to Developers -> Webhooks and verify the endpoint is Enabled. If not, click it and re-enable.
Troubleshooting
| Problem | Solution |
|---|---|
| Payments not attributed to my account | Verify ?client_key=YOUR_KEY is in the URL |
| Endpoint disabled in Stripe | Re-enable in Developers -> Webhooks |
| Event ignored (200 response but nothing in DURUM.ai) | Verify you selected the right events (invoice.paid, not invoice.created) |
| Error 401 | Your URL doesn't contain your identifier: add ?client_key=YOUR_KEY |
| Error 429 | Too many simultaneous requests: Stripe will retry automatically |
Quick Checklist
- [ ] 2 endpoints created in Stripe Dashboard
- [ ]
client_keypresent in every URL - [ ] Events selected:
invoice.paid,charge.refunded,checkout.session.completed - [ ] Test webhook sent successfully (response
200) - [ ] Event visible in DURUM.ai's Data Logs