Receive real-time notifications when events occur in Dodo Payments. Automate workflows and keep your systems synchronized with instant event delivery.
Webhooks provide real-time notifications when specific events occur in your Dodo Payments account. Use webhooks to automate workflows, update your database, send notifications, and keep your systems synchronized.
Our webhook implementation follows the Standard Webhooks specification, ensuring compatibility with industry best practices and existing webhook libraries.
The Dodo Payments webhooks portal has been rebuilt with a native dashboard experience. Your existing endpoints, signing secrets, signature verification, event names, and webhook payloads are unchanged. No integration work is needed.
Where things live.
Under Developer → Webhooks — the Endpoints, Event catalog, Logs, Activity, and Settings tabs.
On an individual endpoint — the Overview tab, carrying delivery stats, the signing secret and Replay history, plus the Testing and Advanced tabs and the bulk replay actions.
On a message — opened from the Logs tab, where each delivery attempt can be replayed on its own without opening the endpoint.
1
Access Webhook Settings
Navigate to the Dodo Payments Dashboard and go to Developer → Webhooks.
2
Create Webhook Endpoint
Click Add endpoint to open the endpoint creation side sheet.
3
Enter Endpoint URL or Choose Integration
Enter the URL where you want to receive webhook events, or select an integration connector to route events to a third-party service (Slack, Discord, Zapier, Resend, etc.).
4
Select Events to Receive
Choose the specific events your endpoint should listen for. Events are organized in a searchable tree grouped by resource. You can select individual events or a parent resource to receive all related events.
Only selected events will trigger webhooks to your endpoint, helping you avoid unnecessary traffic and processing.
5
Create Endpoint
Click Create endpoint to save your configuration.
6
Get Secret Key
Your webhook signing secret is displayed on the endpoint’s Overview tab. You’ll use this to verify the authenticity of received webhooks.
Keep your webhook secret key secure and never expose it in client-side code or public repositories.
7
Rotate Secret (Optional)
If needed, you can rotate your webhook secret for enhanced security. Click Rotate secret, alongside the secret on the Overview tab.
Rotating the secret will expire it and replace it with a new one. The old secret will only be valid for the next 24 hours. Afterward, trying to verify with the old secret will fail.
Use secret rotation periodically or immediately if you suspect your current secret has been compromised.
Instead of building your own webhook receiver, you can route webhook events directly to third-party services using integration connectors. This eliminates the need to write and maintain custom webhook handlers for popular platforms.
A connector carries a transformation that converts the Dodo Payments event into the shape the destination expects. Which details you supply depends on the destination:
Connector type
What you provide
Destinations
Incoming webhook URL
A webhook URL you create in the vendor’s own dashboard. No API key.
The connector picker in the dashboard shows the full set currently available to your business, so treat the table above as the destinations with step-by-step setup instructions rather than an exhaustive list. See External Integrations for what each destination can do once events reach it.
Pick a connector while creating or editing an endpoint, and the side sheet shows setup instructions written for that destination — for example, how to create an incoming webhook URL in Slack, or where to find your Resend API key. Before you save, run the connector transformation test to confirm the event is converted correctly for the destination.
Use a connector to reach a supported destination without writing code. If you need custom logic, use a standard endpoint with a transformation instead.
You can configure which specific events each webhook endpoint should receive.
1
Navigate to Webhook Endpoints
Go to your Dodo Payments Dashboard and navigate to Developer → Webhooks.
2
Select Your Endpoint
Click on the webhook endpoint you want to configure.
3
Open Event Configuration
Click Edit to open the endpoint configuration side sheet.
4
Browse Event Types
The event type selector displays all available webhook events organized in a searchable tree, grouped by resource (e.g., payment, subscription, dispute). Use the search bar to quickly find specific events by name or keyword.
5
Select Events
Check the boxes next to the events you want to receive. You can:
Select a parent resource to receive all related events
Mix and match specific events based on your needs
6
Save Configuration
Click Save to apply your changes, or Cancel to discard modifications.
If you deselect all events, your webhook endpoint will not receive any notifications. Make sure to select at least the events your application needs to function properly.
Go to Developer → Webhooks and open the Event catalog tab. It lists every event type Dodo Payments can send, so you can see what is available before subscribing an endpoint to it. Select an event to view its schema and an example payload, which is the quickest way to check the shape of a field you plan to read.
Webhook Events Guide
Browse the same events as reference documentation, grouped by resource.
If a webhook delivery fails, Dodo Payments automatically retries with exponential backoff to prevent overwhelming your system.
Attempt
Delay
Description
1
Immediately
First retry happens right away
2
5 seconds
Second attempt after short delay
3
5 minutes
Third attempt with increased backoff
4
30 minutes
Fourth attempt continuing backoff
5
2 hours
Fifth attempt with extended delay
6
5 hours
Sixth attempt with longer delay
7
10 hours
Seventh attempt with maximum delay
8
10 hours
Final attempt - webhook marked as failed if unsuccessful
Maximum of 8 retry attempts per webhook event. For example, if a webhook fails three times before succeeding, the total delivery time is approximately 35 minutes and 5 seconds from the first attempt.
Use the Dodo Payments dashboard to manually retry individual messages or bulk recover all failed messages at any time.
Type of resource. One of: Payment, Subscription, Refund, Dispute, LicenseKey, CreditLedgerEntry, CreditBalanceLow, AbandonedCheckout, DunningAttempt, EntitlementGrant, or Payout.
Additional fields vary by event type. See the event-specific documentation for complete schemas.
The Testing tab dispatches a sample payload to this endpoint so you can verify your receiver.
1
Select Event Type
Use Select an event type to choose the event you want to test, for example payment.succeeded or payment.failed.
2
Send Example
Click Send example. The sample payload is delivered to your endpoint URL exactly like a real event, signed the same way.
Failed messages sent from the Testing tab are not retried. Use it to verify your receiver, not to test the retry schedule.
3
Check Your Endpoint
The tab records when the Last example sent went out. Confirm the event arrived, that your signature verification passed, and that you returned a 2xx status code.
Test your webhook handler thoroughly using the dashboard testing interface before processing production events. This helps identify and fix issues early.
Forward real webhook events from your test mode account to your local development server in real time:
dodo wh listen
The CLI opens a WebSocket connection to Dodo Payments and forwards every webhook event to your local endpoint (e.g., http://localhost:3000/webhook), preserving all headers including signature headers for verification testing.
The listener only works with test mode API keys. Run dodo login and select Test Mode before using this command.
Send mock webhook payloads to any endpoint without creating real transactions:
dodo wh trigger
This interactive tool lets you pick an event type and sends a realistic mock payload to your endpoint. It loops so you can test multiple events in one session.The trigger command covers all 46 event types Dodo Payments delivers, including the subscription, payment, refund, dispute, license key, payout, credit, abandoned checkout, dunning, and entitlement grant families — see Supported Webhook Events for the exact list.
Mock webhook payloads from dodo wh trigger are not signed. Use unsafe_unwrap() instead of unwrap() in your webhook handler during testing only.
The Logs tab provides comprehensive visibility into your webhook delivery status, allowing you to monitor, debug, and manage webhook events effectively.
1
Navigate to Logs Tab
Go to Developer → Webhooks and open the Logs tab.
2
Browse Delivery History
View a table of all webhook delivery attempts with columns for Event type, Message ID, Event ID, Sent at, Attempted at, Response code, and Duration.
3
Search and Filter
Use the search bar to find specific messages by ID or event type. Filter by status (Succeeded, Failed, Pending, etc.) to focus on the events you need to investigate.
4
View Message Details
Click on any message to open the message detail page, which shows:
The complete webhook payload
Every delivery attempt with response code and duration
Timestamp of each attempt
Any error messages from your endpoint
Each attempt carries a Replay action, so you can re-drive that one message without leaving the page.
Go to Developer → Webhooks and open the Activity tab for a view of delivery performance across your endpoints.Delivery activity plots attempts over time, bucketed as Attempts per 5 minutes, Attempts per hour, or Attempts per day depending on the window. Each bar is split by outcome, and hovering a segment shows the status, the number of attempts, and its share of the total. On an endpoint, Delivery stats (last 24h) on the Overview tab summarizes the same information for the past day.
The Error rate (24h) column on the Endpoints tab tells you at a glance which endpoints need attention, before you open any of them.
Ready to deploy your webhook handler to production? We provide platform-specific guides to help you deploy webhooks to popular cloud providers with best practices for each platform.
Vercel
Deploy webhooks to Vercel with serverless functions
Cloudflare Workers
Run webhooks on Cloudflare’s edge network
Supabase Edge Functions
Integrate webhooks with Supabase
Netlify Functions
Deploy webhooks as Netlify serverless functions
Each platform guide includes environment setup, signature verification, and deployment steps specific to that provider.