You can launch a Dodo Payments affiliate program from a single pasted API key. Not an OAuth dance, not a week of webhook wiring: one full-access key, and the tracking layer builds the rest of the integration inside your Dodo Payments account for you.
This guide walks the whole path: how the one-paste connection works and why a read-only key can’t do the job, how the referral rides checkout metadata, and exactly what happens on renewals, refunds, disputes, and tax. Rekomi, the affiliate platform I run, switched on its native Dodo Payments connection this week, so every mechanic below comes straight from building it, not from reading someone else’s changelog.
If you only want the steps, the install doc has them with copy-paste snippets. Stay here if you’d like to know what your money data is actually doing.
Why global digital sellers get so much from affiliates
Because Dodo Payments already solved the part that usually makes international affiliate traffic scary: tax. Dodo Payments is a Merchant of Record, meaning it’s the legal seller on every transaction, so it calculates, collects, and remits VAT and sales tax wherever your buyers are, and its checkout can present prices in more than 80 local currencies. When an affiliate in Jakarta sends you a customer in Warsaw, nothing about your compliance workload changes.
The commission side is just as tidy. Cost per sale means you owe money only after revenue lands: a $39/mo product at a 25% recurring rate pays the affiliate $9.75 each month the customer sticks around. An affiliate holding 12 active referrals earns $117/mo that renews itself, and you funded all of it out of collected revenue. Recurring commissions are why software affiliates hunt for programs like this; the good ones are building MRR of their own.
Dodo Payments doesn’t ship affiliate tracking of its own, so the missing piece is the layer that watches every charge and keeps the ledger honest (my affiliate tracking software guide goes deep on what that layer does all day). On Dodo Payments, it can be nearly invisible.
The one-paste Dodo Payments affiliate program setup
In Dodo Payments, open Developer > API Keys and create a full-access key; name it Rekomi so future-you knows what it’s for. Paste it on the Dodo Payments setup page in your Rekomi dashboard and click Connect. That’s the entire integration!
Behind that paste, Rekomi validates the key live against Dodo, creates the webhook endpoint in your account pointed at your workspace URL with exactly the events it needs, and fetches the endpoint’s signing secret itself. Nothing gets pasted back into Dodo, and you never see or handle the signing secret at all. If either half fails, nothing is left behind: a half-created endpoint gets deleted again.

The key must be full-access, and the reason is mechanical rather than greedy: Dodo’s read-only keys pass ordinary validation but can’t create webhooks, and creating the webhook for you is most of what the key is for. Connect with a read-only key and the flow fails partway with an error naming exactly that. After connect, the key’s whole job is managing that endpoint and running a read-only health check every 30 minutes. Your sales never travel through it; they arrive on the signed webhook, verified with the standard-webhooks scheme (an HMAC over the delivery id, timestamp, and body, with a 300-second freshness window) before anything records.
Two housekeeping notes. Dodo keys don’t expire, so if the health check ever flags the connection, someone revoked the key or disabled the endpoint, and the fix is always the same single paste. And live mode and test mode are separate universes at Dodo (different hosts, different keys, different webhooks), so a production connection rejects test credentials before anything is stored.
Getting the referral into a checkout you don’t host
Dodo Payments hosts its checkout on its own domain, so the affiliate referral has to travel from your visitor’s browser into the payment record. This part is required: skip it and sales arrive with no referral attached, which means no commission for anyone.
First the Rekomi head script goes on your marketing site; it captures the affiliate click in a first-party cookie. Then the referral rides checkout metadata, one of two ways depending on how you sell.
If you create checkouts through Dodo’s API, read the referral on your frontend with window.Rekomi.getReferral(), pass it to your backend, and set it in metadata on the checkout, subscription, or payment request:
{
"product_cart": [{ "product_id": "prod_your_product", "quantity": 1 }],
"metadata": { "rekomi_ref": "REFERRAL_FROM_YOUR_FRONTEND" }
}
If you sell through static payment links, decorate the link with the flat underscore param. Dodo copies metadata_key=value query params into the payment’s metadata, so the param is ?metadata_rekomi_ref=, written flat. It is not the metadata[rekomi_ref] bracket form you may know from other platforms; brackets do nothing here.
const ref = window.Rekomi?.getReferral?.();
const url = new URL("https://checkout.dodopayments.com/buy/prod_your_product");
if (ref) url.searchParams.set("metadata_rekomi_ref", ref);
// use url.toString() as the href on your Buy button
Subscription metadata persists for the life of the subscription, and Rekomi also falls back to the customer’s attribution history, so month 14’s renewal credits the same affiliate as month 1.
What happens once the money moves
Every charge Dodo makes arrives as one payment.succeeded event, and that single event carries the whole program:
- First subscription charges and one-time purchases
- Every renewal, for the life of the customer
- Plan-change charges when a customer upgrades or downgrades
- Recovery charges after an on-hold subscription comes back
Each records at the amount the customer was actually charged, and initial versus renewal is inferred from whether the subscription has been seen before, so recurring commission rules key off the right label. Trials fire no payment event at all, so no commission exists until the first real charge. Everything is de-duplicated by the underlying payment, subscription, refund, and dispute ids, so Dodo’s delivery retries never double count.
Commissions calculate on the charge amount including tax, and that’s a deliberate choice, not an oversight. My one strong opinion for this article: your commission basis has to match your refund basis, or the ledger drifts, and drifting ledgers are what make affiliates stop trusting a program. Dodo reports charges tax-inclusive, and its refunds and disputes are tax-inclusive too. Walk the math: a Berlin customer buys your $29/mo plan, pays $34.51 with 19% VAT, and your 20% commission credits $6.90. When that customer refunds in week two, the refund event says $34.51, and the clawback is exactly $6.90. Had the commission been credited on the $29 net instead ($5.80), every refund would need a tax-unwinding step to reconcile, forever. I love that Dodo kept both sides in the same units; it makes exact clawbacks a subtraction instead of a project.
Partial refunds are first-class. Each one claws back its share of the commission, multiple partials keep clawing until the original commission is exhausted, and nothing ever claws past it. One honest edge: Dodo occasionally reports a full refund without an amount, and Rekomi treats that as a refund of everything remaining on the conversion, the safe reading.
Disputes claw back the disputed money the moment the dispute opens, not when it resolves months later. If you win, the commission isn’t silently restored; the win is logged so you decide whether to re-credit. Losing changes nothing further, since the money already moved. One caveat in one line: if you process through your own Stripe or Adyen account behind Dodo’s checkout (Dodo calls this BYOP), payments track normally but refund and dispute webhooks may never arrive, so those clawbacks are manual.
The 80+ currency question, answered honestly

