Skip to main content
Your users trade with their own wallet. The wallet is the Totalis account: it signs in once, then signs its own bets, cash-outs and withdrawals. Totalis never holds the key, and you never hold the funds.
The SDK is private: see Get access. You need a server key, a browser key, your registered origins and your partner slug, all from the same page. The SDK refuses to send a server key from a browser, and refuses a server key as the browser key. The API refuses an admission that carries an Origin header.

Onboard a user

1

The wallet consents to you, in your frontend

The wallet signs a personal_sign message naming your slug, the wallet, the environment, the chain and an expiry. It authorizes no financial action:
The SDK sets the expiry an hour ahead; lifetimeSeconds changes it, within the limit.
2

Your server admits the wallet

The call is Admit wallet.
3

The wallet signs in

The wallet signs a Sign-In with Ethereum message for this page’s origin. It authorizes no financial action. The SDK checks the message names this origin, wallet and request before the wallet signs it. The first sign-in after admission creates the account.
4

The wallet trades

totalis has the same flows as any account: openPosition, cashOut, withdraw. See Trading, Withdrawals and the SDK.

Which wallets can sign in

The signer is any EIP-1193 provider, viem account or wallet client, or ethers signer. Trade signatures accept ERC-1271, but sign-in does not. A Totalis app user’s wallet is an embedded wallet inside the Totalis app, so they have no wallet to sign in with on your site. To trade through your product they create an API key in the Totalis app, or export their wallet key (Wallet key). An account created in the Totalis app is not admitted by you, so its RFQs are attributed to you only with an origin builder code.

Sessions

The SDK calls Create wallet challenge, Create wallet session and End wallet session. A browser sets Origin itself. Outside a browser, pass origin, one of your registered origins, to signInWithWallet and signOutWallet, and send it as the Origin header on every later call and stream (headers on createTotalis).

Origins and CORS

The API answers CORS from your registered origins. Preflights allow Authorization, Content-Type, Idempotency-Key, traceparent and X-Totalis-Partner, and expose Idempotency-Replayed, Retry-After and X-Request-ID. To add or remove an origin, email founders@totalis.trade.

Funding

Moving cash to HyperCore

An external wallet’s vault cash is not swept to HyperCore in the background. Before a native HyperCore order, move it:
The wallet signs an Exit, and Totalis pays the gas (Create HyperCore exit, Get HyperCore exit). One move at a time per account: another is CORE_MOVE_IN_FLIGHT. returnToCore() moves the wallet’s USDC and its free vault cash back together. The first credit to a HyperCore account that does not exist yet pays Hyperliquid’s activation fee, so it has a higher minimum (Limits).

Withdrawals

Withdrawals and exits to HyperCore are sponsored. For an account that signs in with an external wallet they share one minimum and one hourly count (Limits).

Attribution and revenue share

An account you admit is yours for good. The partner is fixed when the account is created, so a copied browser key cannot move it to another partner. Every RFQ from the account records your account code, whatever credential it uses: its session, or an API key it issued. Its requests spend your share of rate limits. Payouts, reports and other accounts are on Builder codes.

If something is switched off

Accounts in the Totalis app are never affected.

Errors

Every code is on Errors. These come from sign-in, sessions and admission.