Skip to main content
Single endpoint, same shape as EVM / TON. The Solana-specific calldata sits under data.solana. See the Swap Quoting page for the full input parameters.

Native SOL and WSOL

Use this tokenIn / tokenOut value when the user is paying with, or receiving, native SOL from their wallet. Wrapped SOL is the SPL mint So11111111111111111111111111111111111111112. Use the WSOL mint only when the user is intentionally swapping an existing WSOL token account.

Request

Use payerAddress when a central wallet should pay Solana fees / ATA rent for the user. Add closeAuthority when that central wallet should be able to close non-WSOL ATAs created by Mobula during the swap and recover rent later.
  • walletAddress owns the input funds and signs for the swap.
  • payerAddress pays network fees / rent and must also sign when different from walletAddress.
  • closeAuthority only has an effect when payerAddress is provided. It applies to non-WSOL ATAs Mobula creates and leaves open after execution.
  • swapRecipientAddress receives the final output amount. It does not need to sign.
  • swapRecipientAddress keeps walletAddress as the swap taker/authority, then MobulaRouter transfers the final output after fee and slippage checks.
  • swapRecipientAddress requires a Mobula on-chain router route. If the selected route cannot use the router, the quote returns an error.

Response — data.solana

data.solana fields

Multi-lander

Set multiLander=true to receive N candidate transactions sharing a durable nonce. Race them across Jito / Nozomi / 0slot for fastest landing — only one can commit.
Sign every candidate, POST them all to /swap/send in batch mode (candidates: [{lander, signedTransaction}, …]).

Signing

Supported aggregators

Jupiter, KyberSwap, NAOS, Li.Fi — pick one or several via onlyRouters. Per-DEX filtering (Raydium, Orca, Meteora DLMM/Damm, Pump AMM, Whirlpool, …) via onlyProtocols / excludedProtocols.

Limits

  • Blockhash expirylastValidBlockHeight is ~150 slots (60s). Re-quote if the user takes longer than that to sign.
  • Priority budget — use prioritizationFeeLamports with dynamicComputeUnitLimit=true so the CU price is derived from the final compute limit. When bundling with Jito, set jitoTipLamports separately.
  • Address forms — Solana addresses are case-sensitive base58. Don’t lowercase.