Skip to main content
A parlay starts as a quote request: your legs, priced live by market makers. It becomes a real position once you commit to a quote, the maker confirms, and it funds on chain, all within seconds. From there it settles automatically when the underlying markets resolve, or you close it early.

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.
How a parlay works: your slip, makers quote, one position, then it settles or you cash out early How a parlay works: your slip, makers quote, one position, then it settles or you cash out early

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 (yes or no). The market_ticker is venue specific:
  • Kalshi: the market ticker, for example KXBTC-25FEB07-T100000.
  • Polymarket: the condition_id, the 0x prefixed hex string. Not the slug and not the question id. Both sides of a binary share one condition_id and are told apart by 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.
Odds apply to your bet amount minus a 1% taker fee. A 25 USDC bet carries a 24.75 net stake, so do not expect the stake to match bet_amount. The fee locks with the stake and comes back to you if the parlay is voided.
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.
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 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.
Status becomes 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). Its status 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:

Constraints

Leg counts, bet range, odds range, and every timing window live on Limits and fees.