- Already have an existing payout infrastructure
- Need to use a specific payment provider not supported by Dub
- Want to consolidate all payouts through a single system
- Have custom compliance or regulatory requirements
Payout modes
Dub supports three payout modes for your partner program:Hybrid and External only payout modes require an Enterprise
plan subscription.
Internal (Recommended)
This is the default payout mode for new programs. All partners are paid directly by Dub through Stripe Connect & PayPal based on the partner’s country. This is the simplest option and requires no additional setup beyond connecting your bank account.Hybrid
Partners with connected bank accounts are paid directly by Dub, while all other partners with tenant IDs configured receive payouts via thepayout.confirmed webhook event.
This mode offers the best of both worlds:
- Partners who prefer direct bank transfers can connect their accounts
- You maintain control over payouts for partners without bank accounts
- Gradual migration path if you’re transitioning from external to internal payouts
External only
All payouts are processed through thepayout.confirmed webhook event to your platform. Dub handles commission tracking and payout calculations, but you’re responsible for the actual money transfer.

How external payouts work
The external payout flow follows these steps:1
Payout confirmed on Dub
When a payout period ends and you confirm the payout in your Dub dashboard,
eligible external payouts are marked as confirmed.
2
Webhook event sent
Once the payout is processed by Stripe, Dub sends a
payout.confirmed webhook
event for each external payout.3
Process the webhook
Your webhook receiver processes the event and initiates the payout through
your internal systems using the partner’s
tenantId to identify them.4
Payout status updated
Based on the webhook delivery status:
- Success (200-299 response): Payout is marked as
completed. - Failure (non-2xx response or timeout): Payout is marked as
failedafter all retries attempts are exhausted.
External payout modes require an active webhook subscribed to the
payout.confirmed event. You’ll be prompted to set one up if you haven’t
already.Setting up external payouts
1. Configure partner tenant IDs
For external payouts to work, each partner must have atenantId configured. This is your internal identifier for the partner in your system.
You can set the tenant ID when:
- Creating a partner via API
- Updating a partner in your dashboard
- Importing partners from another platform

2. Set up webhook receiver
Create a webhook endpoint that listens for thepayout.confirmed event. See our webhook setup guide for detailed instructions.
Your webhook endpoint should:
- Verify the webhook signature to ensure it’s from Dub
- Extract the payout and partner information from the payload
- Initiate the payout through your payment system
- Return a 2xx status code on success
3. Verify setup
After configuring your partners and webhook receiver, test the integration to ensure everything works correctly:- Confirm a payout in your Dub dashboard for a partner with a configured
tenantId - Check your webhook receiver to verify it received the
payout.confirmedevent - Verify the payout status in your Dub dashboard shows as “completed” after your webhook returns a 2xx response
Webhook payload
Thepayout.confirmed webhook event contains the following information:
amount: Payout amount in centscurrency: Currency code (e.g., “USD”)partner.tenantId: Your internal identifier for the partnerperiodStart/periodEnd: The commission period this payout coversmode: This will be external for external payouts
Best practices
Implement idempotency
Implement idempotency
Use the
id field from the webhook payload as an idempotency key to prevent duplicate payouts if the webhook is retried.Handle webhook failures gracefully
Handle webhook failures gracefully
Return appropriate HTTP status codes:
200-299: Payout processed successfully400-499: Invalid request (won’t be retried)500-599: Server error (will be retried)
Monitor webhook health
Monitor webhook health
Set up alerts for webhook failures in your webhook
settings. Dub will automatically
disable webhooks after 20 consecutive failures.
Troubleshooting
Webhook not receiving events
Webhook not receiving events
- Verify your webhook is subscribed to the
payout.confirmedevent - Check that your webhook URL is publicly accessible - Ensure your endpoint returns a 2xx status code - Review webhook logs in your webhook settings
Partner not receiving external payouts
Partner not receiving external payouts
- Verify the partner has a
tenantIdconfigured - Check that your program’s payout mode is set to Hybrid or External - Ensure the partner meets the minimum payout threshold - Confirm the partner’s status is “approved”
Payout marked as failed
Payout marked as failed
Check the failure reason in your dashboard. Common causes: - Webhook endpoint
returned non-2xx status code - Webhook endpoint timed out (30 second limit) -
Webhook endpoint is unreachable