status field on the parlay (RFQ) object:
A parlay can also end at cancelled or expired before it’s funded.
Place a parlay
1
Open a quote request
Add 2–5 legs and a bet amount. Each leg names a market and a side (Totalis validates each market, applies leg-exclusion rules (correlated legs can’t be combined), and broadcasts the request to market makers. See Create quote request for the full field reference.The amount actually locked is your bet amount minus a 1% taker fee, charged upfront when you place the trade — so don’t expect the locked stake to exactly match
yes / no). The market_ticker is venue-specific:- Kalshi — the market ticker, e.g.
KXBTC-25FEB07-T100000. - Polymarket — the
condition_id(the0x-prefixed hex string), not the slug or question id. Both sides of a binary share onecondition_id, distinguished byside.
bet_amount.2
Market makers quote it
Makers stream the request and submit quotes with payout odds. You watch them arrive live on the quote-request stream. Each quote carries:
user_cost— your stake (the bet amount).total_payout—bet_amount × payout_odds, what you receive if every leg wins.payout_odds— the multiple on your stake.book_seq— the SSE event’s sequence number, carried alongside the quote. You’ll need it later to prove your pricing was current when you commit.
3
Commit the best quote
Accept a quote to lock the trade. Totalis selects the best still-valid quote for the version you saw and creates the parlay with that quote already accepted.The response returns the real
rfq_id, the accepted quote, and the payout odds. Status: accepted.4
The parlay funds on-chain
The maker confirms, and your stake and the maker’s collateral lock atomically in on-chain Solana vaults. Gas is sponsored — you only ever need USDC.Status moves to
confirmed, then executed once the position is live on-chain. If the maker doesn’t confirm in time, the parlay reopens for other makers (or expires if its window has passed) and your funds are never touched.5
It settles automatically
When every leg’s market has resolved, the position settles:
- All legs win — you receive the full payout (the maker’s collateral, minus a protocol fee on profit).
- Any leg loses — your stake transfers to the maker (minus fee).
settled. Read the outcome and transaction signatures from GET /v1/rfqs/{id}.Closing early (cashout)
Once a parlay is live (executed), you don’t have to wait for settlement — you can close it by accepting a buyback price from the maker that backs it. Your stake is always returned; the buyback amount is the net on top: the maker pays you when you’re in profit, you pay the maker when you’re underwater (gross of a profit fee).
A cashout is its own short-lived request, separate from the parlay’s status:
1
Request a cashout
Read
position_id from the parlay object (GET /v1/rfqs/{id}) once it’s executed — it’s set there and used to open the cashout.2
The maker prices it
The backing maker re-values the position at current odds and either streams a buyback quote or declines (if a leg is already decided). The quote carries the net you’d receive.
3
Commit
cashout object, and the parlay becomes bought_back.Status reference
Thestatus on a parlay (RFQ):
Quotes carry their own status —
withdrawn (the maker pulled it), expired (its validity lapsed), or rejected (you accepted a different quote on the same request).
