At a glance
- A parlay is 2 to 5 legs on one bet of 1 to 100 USDC, priced live by competing market makers.
- Requesting quotes holds nothing. From commit, your bet is held against your balance. It moves on chain once, when the maker confirms.
- The position then goes live on chain and settles by itself when the last market resolves.
- You can close a live position early through a cashout auction of about 10 seconds.


Place a parlay
1
Open a quote request
Add 2 to 5 legs and a bet amount. Each leg names a market and a side (
Totalis checks each market, rejects correlated legs (markets whose exclusion rules conflict),
and sends the request to market makers. The full field reference is on
Create quote request, and the constraints are on
Limits and fees.
yes or no). The
market_ticker is venue specific:- Kalshi: the market ticker, for example
KXBTC-25FEB07-T100000. - Polymarket: the
condition_id, the0xprefixed hex string. Not the slug and not the question id. Both sides of a binary share onecondition_idand are told apart byside.
The call
The call
2
Market makers quote it
Makers receive the request and submit quotes with payout odds. You watch them arrive on the
quote request stream. The best one is always on top.
What a quote carries
What a quote carries
3
Commit the best quote
Accept a quote to lock the trade. Totalis selects the best still valid quote for the version of
the request you saw, and creates the parlay with that quote already accepted.
The call waits the few seconds it takes the maker to confirm. It then returns the parlay’s real
The call
The call
rfq_id, the accepted quote, and the payout odds, with the parlay already confirmed.
The response’s own status, committed, is the quote request’s.If the commit fails, no funds moved and no trade happened. When the maker misses the
confirmation window you get 409 with reason mm_confirmation_timeout, and your quote request
stays open, so you can commit the next best quote. The rejection reasons are on
Errors.4
The parlay funds on-chain
The maker confirms, and your stake and the maker’s collateral lock together, in one transaction,
in on-chain Solana vaults. Network fees are sponsored, so you only
ever need USDC.Status moves to
confirmed, then executed once the position is live on chain.5
It settles automatically
The position settles as soon as the result is decided: when any leg loses, or when every leg has
resolved.
- Every leg wins. You receive the full payout,
total_payout, minus the profit fee. - Any leg loses. Your stake transfers to the maker, minus the fee on their profit.
- A leg is voided. The whole position is cancelled and both sides’ collateral is released. You get your full bet back, taker fee included, and nobody wins or loses. If a leg loses before any void is known, the position has already settled as a loss.
settled. Read the outcome and transaction signatures from
GET /v1/rfqs/{id}.Closing early
You can leave a live parlay before settlement. Totalis runs a short auction among market makers. You see the best all-in price live and accept it or not. You are never filled at a price you did not see. Early cashout has the steps and the two ways an auction can resolve.Status reference
In the API, a parlay is called an RFQ (request for quote). Itsstatus field, returned by
GET /v1/rfqs/{id}, takes these values:
The enum also contains
open and quoted. They belong to an older flow. A parlay placed through a
quote request is created at accepted and never shows them.
Each quote has its own status:

