> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bring Your Own Processor (BYOP)

> Keep your own Stripe or Adyen account and route payments through it, while Dodo Payments powers subscriptions, invoicing, and analytics on top.

**Bring Your Own Processor (BYOP)** lets you connect your own payment processor — currently **Stripe** or **Adyen**, with support for more processors coming soon — and keep using Dodo Payments for everything that sits on top of the transaction: products, subscriptions, license keys and the entitlement engine, invoicing, the customer portal, and analytics.

You decide, per customer country, whether a payment is processed by **your processor** (you remain the merchant of record for that route) or by **Dodo Payments** as your full-service Merchant of Record. Countries you don't explicitly route fall back to Dodo automatically.

<CardGroup cols={2}>
  <Card title="Route by geography" icon="globe">
    Send payments from specific countries to your own processor, and everything else to Dodo.
  </Card>

  <Card title="Keep your processor accounts" icon="plug">
    Continue using your existing Stripe or Adyen accounts and relationships.
  </Card>

  <Card title="Stay the merchant of record" icon="building">
    On your own routes, you remain the legal seller and control tax, disputes, and payouts.
  </Card>

  <Card title="One billing layer" icon="layer-group">
    Dodo powers products, subscriptions, invoices, and analytics across both routes.
  </Card>
</CardGroup>

## BYOP vs. Dodo as Merchant of Record

When you enable BYOP you choose how each payment is handled. The two models can run side by side, routed by customer country.

| Feature                    | Dodo as Merchant of Record               | Bring Your Own Processor                   |
| -------------------------- | ---------------------------------------- | ------------------------------------------ |
| Legal seller of record     | Dodo Payments                            | Your company                               |
| Tax (VAT, GST & sales tax) | Calculated, collected & remitted for you | You register, collect & file               |
| Chargebacks & fraud        | Liability & protection handled by Dodo   | You manage with your processor's own tools |
| PCI compliance             | Handled by Dodo                          | You manage                                 |
| Payment methods            | 30+ global & local, multi-currency       | Cards only (credit/debit)                  |
| Payouts                    | Aggregated global payouts                | Direct from your processor                 |
| Setup                      | Simple, go live in minutes               | Moderate, add keys & routing               |
| Best for                   | Selling globally, hands-off compliance   | Existing processor & regional control      |

<Tip>
  A common setup is **hybrid**: route a country where you already have a registered entity and processor (for example, your home market) to your own processor, and let Dodo handle the rest of the world as Merchant of Record.
</Tip>

## Supported processors

Today you can connect **Stripe** or **Adyen**. Support for more processors is on the way.

<CardGroup cols={2}>
  <Card title="Stripe" icon="stripe" />

  <Card title="Adyen" icon="https://mintcdn.com/dodopayments/4tpr59mZcbRBC9sk/images/logos/adyen.svg?fit=max&auto=format&n=4tpr59mZcbRBC9sk&q=85&s=0acd6437cfd0362c95fc8acecb7dd32f" width="24" height="24" data-path="images/logos/adyen.svg" />
</CardGroup>

<Note>
  Payments routed through your own processor currently support **credit and debit cards only**. We're adding more payment methods soon.
</Note>

<Warning>
  Both **Stripe** and **Adyen** require **raw card API access** enabled on your account so that Dodo can power billing on top of your processor. Each processor grants this on request — you arrange it by contacting the processor's support before you connect. See the [Stripe](/features/byop/stripe) and [Adyen](/features/byop/adyen) guides for details.
</Warning>

<Info>
  Connections are configured **per environment**. The processor you connect in **test mode** (Sandbox) is separate from the one in **live mode** (Production); set up both if you want to test before going live. The setup wizard follows your dashboard's global test/live toggle.
</Info>

## Set up BYOP

Open **Settings → BYOP** in the dashboard and select **Configure** on the *Bring Your Own Processor* card to launch the setup wizard.

<Frame>
  <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/overview.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=aeb8dfda155edde6d9084a4a03d7b15f" alt="BYOP settings showing the Merchant of Record and Bring Your Own Processor options with a feature comparison" style={{ maxHeight: '500px', width: 'auto' }} width="1391" height="1010" data-path="images/byop/overview.png" />
</Frame>

