Skip to main content
The Totalis API is REST over HTTPS with JSON bodies, in snake_case. It adds Server-Sent Events (SSE) for live quote pricing and a WebSocket for post-trade events.

Base URL

Try it without a key

Market data is public:

Authentication

Send your API key in the X-API-Key header on every authenticated request:
The web dashboard authenticates with Privy instead, sending Authorization: Bearer <jwt>. Either scheme works on any authenticated endpoint. Minting a new API key (POST /v1/api-keys) requires a Privy JWT or a key with the keys:manage scope. Every key is scoped. The scope catalog is on Authentication.

Response envelope

Successful responses wrap the resource in data:
List endpoints add cursor-based pagination in meta:
To page, pass the previous response’s meta.cursor as ?cursor=. Cursors are opaque, so do not parse or build them.

Units

Any field whose name ends in _micro is an integer of microUSDC, where 1000000 equals 1.00 USDC. Every other money field is a decimal USDC number. Both conventions appear in the same payload on the cashout surface.
Market prices are decimal probabilities from 0 to 1 on every venue. The full unit table is in the Glossary.

Errors

Every error, on every endpoint, has the same shape:
Branch on error.code, never on error.message. Codes, rejection reasons, and retry guidance are on Errors.

Rate limits

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. The per-minute limits are on Limits and fees.

Endpoint groups

Markets

Browse prediction markets across Kalshi and Polymarket. Public.

Quote service

Open a quote request, stream live pricing, and commit the best quote.

Parlays

List your parlays and read settlement detail.

Funds and vault

Balances, portfolio, P&L, and withdrawals.

Webhooks

Configure signed event delivery.

Market maker

Stream quote requests, submit quotes, and confirm trades.

Errors

Every code and rejection reason, and which to retry.

Changelog

Endpoints added, retired, and renamed.