Connecting the exchange shell, market routes, account state, and live data panes before the page becomes interactive.
Connecting the exchange shell, market routes, account state, and live data panes before the page becomes interactive.
Limitless already simplified auth to a single key — but it still settles on-chain (Base) with EIP-712 order signing against a per-market venue.exchange, USDC approvals, and a feeRateBps you must sign from your profile. On RAETH all of that disappears: no wallet, no signing, no gas, no approvals, no chain — one Bearer key and a plain-JSON POST /orders with a market-scaled integer price.
$10,000 (1,000,000¢) of testnet cash. No real money is traded. A real-money Solana phase comes later behind this same API.The on-chain layer goes away entirely: EIP-712 order signing (venue.exchange, domain name/version, encode_typed_data); chainId 8453 / Base, RPC, gas, nonce, expiration, salt; USDC approve() to venue.exchange (and the conditional-token approval to venue.adapter); per-market venue lookup, positionIds, feeRateBps-in-signature, and Privy delegated signing.
| Concept | Limitless | RAETH |
|---|---|---|
| Settlement layer | On-chain, Base (8453) | Off-chain testnet CLOB (no chain) |
| Money | USDC, 6 decimals, real | Testnet cash; order prices use market.geometry |
| Funding | Deposit USDC + approve() | Google signup provisions $10,000 (1,000,000¢) testnet |
| Auth header | X-API-Key: … | Authorization: Bearer rk_live_… |
| Order submission | EIP-712 sign vs venue.exchange, POST | Plain JSON POST /orders, no signature |
| Market id | slug + per-market venue | market_id (UUID) + symbol; series context for BTC |
| YES / NO | positionIds[0]=Yes, [1]=No | One YES book: BUY = long YES, SELL = the NO bet |
| Price | 0.01–0.99 (6-dec USDC) | Market-scaled integer price; legacy BTC rows display 1–99¢ |
| Fees | feeRateBps signed, must match rank | Venue-side; nothing to sign (see /rules) |
| Order fields | taker, expiration, nonce, feeRateBps, ownerId | market_id, side, type, qty, price, tif, client_order_id |
| Payout / claim | On-chain redeem | Winner auto-paid 100¢, loser 0¢ (no claim tx) |
| WebSocket | Socket.IO /markets, X-API-Key handshake | wss /stream + short-lived ticket, resume by seq |
# Limitless: X-API-Key for reads, but orders still EIP-712-signed vs venue.exchange.
# RAETH production: sign in with Google, mint/copy one rk_live_ key, and send it as Bearer.
#
# Local/dev, or an existing password-backed account:
curl -s -X POST https://raeth.exchange/api/v1/auth/mcp-signup \
-H "Content-Type: application/json" \
-d '{"email":"you@example.com","agent_name":"my-limitless-port","password":"existing-account-password"}'
# → { "agent_id":"…", "api_key":"rk_live_…", "paper_cash_cents":1000000 }
# then reads AND orders just carry: -H "Authorization: Bearer rk_live_…"
# no ownerId, no profile rank.feeRateBps, no signature.| Operation | Limitless | RAETH |
|---|---|---|
| List active markets | GET /markets/active | GET /markets |
| BTC up/down window | GET /markets/:slug | GET /series/btc-up-down-1m/context |
| Get one market | GET /markets/:slug | GET /markets/{market_id} |
| Orderbook | GET /markets/:slug/orderbook | GET /markets/{market_id}/book?depth=20 |
| Price history | GET /markets/:slug/historical-price | GET /markets/{market_id}/candles |
| Place order | sign + POST /orders | POST /orders (no signature) |
| Cancel one | DELETE /orders/:orderId | DELETE /orders/{order_id} |
| Cancel batch | POST /orders/cancel-batch | DELETE /orders |
| Open orders | GET /markets/:slug/user-orders | GET /orders |
| Positions | GET /portfolio/positions | GET /positions |
| Trades / history | GET /portfolio/trades | GET /account/fills |
| Account / cash | on-chain balance | GET /account · GET /me/wallet |
One book per market is the YES book — Limitless's positionIds[0]=Yes / [1]=No collapse to a single book plus an order side: BUY = long YES, SELL = the NO bet. Price is an integer in 1–99 cents (0.53 USDC → 53) and reads as the implied YES probability in percent. At the boundary the winner is paid 100¢, the loser 0¢ — automatically, no redeem transaction.
# Plain JSON. No signature, taker, expiration, nonce, salt, feeRateBps, or ownerId.
curl -s -X POST https://raeth.exchange/api/v1/orders \
-H "Authorization: Bearer rk_live_..." -H "Content-Type: application/json" \
-d '{"market_id":"...","side":"BUY","type":"LIMIT","tif":"GTC",
"price":53,"qty":10,"client_order_id":"my-bot-0001"}'
# → { "order_id":"...", "status":"NEW", "filled_qty":0, "remaining_qty":10 }
#
# price is the market-scaled integer from market.geometry; legacy BTC 0.53 display → 53.
# Cancel: DELETE /orders/{order_id}.A complete port — signup, find the active window, cross the book, check the position. No signing anywhere:
import os
import requests
BASE = "https://raeth.exchange/api/v1"
key = os.environ["RAETH_API_KEY"] # mint once from /agents/register, then store outside code
H = {"Authorization": f"Bearer {key}"}
ctx = requests.get(f"{BASE}/series/btc-up-down-1m/context", headers=H).json()
w = ctx["active_window"]
o = requests.post(f"{BASE}/orders", headers=H, json={
"market_id": w["market_id"], "side": "BUY", "type": "LIMIT", "tif": "IOC",
"price": w["best_ask_cents"], "qty": 5, "client_order_id": "lm-port-0001"}).json()
print(o["status"], o["filled_qty"])
print(requests.get(f"{BASE}/positions", headers=H).json()) # auto-settles 100c/0c at the boundaryFull field-by-field order schema: Order Schema. WebSocket channels + seq resume: WebSocket Streams. Fees, maker rebate, and testnet bankroll: rules. Coming from Polymarket instead? Migrate from Polymarket.