If you are unfamiliar with Ultra Swap Fees, please refer to the doc.
Key Points
The Jupiter Ultra Swap API allows you to add integrator fees to the orders.Requires specific Referral Program Accounts
Requires specific Referral Program Accounts
The Ultra Swap Integrator Fees are governed by the Referral Program.It is required to create a valid referral account and it’s referral token accounts for the specific token mints to collect fees in. These accounts are initalized under the Jupiter Ultra Referral Project.Refer to the rest of the guide for more details on the set up.
Fee split when adding fees
Fee split when adding fees
If you plan to take 100bps, Jupiter will take 20bps for the fee split (there will be no Ultra base fee).
| Type | Fee | 
|---|---|
| Ultra default fees | 5 to 10 bps | 
| Added integrator fees | Ultra takes 20% of your integrator fees | 
Ultra decides which mint to take fees in
Ultra decides which mint to take fees in
In the 
/order response, you will see the feeMint field which is the token mint we will collect the fees in for that particular order.Since Jupiter will always dictate which token mint to collect the fees in, you must ensure that you have the valid referral token account created for the specific fee mint.The 
feeMint is based on a priority list, you can refer to the Ultra Fees doc for more details.| inputMint | outputMint | feeMint | Reason | 
|---|---|---|---|
| SOL | USDC | SOL | SOL is of highest priority | 
| USDC | SOL | SOL | SOL is of highest priority, regardless of side | 
| MEME | USDC | USDC | Stablecoin (USDC) has higher priority | 
If the 
referralTokenAccount for the feeMint is not initialized, the order will still return and can be executed without your fees. This is to ensure your user still receives a quote to proceed with the swap.For example, if the feeMint is SOL, but the referralTokenAccount for SOL is not initialized, the order will still return but will be executed without your fees.You can refer to if feeBps tallies with what you specified in referralFee, in this case, the feeBps will default to Jupiter Ultra’s default fees.Check the feeBps field
Check the feeBps field
You can configure 
referralFee to be between 50bps to 255bps. The /order response will show the total fee in feeBps field which should be exactly what you specified in referralFee.If the 
referralTokenAccount for the feeMint is not initialized, the order will still return and can be executed without your fees. This is to ensure your user still receives a quote to proceed with the swap.For example, if the feeMint is SOL, but the referralTokenAccount for SOL is not initialized, the order will still return but will be executed without your fees.You can refer to if feeBps tallies with what you specified in referralFee, in this case, the feeBps will default to Jupiter Ultra’s default fees.Token support
Token support
You can now take fees in SPL or Token2022 tokens. As long as you have the referral token account initialized before calling 
/order, and the feeMint is one of the token mints you have initialized for, your fees will apply.| Only initialized for this token mint | feeMint | Are your fees applied? | 
|---|---|---|
| SOL | SOL | Yes | 
| USDC | JupSOL | No | 
| XYZ | USDC | No | 
Enforces routing to Iris and other DEX aggregator routes
Enforces routing to Iris and other DEX aggregator routes
When integrator fees are being added, it defaults routing to Iris and other DEX aggregator routes.JupiterZ does not support integrator fees currently.
Step-by-step
1
Install additional dependencies or if you prefer, you can use the Referral Dashboard, a simple interface to create referral accounts.
2
Create 
referralAccount.3
Create 
referralTokenAccount for each token mint.4
Add 
referralAccount and referralFee to Ultra Swap /order endpoint.5
Sign and send the transaction via Ultra Swap 
/execute endpoint.6
Verify transaction and fees.
Full Code Example
Full Code Example
Dependencies
RPC Connection and Wallet Setup
RPC Connection and Wallet Setup
Set up RPC ConnectionSet up Development Wallet
Solana provides a default RPC endpoint. However, as your application grows, we recommend you to always use your own or provision a 3rd party provider’s RPC endpoint such as Helius or Triton.
You can paste in your private key for testing but this is not recommended for production.
- Either use your private key in the project directly, you can do it via a .envfile.
- Or set up your private key in the Solana CLI.
Create referralAccount
- You should only need to create the referral account once.
- After this step, you need to create the referral token accounts for each token mint.
Create referralTokenAccount
- You need to create the referralAccountfirst.
- You need to create a referralTokenAccountfor each token mint you want to collect fees in.
- We don’t recommend creating a token account for every token mint, as it costs rent and most tokens might not be valuable, instead created token accounts for top mints to begin with (you can always add more later).
Usage in Ultra Swap
- After creating the necessary accounts, you can now add the referralAccountandreferralFeeto the Ultra Swap/orderendpoint.
- From the order response, you should see the feeMintfield, which is the token mint we will collect the fees in for that particular order.
- From the order response, you should see the feeBpsfield, which is the total fee in bps, which should be exactly what you specified inreferralFee.
- Then, you can sign and send the transaction via the Ultra Swap /executeendpoint.
If the 
referralTokenAccount for the feeMint is not initialized, the order will still return and can be executed without your fees. This is to ensure your user still receives a quote to proceed with the swap.For example, if the feeMint is SOL, but the referralTokenAccount for SOL is not initialized, the order will still return but will be executed without your fees.You can refer to if feeBps tallies with what you specified in referralFee, in this case, the feeBps will default to Jupiter Ultra’s default fees.Claim All Fees
- The claimAllV2method will return a list of transactions to claim all fees and are batched by 5 claims for each transaction.
- The code signs and sends the transactions one by one - you can also Jito Bundle to send multiple at once, if preferred.
- When claiming fees, the transaction will include the transfer of the fees to both your referral account and Jupiter’s (20% of your integrator fees).