<Steps>
  <Step title="Choose a payment processor">
    Select the processor you want to connect, **Stripe** or **Adyen**, and continue.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/select-processor.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=af477914f52012f9d935da449a70fe25" alt="Select Payment Processor dialog with Stripe and Adyen options" style={{ maxHeight: '500px', width: 'auto' }} width="855" height="1019" data-path="images/byop/select-processor.png" />
    </Frame>
  </Step>

  <Step title="Connect your account">
    Give the connection a **Provider Name** (useful when you have multiple accounts from the same processor, e.g. *Stripe US* and *Stripe UK*), then enter your processor's **Secret Key** (for Stripe, your `sk_...` key).

    For **Adyen**, also enter your **Merchant Account** identifier.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/connect-account.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=1c0288cc586a0ca856de2c11ce48db58" alt="Connect Your Stripe Account step showing processor name, secret key, webhook endpoint, and signing secret fields" style={{ maxHeight: '500px', width: 'auto' }} width="1697" height="956" data-path="images/byop/connect-account.png" />
    </Frame>

    Saving creates the connection and generates a **Webhook Endpoint** unique to it. Add that URL as a webhook destination in your processor's dashboard, then paste the **Webhook Signing Secret** back into Dodo to finish:

    * **Stripe**: paste the signing secret from the webhook endpoint you added.
    * **Adyen**: paste the **HMAC key** from *Customer Area → Webhooks*.

    <Note>
      Your secret key is stored securely and can't be viewed or changed after saving. You only ever configure the Dodo-generated webhook URL in your processor; you never interact with the underlying infrastructure directly.
    </Note>

    <Tip>
      Use **Verify connection** after saving to run a test call against your processor and confirm the keys and webhook secret are valid before you go live.
    </Tip>
  </Step>

  <Step title="Configure payment routing">
    Add **routing rules** that map customer countries to a processor. Each country can be routed to exactly one processor.

    * **Your processor** handles payments from the countries you assign to it.
    * **Dodo Payments** handles **Rest of the World** (every country you don't explicitly route) as Merchant of Record.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/routing.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=3af203be1fcab91b6952b8c6c3079f32" alt="Configure Payment Routing step showing Stripe US routed to United States and Dodo Payments as the Rest of the World default" style={{ maxHeight: '500px', width: 'auto' }} width="1696" height="830" data-path="images/byop/routing.png" />
    </Frame>

    Use **Add Route** to assign one or more countries to a processor.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/add-route.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=cf0972881d7ba092a16e8af0e94d2456" alt="Add Route panel selecting a processor and countries" style={{ maxHeight: '500px', width: 'auto' }} width="1048" height="1024" data-path="images/byop/add-route.png" />
    </Frame>

    <Info>
      **Routing guidelines**

      * "Rest of World" covers all countries not listed above.
      * Dodo Payments MoR routes handle compliance and tax automatically.
      * Your own processor routes require separate tax configuration if needed.
    </Info>
  </Step>

  <Step title="Configure invoice information">
    For payments routed through your own processor, **you** are the seller on the invoice. Enter the business details that should appear on those invoices:

    * **Registered Business Name** (required)
    * **Tax ID** (EIN, SSN, etc.; optional, with format validation available for US EINs)
    * **Statement Descriptor** (required): what customers see on their bank statement (5 to 22 characters)
    * **Registered Business Address** (required): start typing to search and autofill your address
    * **Privacy Policy** and **Terms of Service** links (required)

    A live **Invoice Header Preview** shows how the details will appear. These details apply **only** to invoices for routes you handle through your own processor; Dodo-routed payments continue to use Dodo's Merchant of Record details.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/invoice-info.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=bcda6d001983283ef73b667085a22e83" alt="Configure Invoice Information step with business details and a live invoice header preview" style={{ maxHeight: '500px', width: 'auto' }} width="1690" height="987" data-path="images/byop/invoice-info.png" />
    </Frame>
  </Step>

  <Step title="Review and finish">
    Review your processor connection, routing rules, and invoice details. Confirm that the routing and billing details are correct, then select **Finish setup**.

    <Frame>
      <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/review.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=b3e0c37922465915ef8f0bb30c3d458c" alt="Review Your Configuration step summarising the processor, routing, and invoice details" style={{ maxHeight: '500px', width: 'auto' }} width="1677" height="1021" data-path="images/byop/review.png" />
    </Frame>
  </Step>
</Steps>

Once configured, the BYOP card shows **Edit Configuration**, and you can return to MoR-only at any time with **Edit routing rules**.

<Frame>
  <img src="https://mintcdn.com/dodopayments/DNTF2guUc26Fj2yI/images/byop/configured.png?fit=max&auto=format&n=DNTF2guUc26Fj2yI&q=85&s=212e6b18c6666d36ce240959e4d85541" alt="BYOP settings after configuration showing Edit Configuration and routing options" style={{ maxHeight: '500px', width: 'auto' }} width="1485" height="953" data-path="images/byop/configured.png" />
</Frame>

## How routing works

Routing is determined by the **customer's country** at payment time. The same logic applies across one-time payments, checkout sessions, and subscription sign-ups. Renewals reuse the processor the subscription was created on (see [Subscriptions](#subscriptions)).

```mermaid theme={null}
flowchart TD
    A[👤 Customer pays] --> B{Customer country<br/>has a route?}
    B -->|Yes| C[🏦 Your processor<br/>You are merchant of record]
    B -->|No, Rest of World| D[🟢 Dodo Payments<br/>Dodo is Merchant of Record]
    C --> E[🧾 Dodo powers billing,<br/>invoicing & subscriptions]
    D --> E
```

On a route handled by **your processor**:

* The payment is processed on **your** processor account in the billing currency.
* **No tax is calculated or collected** by Dodo; you remain responsible for tax on that route.
* Invoices use the **business details and statement descriptor** you configured, with no Merchant of Record references.
* Payouts settle **directly to you** from your processor; nothing flows through Dodo's wallet.

On a route handled by **Dodo** (Rest of World), Dodo behaves exactly as your full-service Merchant of Record, handling tax, compliance, disputes, fraud, and aggregated payouts.

## Subscriptions

Subscriptions stay on the processor they were created on. At renewal, Dodo charges the same payment processor that was used to purchase the subscription, reusing the payment mandate stored against it. Routing rules are not re-evaluated on every renewal.

## Seeing which processor handled a payment

Once BYOP is configured, the **Payments** and **Disputes** tables show a processor icon (Stripe, Adyen, or Dodo) next to each row, and the payment and dispute detail pages include a **Payment Processor** field, so you can always tell which route handled a given transaction.

## Refunds, disputes & payouts

<Tabs>
  <Tab title="Refunds">
    You initiate refunds from the Dodo dashboard as usual. For payments routed through your own processor, the refund is executed on that processor; for Dodo-routed payments, Dodo processes the refund.
  </Tab>

  <Tab title="Disputes">
    The Dodo dashboard shows disputes for **Dodo-processed** payments only.

    > Only Dodo-processed disputes are shown here. Disputes on your own processor (e.g. Stripe) are managed in that processor's dashboard.

    Evidence upload, accept, and challenge actions are available only for Dodo-processed disputes. Disputes on your processor are handled with your processor's own tools.
  </Tab>

  <Tab title="Payouts">
    For routes on your own processor, your processor pays you **directly**; those payouts don't appear in Dodo.

    > Only Dodo payouts are visible here. Payouts on your own processor occur in that processor.

    Dodo payouts (for Rest-of-World MoR volume) follow the standard [payout structure](/features/payouts/payout-structure).
  </Tab>
</Tabs>

## Analytics

Revenue, tax, and subscription analytics include **both** routes so you see the full picture of your billing. Disputes and payouts widgets show **Dodo-processed** activity only, with a banner indicating that activity on your own processor lives in that processor's dashboard.

## Billing fee

Dodo applies a small **BYOP billing fee** on payments routed through your own processor, since Dodo still powers your products, subscriptions, invoicing, and analytics on those transactions. It appears as a `byop_fee` line in your balance ledger. The default rate is **0.5%**; the exact rate is confirmed as part of enabling BYOP for your account. [Reach out](mailto:founders@dodopayments.com) for details.

## Frequently asked questions

<AccordionGroup>
  <Accordion title="Which processors can I connect?">
    Stripe and Adyen are supported today, with support for more processors coming soon. Both require **raw card API access** enabled on your account, which you arrange by contacting the processor's support. See the [Stripe](/features/byop/stripe) and [Adyen](/features/byop/adyen) guides for details.
  </Accordion>

  <Accordion title="Can I route only some countries to my processor?">
    Yes. Assign specific countries to your processor and leave the rest as **Rest of the World**, which Dodo handles as Merchant of Record. Each country routes to exactly one processor.
  </Accordion>

  <Accordion title="Who is the merchant of record on BYOP routes?">
    You are. On routes handled by your own processor, you remain the legal seller and are responsible for tax, chargebacks, PCI compliance, and payouts on those transactions.
  </Accordion>

  <Accordion title="Does Dodo calculate tax on my processor's routes?">
    No. Tax is not calculated or collected on routes handled through your own processor; you manage tax for those transactions. Dodo continues to handle tax on Dodo-routed (MoR) payments.
  </Accordion>

  <Accordion title="What happens to active subscriptions if I disable a processor?">
    Renewals on that processor will fail and surface as failed payments in the dashboard. Re-enable the processor to restore renewals.
  </Accordion>
</AccordionGroup>

## Get started

<Card title="What is Merchant of Record?" icon="building-columns" href="/features/mor-introduction">
  Understand how Dodo's full-service MoR model works.
</Card>
