Skip to main content
Any Totalis account can make markets. You need a maker account opened from your Totalis wallet, USDC in its maker vault to back what you fill, a little HYPE for gas, a key for the maker, and a bot that holds the maker channel open. You see every RFQ, quote the ones you want, and earn the difference between what you quote and what the outcomes are worth. An RFQ arrives, the maker quotes a payout, signs a confirm when the taker accepts, backs the position, and the position settles An RFQ arrives, the maker quotes a payout, signs a confirm when the taker accepts, backs the position, and the position settles

How it works

1

Receive RFQs

Subscribe to the maker channel. The snapshot holds every open RFQ, and RFQ_CREATED adds each new one: its legs, stake and taker. The RFQ carries no price. Price each leg from your own Hyperliquid market data.
2

Quote

Create a quote with the payout you will pay if every leg wins. It is unsigned and reserves nothing. Quote again to replace it, or cancel it.
3

Confirm the fill

When a taker accepts, you get QUOTE_ACCEPTED with the exact terms and a deadline seconds away. Sign the terms and confirm, or decline. Totalis puts the trade on-chain. A missed deadline fills nothing.
4

Back the position

The taker’s net stake moves into your maker vault and the position’s worst case locks. Totalis settles it when the markets resolve: you keep the stake, or pay the winnings.

Endpoints

Set up

At hip4.totalis.trade/mm:
  1. Under Your wallet, add a little HYPE for gas and the USDC you will quote with.
  2. Choose Create maker account: one transaction from your wallet. Your maker_id is assigned then. A wallet opens one maker.
  3. Choose Fund vault to move USDC into the maker vault.
  4. Create a key for the maker with the maker scopes.
  5. Run your bot with that key, your maker_id and your wallet key.
Makers are never sponsored. Your wallet pays the gas for every maker vault call, in HYPE.

Quote

Quoting rules

  • Price the net stake. The taker fee comes off stake before it reaches you, so you risk payout - net stake.
  • Your newest quote on an RFQ replaces your last one. The taker sees QUOTE_REMOVED for the old one.
  • A quote leaves the RFQ at its expiry, and the RFQ closes at expires_at. Neither sends an event. The windows, and how close to expiry a quote stops being shown, are on Limits.
  • A quote reserves no collateral. Capacity is checked when you confirm, so quote only what free_after_pending covers (When collateral is checked).
  • A 409 with RFQ_NOT_OPEN or RFQ_GENERATION_STALE means the RFQ moved on. Drop it, or re-read it and quote again.

Cancel a quote

CANCELLED or REPLACED means it is off the RFQ. 409 with ACCEPTED means a taker already accepted it: answer the acceptance.

Confirm

QUOTE_ACCEPTED carries the exact terms, named by kind. Check them against what you quoted, then sign them (entry as Quote, sell_back as SellBack, transfer as CashoutTransfer) and answer with no Idempotency-Key:
  • { "decision": "DECLINE" } needs no signature. Decline when your price or your capital moved.
  • The confirm deadline is on Limits. It is short, so sign on a hot path: keep the deployment and your signer loaded, and answer before any slow work.
  • A lost response: resend the same answer. Until you know the outcome, treat the quote as filled.
  • QUOTE_CAPACITY_EXCEEDED means your capital cannot cover this fill now. Nothing filled.

After a restart

Subscribe from your saved cursor. The maker snapshot’s acceptances holds every acceptance still waiting for you, earliest deadline first, and List acceptances pages the rest. Answer each one before its deadline. Keep the quote_ids you created in durable storage, so a restarted bot confirms only terms it published.

Profit and loss

Read the positions you back with List positions and your maker key. settlement_kind and each leg’s result are on Trading.

Collateral

Each fill locks the position’s worst case in your maker vault: payout - net stake. Positions that cannot all win together can share that collateral once you run a collateral reduction. Maker collateral has every capital field, how each step moves it, and how to reduce it.

Cash-outs

A taker can sell an open position before it settles. Totalis opens a cash-out RFQ to every maker: RFQ_CREATED with kind: CASHOUT, the position_id, its owner and the backing maker_id. Price the position at the RFQ’s decision_block and sign its leg_state unchanged. Keep your own vault balance at zero to sell back only. A cash-out quote’s expiry window is on Limits.

Your identity

To keep your wallet key off the bot, set a signer that holds no funds with setQuoteSigner. The zero address stops all fills at once. See Move maker funds.

Maker collateral

Capital, how fills move it, and collateral reduction.

Real time

Hold the maker channel and resume it without missing a fill.

TypeScript SDK

createMaker: quote, confirm and reduce collateral in a few lines.

Errors

Every code, and which to retry.
To provide liquidity at scale, email founders@totalis.trade.