Dodo’s Adaptive Currency can present checkout in more than 80 local currencies, more than Rekomi’s supported-currency list covers, so here’s exactly how that’s handled. A payment, refund, or dispute in a currency Rekomi doesn’t support (VND, or a three-decimal code like KWD) is skipped and flagged, never guessed at, so a commission is never computed on a mangled amount. Sales in USD, EUR, GBP, and the rest of the supported list record normally, and if a real share of your revenue settles somewhere exotic, say so; the list is expandable.
The field: Affonso, Dub, and Rekomi
Fair’s fair: Rekomi isn’t the only affiliate platform that speaks Dodo Payments. Affonso and Dub both ship Dodo Payments integrations, both are credible products, and either will get a program running. Their setups have you paste an API key, then create the webhook by hand in Dodo’s dashboard and paste the signing secret back; a few extra steps, and they work.
The differences live in the plumbing. Rekomi’s connect is the only one where the webhook is created programmatically and the secret never passes through your hands, disputes claw back automatically the moment they open (neither of the other two handles dispute clawbacks today), and tracking is only half of Rekomi’s job. The other half is paying the affiliates you now owe.
Where Rekomi fits: first-party tracking on your own domain, the one-paste Dodo Payments connection above, recurring commissions with automatic refund and dispute clawbacks, and payouts with tax handling built in, on real payout rails with approvals and anti-fraud checks before money moves. Plans start at $19/mo plus a flat 3% of affiliate payouts, every plan carries a 14-day free trial, and the Dodo Payments integration page shows exactly what the connection records and how it’s secured.
Quick answers on Dodo Payments affiliate tracking
Do I have to create a webhook in the Dodo Payments dashboard?
No. Rekomi creates the webhook endpoint through Dodo’s API and fetches its signing secret itself; you’ll see the endpoint listed under Developer > Webhooks for reference, and disconnecting deletes it again. One limit worth knowing: Dodo caps accounts at 5 webhook endpoints, so if the connect reports the cap, remove an unused endpoint and retry.
Why can’t I use a read-only Dodo Payments API key?
Because read-only keys can’t create webhooks, and creating the webhook is the point of the one-paste setup. A read-only key validates fine, then the connect fails with an error naming exactly this. After connect, the full-access key only manages the endpoint and runs health checks; your sales arrive on the signed webhook, not through the key.
Do commissions include the tax Dodo Payments collects?
Yes. Charges report tax-inclusive, and refunds and disputes are tax-inclusive too, so it’s the only basis where a full refund claws back exactly what was credited. Budget your commission rate from the tax-inclusive number, not the sticker price.
Do plan upgrades, downgrades, and recovered payments earn commission?
Yes. Anything that charges the customer arrives as a payment event and records at the charged amount, including plan-change charges and recovery charges after a subscription comes off hold. Trials record nothing until the first real payment.
Can affiliates be credited through Dodo Payments discount codes?
Not on this rail yet. Attribution rides rekomi_ref metadata; per-affiliate discount codes still work as ordinary discounts, they just don’t attribute the sale by themselves.
One key, one purchase, one refund
The fastest way to trust a tracking layer is to watch it handle real money, and Dodo Payments makes the rehearsal cheap. Create a full-access key under Developer > API Keys, connect it following the setup doc, and decorate one payment link with the flat metadata param. Then buy your own product through an affiliate link, watch the conversion land on the campaign’s Activity tab within a minute, refund yourself, and watch the commission claw back to the cent. That loop is the whole system in miniature, and it’s a genuinely satisfying thing to see run end to end. The 14-day free trial covers the software while you test.



