How to Claim FeeSplitter Partner Fees on Each Chain

You see a partner balance after users zap through your integration, then you hunt for a Swap-style withdraw button. That button is not how to claim FeeSplitter partner fees. Earn and Zap share sits in an on-chain contract on each EVM chain. Register a claim wallet, read pending versus free, sign claim or claimAll from that wallet, and confirm the token transfer on a block explorer.
Summary: FeeSplitter is the on-chain Earn/Zap partner-fee contract, not the Swap Partner Portal withdrawal. On every EVM chain where zaps already accrued a share, register a claim wallet, confirm a distributor address, and read pending versus free. Sign claim(token) or claimAll(tokens) from that wallet only, then verify the token transfer on a block explorer. Repeat on each chain that still shows pending.
A zap is one on-chain click that swaps and deposits into a yield strategy. When a user zaps through a partner integration, the fee is taken in that transaction and routed to FeeSplitter on that chain. The fee token may be the input or the output token, so balances often look mixed. FeeSplitter holds only accrued fees, never user principal.
Need a portal account first? Use the Partner Portal join guide. This page is the claim flow only. Swap commissions sit in the portal; Earn fees sit in FeeSplitter (see the on-chain versus reports comparison).
How to confirm the balance is FeeSplitter, not Swap History

Start with the money path. Swap partner commission lives in Partner Portal History. Earn/Zap partner fees live in FeeSplitter on eight EVM networks named in the product post and Earn architecture (see the checklist table below).
Do check which product produced the number. Do not press the Swap withdraw control for Earn share. Do not apply the Swap portal’s documented $50 equivalent minimum, or its wallet/email wait rules, to a FeeSplitter claim.
| Money path | Where it sits | How you take it | Do not mix with |
|---|---|---|---|
| Swap partner commission | Portal History | Manual custodial withdrawal | FeeSplitter claim() |
| Earn/Zap partner fees | FeeSplitter per chain | You sign claim or claimAll | Portal $50 minimum |
| User principal after a zap | Underlying protocol | User withdraws there | Partner fee contracts |
Do this, not that: Treat Swap History and FeeSplitter as two wallets that share a login. If the number came from zaps, stay on-chain. If it came from swap volume, stay in the portal.
Registering a claim wallet on each EVM chain

An EVM chain is a network that uses Ethereum-style accounts. Registering on Ethereum does not cover Base or Arbitrum. Partners register a claim wallet on each network and claim each chain independently. Nobody else moves a partner’s funds.
Use an existing partner account with Earn Partner API access. Live paths are on the Earn Partner API reference. Follow that page for the production base URL. Do not copy a staging-looking host out of an OpenAPI blob. Make sure user zaps send X-Partner-Api-Key. That header is not the key you sign claims with.
Check GET /partners/supported-chains first. Each chain has a distributor field (TokenDistributor / FeeSplitter address). If it is empty, skip. Earn intro pages may name Sonic for yield; Sonic is not in the FeeSplitter eight. Do not claim there unless docs later show a distributor. Attach the wallet with POST /partners/{partner_id}/claim-addresses (address plus chain_id). Do not register a throwaway wallet. That address is the only signer that can pull partner fees on that chain.
Checking fee-balance: pending vs free before you sign

