Skip to main content
You fund your account by sending USDC to your Solana wallet address. Once it lands, you are ready to trade.

At a glance

  • Send native Solana USDC only. Placing a parlay moves the stake into your vault by itself, so there is no separate deposit step.
  • Enable trading once, in the app. The API can only report whether it is on.
  • Network fees are sponsored, so your wallet only needs USDC. The one exception is a small rent charge, taken in USDC, on a first withdrawal to a new address.
  • One withdraw call reaches your wallet and your vault’s free balance together.
Send USDC, enable trading once, trade with the stake moving into the vault by itself, withdraw any time Send USDC, enable trading once, trade with the stake moving into the vault by itself, withdraw any time

Send USDC to your wallet

To send USDC directly:
1

Get your wallet address

GET /v1/wallet returns your Solana wallet address and current balances.
The same address is under Deposit in the app, as a QR code and a copy button. The dialog watches the chain and updates as soon as USDC lands.
The Deposit dialog showing a USDC on Solana address with a QR code, a warning to send only USDC on Solana, and options to pay by card or bridge from another chain

Deposit in the app: the wallet address, the chain warning, and the card and bridge options

2

Send native USDC on Solana

Transfer USDC to that address from any wallet or exchange that supports Solana (SPL) tokens. The chain, token, and mint are on Limits and fees.
Send only native Solana USDC at the documented mint. Bridged USDC, other tokens, and transfers on another chain are not credited and may be unrecoverable.
3

Confirm it landed

Poll GET /v1/wallet until the balance reflects your transfer. Then enable trading once, and you are ready to place parlays.

Enable trading

Enable trading before you place a parlay or withdraw. This delegates signing: you let Totalis sign transactions on your behalf inside a secure enclave, the protected environment that holds your wallet’s private key. Vaults and custody covers what that permission does and does not allow.
You enable trading by approving a consent dialog in the app, once. The REST API cannot grant it. POST /v1/wallet/enable-trading checks that delegation is in place and returns its status. It does not grant the permission. On older accounts it also credits any pending welcome airdrop.
Check the current state with GET /v1/wallet/delegation-status.

How your balance is used

Your money sits in two places: your wallet and your vault. You do not have to deposit before you trade. Trade eligibility is checked against your combined wallet and vault free balance. If the total covers your bet amount, the trade goes through. Two calls move money between the two on purpose: Field by field definitions of each balance are in the Glossary.

Withdrawing

Use POST /v1/wallet/withdraw with a recipient and amount.

Where the money comes from

One call reaches everything that is not locked in an open position. The app shows the withdrawable total as Available to withdraw and the locked part as In open positions. If the amount exceeds your wallet balance, Totalis first moves the shortfall from your vault to your wallet. It waits for that transaction to confirm, then sends the external transfer. The response then carries vault_signature and vault_amount beside the transfer signature.

Rules

  • Trading must be enabled. Withdrawing uses the same delegation as placing a parlay. If it has lapsed the call returns 409, and re-enabling trading in the app restores it.
  • The key needs the funds:withdraw scope, the highest risk scope on a key. See Authentication.
  • recipient must be a regular Solana wallet address. Token accounts, program ids, and derived addresses are rejected, because USDC sent to them is unrecoverable. Your own wallet address is rejected too.
  • The minimum is one base unit, 0.000001 USDC. The maximum is your wallet plus vault free balance. A larger amount returns 400 with the available breakdown in the message.
  • If the recipient has never held USDC, Totalis creates its token account and fronts the rent, about 0.002 SOL. That rent is billed back in USDC out of the withdrawal at the live SOL price: about 0.29 USDC on 11 September 2026. The response reports it as chargeback_usdc, what arrived as delivered_usdc, and sets recipient_ata_created. An amount too small to cover it is rejected. So is the call if the SOL price is briefly unavailable. Retry in a moment.
  • Idempotency-Key is honored and must be a UUID; anything else returns 400. A repeat with the same key within 24 hours replays the original success without moving funds again. The vault deposit and withdraw calls follow the same rule.
  • The call has its own per-account rate limit, listed on Limits and fees.

When it fails

The partial case returns 502, not 200, on purpose. An idempotent retry against a 502 runs again, where a cached 200 would replay a half-finished result.

Withdrawing in the app

Withdraw sits next to Deposit on the portfolio page and offers two routes. The API endpoint above covers only the first.
The Withdraw dialog offering Send to a Solana wallet and Withdraw to another chain

Send to a Solana wallet is the same operation as the API call. The second route bridges through Unifold.

The Withdraw USDC form showing the amount available to withdraw, a recipient Solana address field, and an amount field

Send to a Solana wallet: the free balance, a recipient address, and an amount with a Max shortcut

The Unifold cash out dialog with token, chain, recipient address, amount with a 3 USD minimum, and processing time

Withdraw to another chain opens Unifold, which sends your funds on to Ethereum, Bitcoin and other chains. It has its own minimum and processing time.