Public API
Compute rentals, quotes, workloads, market data, and backtesting use JSON over HTTPS with scoped credentials. Compute endpoints are served from https://compute.itomarkets.com/api/v1. Market data uses https://itomarkets.com/api/v1. Trading is not part of this API for market-data endpoints.
Authentication
Send your key as Authorization: Bearer on every request. 401 means the request never authenticated; 403 means the key lacks the required scope. Generate an ito_* key from Settings in the dashboard. The full value is shown once.
Compute API and CLI
One section covers CLI sign-in, live GPU availability, quotes, rental status, access entitlements, and remote workloads. Use the Ito CLI device-authorization flow to receive an ito_device_* bearer token. Entitlement and workload routes require that device token. Dashboard API keys do not authenticate these device-only routes.
cd cli/ito-compute-clinpm cinpm linkito loginito status/compute/device-authorization/compute/oauth/token/compute/auth/me/compute/auth/revoke/compute/inventory/compute/rfqs/compute/rfqs/{ticketId}/compute/procurement/status/compute/entitlements/{entitlementId}/compute/workloads/compute/workloads/{runId}/compute/workloads/{runId}/cancel/compute/workloads/{runId}/cleanupRate limits
Per-key budgets: 120 requests / minute on GETs, 10 requests / minute on POSTs (including validate and plan. The tier follows the method, not the scope). Responses carry X-RateLimit-* headers; a 429 adds Retry-After.
Responses
Endpoints return the {success, message, data} envelope, except four basket reads (history, chart, metrics, underlyers) which return their payload natively. Each endpoint page states its shape and shows the exact example.
Python SDK
Install the official SDK for typed access to all endpoints. Only dependency is httpx. Automatic retries with exponential backoff on 429/5xx.
pip install ito-marketsfrom ito import ItoClient
client = ItoClient("ito_...") # your key from Settings
# List all baskets with current pricesbaskets = client.baskets.list()for b in baskets["data"]: print(f"{b['id']}: ${b['basket_price']:.2f}")
# Get a single marketmarket = client.markets.get("will-btc-reach-100k")print(market["data"]["title"], market["data"]["last_price"])
# Historical L2 orderbookbook = client.data.orderbook( venue="polymarket", start="2026-06-01T00:00:00Z", end="2026-06-01T01:00:00Z", market="will-btc-reach-100k",)
# Run a backtest (submit + poll to completion)result = client.backtests.run( strategy_id="wsc_crypto_updown_delta_hedged_roll", dataset_id="clickhouse:ito_hot.platform_orderbook_l2", venues=["polymarket"], date_range={"start": "2026-05-01T00:00:00Z", "end": "2026-06-01T00:00:00Z"},)print(f"P&L: ${result['data']['metrics']['pnl_usd']:.2f}")Source and full method reference: ito-markets on PyPI · source on GitHub. The SDK handles auth headers, pagination, typed exceptions (ItoAuthError, ItoRateLimitError, ItoNotFoundError), and can be used as a context manager.
Endpoints
curl "https://itomarkets.com/api/v1/baskets" \ -H "Authorization: Bearer $ITO_API_KEY"// 401: missing or invalid key{ "success": false, "message": "Invalid API key"}
// 403: valid key, missing scope{ "success": false, "message": "API key lacks required scope: backtests:write"}
// 429: budget exhausted (Retry-After header set){ "success": false, "message": "Rate limit exceeded: 10 per 1 minute. ..."}// Standard envelope (meta on paginated lists){ "success": true, "message": "Success", "data": [ ... ], "meta": { "page": 1, "per_page": 20, "total": 38, "pages": 2 }}