Read GET /partners/{partner_id}/fee-balance. free means accrued but not yet pushed to the distributor. pending means pushed and claimable on-chain. total is free plus pending.
Check pending before you sign. Use claim calldata only when pending is above zero. If the row is all free, the share is not in the contract yet. Avoid sending a claim against zero pending: you pay gas for nothing. Do not invent a push timer. The API does not publish a wait between free and pending. Re-read later. Do not spam claims hoping to force a push. Mixed zap routes can leave several tokens on one chain.
How to build claim vs claimAll calldata and sign it
claim(token) withdraws the full pending balance of one token. claimAll(tokens) withdraws several tokens in one transaction. Both stay on a single chain. They do not move funds across chains.
Claim workflow:
Confirm Earn/Zap fees (not Swap History) → register claim wallet → non-empty distributor → fee-balance pending vs free → unsigned claim or claimAll → sign from the claim wallet, value 0 → verify on a block explorer → next chain
- Confirm Earn/Zap FeeSplitter fees, not Swap History or the portal custodial withdrawal.
- Use an existing Earn Partner API account. Skip portal signup here.
- Attach a claim wallet (address + chain_id) on every EVM network where zaps accrued a share.
- Confirm supported-chains shows a non-empty distributor on that chain.
- Read fee-balance. Sign only if pending is above zero. Treat free as not yet pushed.
- Build fees/claim for one token or fees/claim-all for the whole chain.
- Sign from that claim wallet. Verify the token transfer on a block explorer.
- Repeat on every chain with pending. Treat demo splits as examples only.
Partner API paths (from the Earn partners docs):
GET /partners/supported-chains
POST /partners/{partner_id}/claim-addresses
GET /partners/{partner_id}/fee-balance
POST /partners/{partner_id}/fees/claim
POST /partners/{partner_id}/fees/claim-all
POST /partners/{partner_id}/fees/claim takes chain_id, claim_address, token_id, and is_token_native. It returns unsigned calldata: from is your claim address, to is the distributor, value is 0. POST …/fees/claim-all claims every token’s whole fee balance on that chain. Sign with the claim wallet. Do not send extra native value. Do not let a helper “claim for you.” Revenue-share use may need a Partner Agreement in the YiFi API Terms of Use.
Repeating the claim on every chain (demo splits are examples)
A successful claim on Ethereum does not empty Base. Repeat wherever pending is above zero. More EVM chains are described as coming soon. Check supported-chains rather than assuming a new network is live.
As the FeeSplitter product post states, posted ranges are a YiFi share of 0.1% to 0.3% and a partner share from 0.1% up to 0.7%, set per integration. As that same post states, an example zap split of 0.15% YiFi plus 0.5% partner-demo is an example, not a live default.
As the FeeSplitter product post states, an example Ethereum contract 0x8371886d68E60AD73667c8a290167cfa7A5C8397 and an example zap tx on Etherscan. Treat both as an Ethereum sample. Prefer the API distributor field for the chain you are on. Keep method names from the post and the API.
Keep fee buckets separate. The Earn homepage FAQ states a user Zap execution fee of min 0.3% and max 0.5% depending on the strategy. That is the user zap fee, not your partner split. Read the FeeSplitter product post for methods and demo numbers, then sign from this checklist.
Chain-by-chain claim checklist
Use this table before you spend gas. Truth is still GET /partners/supported-chains plus fee-balance.
| Network | FeeSplitter eight? | What to do |
|---|---|---|
| Ethereum, BNB Chain, Base, HyperEVM, Arbitrum, Polygon, Optimism, Avalanche | Yes (post + architecture) | Check distributor, then pending, then sign |
| Sonic or other yield names on Earn intro pages | No | Skip claim unless a distributor appears later |
| Any chain with an empty distributor field | Not deployed | Do not build claim calldata |
- Checklist: distributor address is non-empty on this chain_id.
- Checklist: claim wallet on this chain matches the address you will sign with.
- Checklist: pending is above zero for the token or for the claimAll set.
- Checklist: calldata value is 0 and from is the claim wallet.
- Checklist: explorer shows the token arriving at that wallet.
After a successful transfer, move to the next chain with pending. For Swap History, open your existing Partner Portal account. FeeSplitter holds only accrued fees; see the Earn architecture overview. Avoid Curve or Uniswap FeeSplitter pages.
Frequently asked questions
Is FeeSplitter for swaps or only Earn/Zap?
Use FeeSplitter only for Earn/Zap partner fees. Swap dashboard balances stay in Partner Portal History. Do not run claim() on Swap commission.
When should I use claim vs claimAll?
Use claim(token) for one asset on that chain. Use claimAll(tokens) when several tokens show pending and you want one transaction. Both stay on a single chain. Check fee-balance before you pick.
Do I claim once or on every chain?
Claim each chain separately. Register a claim wallet per chain_id, read pending, then sign. A claim on Ethereum does not clear Arbitrum.
Who can move partner funds?
Only the registered claim wallet on that chain. Do not share that key. Do not sign a payload whose from address is not yours.
Is the 0.15% plus 0.5% demo split the default for every partner?
No. As the FeeSplitter product post states, 0.15% YiFi plus 0.5% partner-demo is an example, not a default. Use the split you configured for that integration.
What if fee-balance shows only free and pending is zero?
Do not sign. Free means accrued but not yet pushed to the distributor. Re-read fee-balance later. Docs do not give a push clock.
Can I claim on Sonic because Earn lists it for yield?
No. Check supported-chains. If distributor is empty, skip. Claim only where a distributor is deployed and pending is above zero.