Docs · Tools
No signup, a contract instead.
Partners is how an integrator takes a cut of the swaps they send us. There is no key to receive, no account to create and nobody to ask: you type the address you want to be paid at, and the page shows you a 0xSplits contract whose address we already know. Deploying it is the whole activation.
The problem it fixes, which was that nobody got paid#
A partner could already ask for a fee with partnerFeeBps, and the aggregators would collect it — into our contract. Every venue that carries an integrator fee (0x, CoW, LI.FI) accepts exactly one recipient address, so our 30 bps and the partner’s N bps arrived together, in one place, ours. The partner got a line in a quote log and no money, and settlement meant asking a human, with no schedule and no guarantee.
Nothing about the one-recipient limit can be argued with, so the fix changes whose address it is. The single recipient becomes a split contract holding both of us at shares that are exactly the two fees. The venue pays it in full and the contract divides on-chain. No invoice, no schedule, nobody to trust.
Why there is no field to hand us a contract in#
The split address is a pure function of your payout address and your fee: 0xSplits derives it from the recipients, the owner and the salt, so both sides compute the same address without agreeing on anything beforehand. That is the security property and it is why the page has no “split address” input. A partner cannot point us at a contract that pays them everything, because there is nowhere to point.
When something is deployed at that address, we still do not take it on trust. The configuration is read back from chain and compared field by field against the one we derived, and a mismatch comes back as a reason rather than a boolean — “your split pays SwapsPro nothing” and “your split is mutable” send you to different fixes, and a bare false sends you to neither.
| State | What it means | Where the fee goes |
|---|---|---|
| ready | Deployed, read back, and it is the configuration we derive. | Your split. |
| not-deployed | The address is right; nobody has deployed it on this chain yet. | SwapsPro, and the response says so. |
| mismatch | Something is deployed there and it is not what we derive. | SwapsPro. We will not route to it. |
| unknown | We could not find out — an RPC failed, or the config could not be read. | SwapsPro. A read that did not complete is never reported as “not deployed”. |
The owner is the zero address, permanently
The split is deployed with 0x0000000000000000000000000000000000000000 as owner, which means it can never be modified by anybody — you, us, or a compromised key. That is what makes one verification last forever, and it is why the address can be checked and cached with no expiry. It also means a fee change is a different contract, not an edit.
Your fee, and the ceiling on it#
The cap exists to protect the end user, who did not choose your fee and usually cannot see it. Without one, somebody sets 5% and the bad price is blamed on SwapsPro. So it is not a paywall on you; it is a ceiling on what a third party can charge someone else.
| Tier | Ceiling | How it is proved |
|---|---|---|
| Free — no pass | 100 bps | The default. Nothing to hold, nothing to claim. |
| Pro — a SwapsPro Pass at the payout address | 200 bps | Read from chain (tokenOf on Base) against the address that will be paid — not against whoever is browsing, and never a flag we set. |
A pass raises the ceiling; it does not move our share. Ours stays 30 bps either way, and the difference is paid by your users, who see the total in the quote before they sign. The alternative considered was cutting our share for Pro partners, which moves the same money out of our pocket instead. Read the rest of what a pass does on the Pro Pass page.
The address is derived from the fee CHARGED, not the fee requested
Ask for 200 bps without a pass and you earn on 100 — and the contract you must deploy is the 100 bps one, at a different address. Deploying the one the page showed you before the cap applied leaves you with a contract nothing ever pays into. The page names this the moment the choice is above the free ceiling.
The Pro check itself fails closed: an RPC we could not reach means the free ceiling applies for that quote, because the alternative overcharges a stranger. You lose nothing permanent — the next quote asks again — and the page says “could not check” rather than telling a holder they have no pass.
What the shares actually are#
The ratio is the two fees themselves. At 50 bps yours and 30 bps ours, the user pays 80 bps and the contract pays out 62.5% of it to you and 37.5% to SwapsPro. On a $1,000 swap that is $5.00 to you. You can read those numbers off the contract before integrating, which is the point: the deal is the code, not a paragraph in an email.
- Recipients are ordered deterministically, ours first. 0xSplits hashes the arrays as given, so the same two addresses in the other order are a different contract at a different address.
- Shares are scaled so they sum to the total allocation exactly — a remainder left by integer division would make the split reject its own configuration.
- The distribution incentive is 1%, the same one our own fee split uses. A PullSplit holds funds until somebody calls
distributeand pays the gas; the incentive is what makes bots do that instead of a person doing it by hand. Without it your balance sits in the contract forever, which reads to you as “SwapsPro did not pay me”.
Activating, step by step#
- Type the payout address. A wallet, a Safe, or a split you already run. Nothing is stored — it is the input to a derivation, not a registration.
- Pick your fee. Anything above 100 bps is marked
PROand checked against the payout address. - Read the split. One address, the same on every chain, with the exact shares beside it.
- Deploy where your users trade. The address is identical everywhere but the contract is per chain, so the page lists each one as live, not deployed, or couldn’t check, and you tick only the networks you want to earn on. There is no reason to pay gas on 9 chains to get paid on one.
- Pass the address to the SDK. That is the last step; there is no verification call to make.
integrating
import { SwapsPro } from "@swapspro/sdk";
const swaps = new SwapsPro({
// An EVM address opts you into payment. Any other string is attribution
// only — "skatehive" still works and still changes nothing about money.
partner: "0xYourPayoutAddress",
partnerFeeBps: 50,
});Deploys are walked one at a time, because a deploy is a transaction and a wallet can only be on one chain at a time. The queue is what is left rather than what was asked for: reject the third signature and the two that already succeeded stay done, with the remainder still on screen.
Available on Base, Ethereum, OP Mainnet, Arbitrum One, Gnosis, Polygon, BNB Smart Chain, Avalanche, Robinhood Chain.
What the quote tells you every time#
Every quote carries a partnerFee block, and it answers two separate questions — whether the venue could collect a second fee at all, and where a collected fee actually landed. Reporting only the first is the sentence that let a partner believe they were being paid while the money arrived here.
a capped, undeployed partner
"partnerFee": {
"requestedBps": 200,
"collectedBps": 100, // the tier cut it
"collected": true,
"tier": "free",
"feeCapBps": 100,
"paidToPartner": false, // …and the split for 100 bps is not deployed here
"recipient": "0x…",
"note": "Your fee was capped at 100 bps — hold a SwapsPro Pass at this payout
address to raise the ceiling to 200 bps. The split address is derived
from the fee actually charged, not from the one requested. …"
}| Venue | Carries your fee? | Pays your split? |
|---|---|---|
| 0x (same-chain EVM) | Yes, inside the 0x swapFee | Yes — the single recipient becomes your split |
| CoW | Yes, as an appData volume fee — but CoW caps the total partner fee at 100 bps and our 30 is paid first | Yes, when the collected amount matches what your split was derived for |
| LI.FI | Yes, added to the integrator fee fraction | No. LI.FI registers one fee wallet per integrator on its portal rather than accepting one per request, so there is no address to redirect. |
| Pioneer same-chain venues | No — no affiliate field exists in the call | Nothing to pay |
| Uniswap on Robinhood Chain | Yes, swept by SwapRouter02, capped at 100 bps total with ours paid first | No — 0xSplits has no factory on Robinhood Chain yet |
| Bitcoin, THORChain, Hive | In their own shapes (a multi-affiliate memo, named accounts) | No. 0xSplits is EVM bytecode and cannot be deployed there. |
A clamped route does not pay the split, on purpose
Your split’s shares were derived for a specific number of basis points. If a venue clamps the fee to something smaller — CoW and the Robinhood router both cap the total — paying that split would divide the smaller amount by the larger fee’s ratio. That shortchanges SwapsPro rather than you, so the fee goes to our own recipient and the note says exactly that, and names the number to request instead.
Non-EVM chains are stated, not discovered#
A partner who integrates against a Bitcoin pair and sees a fee described as collected has to be told, in the response, that it is not landing in their split. There is no contract on those chains to settle it, and there is no plan under which there will be.
What this deliberately is not#
- It does not gate quoting. Quoting stays keyless, accountless and free — that is the funnel and the only advantage we have over better distribution. This is activation to get paid, which Stripe, YouTube and every affiliate programme also require. The difference is that ours needs nobody’s approval.
- There is nothing to revoke. No key is issued, no row is written, no account exists. Stopping means passing a different
partnervalue. - Attribution is unchanged.
partnerwas always a free-form id and stays one. Keep passing a name and nothing about money changes; an EVM address is the opt-in. - We do not hold your balance. The split does, until somebody distributes it. We cannot pay you early and we cannot stop you being paid.
Related#
- The Pro Pass — what raises your ceiling, and everything else it waives.
- Create Contract — the same 0xSplits machinery, pointed at a split you design yourself.
- The SDK and the HTTP API — where
partnerandpartnerFeeBpsare passed. - Fees — one table, every path.
