Skip to main content

At a glance

  • 2 to 5 legs, 1 to 100 USDC per bet, payout odds between 1.0001 and 1000.
  • Two fees, both 1%: a taker fee on the bet, and a profit fee on the winner’s profit at settlement. A 25 USDC bet at 4.0 odds pays 98.2575 (98.26 rounded) if every leg wins.
  • Odds apply to the net stake after the taker fee, never to the gross bet.
  • Every expiring object carries its own timestamp. Honor it over any default on this page.

Parlay construction

Correlated legs are rejected. To avoid the rejection, read each market’s exclusion_keys from List markets and check for overlap before you create the request.

Timing

Do not hardcode these defaults. They are configurable. Every object that expires carries its own expires_at or valid_until timestamp, and that timestamp is what counts.
If the maker misses the confirmation window, the commit returns 409 with reason mm_confirmation_timeout and the maker’s id in failed_mm_id. Nothing moves and your quote request stays open, so you can commit the next best quote, or leave that maker out with exclude_mm_ids.

Rate limits

Each route draws from one of three buckets. The exact route prefixes:
  • Public: /markets*, /v1/markets*, /referral*.
  • Quote service: /v1/quote-requests*, /v1/cashout-requests*, /v1/mm/quote-requests*, /v1/mm/cashout-requests*.
  • Authenticated: everything else under /v1/*, plus /app/*, /rfqs*, /parlay-shares*, and the flat /mm/quotes* and /mm/positions* aliases. They all draw down the same 300, including the maker reads at /v1/mm/quotes and /v1/mm/positions.
These calls move money and carry their own per-account cap, counted on top of the shared 300: When you size a client:
  • Market reads and quote service calls do not draw down your authenticated budget.
  • Sending an API key to a public read does not raise its limit. Those routes never resolve the key.
  • Per-IP buckets count the source IP, not the key. A market maker fleet behind one NAT shares one 100 / minute market-read budget and one quote service budget across every process and key.
Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. A 429 carries a Retry-After header, in seconds. Main API routes also put it in error.retry_after; quote service routes send only the header. See Errors.
X-RateLimit-Limit reports the ceiling that applied, not the bucket. Two routes can both report 100 from different buckets. Watch X-RateLimit-Remaining to tell them apart.

Fees

Totalis charges two fees, at different times and on different bases. The taker fee comes off first. Odds apply to what remains, never to your gross bet.
The field names are defined in the Glossary. A 25 USDC bet: 1% taker fee, 24.75 net stake, 4.0 odds, 99 payout, 98.26 received after the 1% profit fee A 25 USDC bet: 1% taker fee, 24.75 net stake, 4.0 odds, 99 payout, 98.26 received after the 1% profit fee Example: you bet 25 USDC and a maker quotes 4.0 payout odds. Amounts are in USDC.
The fee rate is fixed on the position when it is created. Settlement uses that rate, even if the rate changes while the position is live.

Fees on an early exit

An early cashout is a settlement, not a refund. The bid you accept is one all-in amount with the profit fee already included. No separate fee is deducted, and you pay no second taker fee for leaving.

Referral share

You earn a USDC share of the trading fees generated by traders you refer. The rate, claim minimum and accrual rules are on Referrals.

Network

Send only native Solana USDC at the mint above. Bridged USDC, other tokens, and transfers on another chain are not credited and may be unrecoverable.