Skip to Content
LandedFXDocs

Vaults

Let your users earn dollar yield in USDC, with one confirmation and no custody.

The LandedFX Dollar vault is an ERC-4626 vault on Base, with the id dollar. Your users deposit USDC, get vault shares, and earn what the vault's strategies earn, which today is dollar lending through Spark. Naira carry isn't part of this vault. You build the transactions with LandedFX, and your user's wallet or your custodian signs them. LandedFX never holds keys or funds.

No API key is needed. If you send one, deposits you build are attributed to you.

Deposit in one confirmation

curl -X POST https://api.landedfx.com/api/v1/vaults/dollar/transactions \
  -H "content-type: application/json" \
  -d '{ "action": "deposit", "account": "0xUserWallet", "amount": "1000" }'

You get back calls, already simulated against the chain:

WalletHow to send itUser confirms
Smart wallets (Privy, Coinbase Smart Wallet, Safe) and EIP-5792 walletsSend calls as one batch (wallet_sendCalls)Once
Plain wallets (MetaMask and others)Sign permit.typedData, then send permit.thenCall with the signatureOnce
Custodians (Fireblocks, Copper, Anchorage)Submit each call as a contract call from the vault accountPer your policy

If a call would fail, you get a 422 that says why ("the vault can take 40,000 USDC more right now") instead of a failed transaction.

Deposit from any token, on any chain

Your user holds USDT on Tron, USDC on Solana, or ETH on Ethereum? One origin-chain transaction swaps, bridges and deposits it.

curl -X POST https://api.landedfx.com/api/v1/vaults/dollar/deposit-routes \
  -H "content-type: application/json" \
  -d '{ "from": "USDT:tron", "account": "TUserTronAddress", "receiver": "0xUserBaseWallet", "amount": "250" }'

amount is the USDC that lands in the vault; pay tells the user what that costs in their token. Sign the returned steps in order on the origin chain. Relay runs the swap, the bridge and the deposit on Base, and pays the gas there.

Live quotes for a 250 USDC deposit (November 2026):

Paying withPaysFeesSignatures
USDC on Arbitrum250.06 USDC$0.06approve + deposit
USDC on Solana250.09 USDC$0.091
USDT on Ethereum250.36 USDT$0.12approve + deposit
ETH on Ethereum0.112 ETH$0.331
USDT on BNB Chain251.34 USDT$1.06approve + deposit
USDT on Tron250.46 USDT$2.01approve + deposit

The approval is only needed the first time a wallet uses that token. Bitcoin isn't routable straight into the vault yet: swap it to USDC on Base with POST /swap/quotes first.

Withdraw everything

{ "action": "redeem", "account": "0xUserWallet", "amount": "max" }

The vault pulls from its strategies as needed. Withdrawals are never paused.

Read the vault and a position

EndpointReturns
GET /vaultsEvery vault with TVL, share price, liquidity, fees and allocations
GET /vaults/{id}One vault, live from the chain
GET /vaults/{id}/accounts/{wallet}Shares, their value, what the wallet can withdraw now, and its USDC balance
GET /vaults/{id}/history?days=30Share price and TVL over time, with realised APY

What the vault guarantees

The rules live in the contract, not in our servers:

  • Depositors can always withdraw. Pausing stops new deposits only.
  • Funds move only between the vault and approved strategies, and strategies can only return funds to the vault.
  • New strategies, higher caps and higher fees wait out a timelock before they apply.
  • Fees are capped in code at 2% a year and 20% of gains above the high-water mark.

Naira carry is in testing as a separate, opt-in vault and isn't open to deposits. To see how it's priced, see Naira carry.

On this page