Unhosted AI Developer Portal

Build on Unhosted AI: the Intelligence API (derived token, trader, wallet and market intelligence behind an API key), the copy-trading SDK for wallets and terminals, the OpenAPI specification, and the docs. Self-serve API keys, sandbox included.

The Intelligence API serves derived intelligence — scores, gates, verdicts and one-sentence rationales computed by our own engine over live on-chain data — never raw provider rows. Base URL https://api.unhosted.ai/v1 (canonical) or https://www.unhosted.ai/api/v1 (legacy, same deployment). Every endpoint is described in the OpenAPI spec and the JSON catalog, and every error is JSON.

  • OpenAPI 3.0 specall operations with unique operationIds, typed parameters and response schemas — import it into Swagger UI, Postman or an LLM tool-calling runtime
  • Endpoint catalog (JSON)public, no key: every endpoint with inputs, outputs and unit cost
  • API catalog (RFC 9727)machine-readable index of our APIs (application/linkset+json)
  • Get a keyself-serve partner console: sandbox org, API keys, usage, webhooks
  • Documentationproduct, wallet SDK and copy-trading docs (Markdown versions at docs.unhosted.com/llm/…)
  • llms.txtsite overview for AI agents, including when to use Unhosted

Get an API key

  1. Sign in at the partner console with a wallet or Google/email — no invite, no approval step.
  2. Create your sandbox org, open Keys and mint a key. Sandbox keys start with key_test_ and run against real leader data in paper mode: real gates, real direction and notional, executions recorded as skipped/paper, structurally unable to reach mainnet.
  3. Go live when your flows are proven: the org owner opens Settings → Go live, reads the pricing and terms and accepts. Every key_test_ key is revoked at that moment — mint key_live_ keys from the Keys panel and redeploy with those.

Keys are hashed at rest and shown exactly once. Revocation takes effect within the key cache TTL (seconds, not a deploy). For white-glove onboarding or questions, book an integration call or email hi@unhosted.ai.

Authentication, plans and rate limits

Send the key as Authorization: Bearer <key> or x-api-key: <key>. Execution routes (/v1/copy/agent/*) additionally carry the end user's wallet authorization — X-Wallet-Address, X-Wallet-Signature (EIP-191 personal_sign of the canonical agent-API message) and X-Auth-Timestamp (valid for 300 s) — because two parties are involved: the partner who is billed and the user whose funds move. The copytrading SDK builds those headers for you (createWalletAuthHeaders).

PlanRequests per minuteNotes
sandbox60paper mode, key_test_ keys
free30evaluation
pro300production
enterprise2000custom contracts

Limits are enforced per key and reported on every response as X-RateLimit-Limit / X-RateLimit-Remaining; exceeding them returns 429 {"error":"rate_limited"}. A global daily data budget protects the shared provider quota: when it is exhausted the API returns 503 {"error":"capacity"} with Retry-After.

Metering and usage

Calls are billed in weighted units, not requests: a market-regime read costs 1 unit, a smart-money radar crawl 8, the whole token dossier (/v1/token-overview) 19. The cost of every endpoint is in the catalog (cost) and in the OpenAPI spec (x-cost-units); each response carries X-Usage-Units. Only successful calls are billed. GET /v1/usage returns your own units billed today and the service's remaining data budget — it is never rate limited, so you can always read the meter.

Quickstart

Market regime (GET, 1 unit) and a full token profile (POST, 1 unit):

export UNHOSTED_API_KEY=key_test_...

curl -s "https://api.unhosted.ai/v1/market-regime?chain=eth" \
  -H "Authorization: Bearer $UNHOSTED_API_KEY"

curl -s -X POST "https://api.unhosted.ai/v1/token-intel" \
  -H "Authorization: Bearer $UNHOSTED_API_KEY" \
  -H "content-type: application/json" \
  -d '{"chain":"eth","token":"0x6982508145454ce325ddbe47a25d4ec3d2311933"}'

Responses are derived objects — bands, scores, verdicts — e.g. { "verdict": "...", "risk": { ... }, "momentum": { ... }, "entry": { ... } }. The verdict vocabulary is fixed and load-bearing across the API: mirror-worthy, watch, avoid, unrated — and unrated means unknown, never bad.

  • Token: /v1/token-intel, /v1/token-risk, /v1/token-signal, /v1/token-holders-insight, /v1/token-narrative, /v1/token-price-action, /v1/smart-money-flow, /v1/exit-risk, /v1/token-overview (the whole dossier in one call).
  • Market: /v1/market-regime, /v1/market-movers, /v1/robinhood-movers, /v1/smart-money-radar, /v1/conviction-board, /v1/trader-board.
  • Trader and wallet: /v1/trader-score, /v1/trader-style, /v1/trader-edge, /v1/trader-leaderboard, /v1/wallet-health, /v1/wallet-analyze, /v1/wallet-pnl-quality, /v1/wallet-trades, /v1/portfolio-risk, /v1/wallet-overview (the whole trader page in one call).
  • Copy trading: /v1/copy-decision, /v1/copy-plan, /v1/copy-simulate, /v1/copy-overlap, /v1/perp-wallet, /v1/prediction-wallet, /v1/copy/top-traders, /v1/copy/spot-leaders, /v1/copy/perp-leaders, /v1/copy/prediction-leaders, /v1/copy/strategies, execution relay /v1/copy/agent/*.
  • Track records: /v1/signals/track-record, /v1/traders/track-record, /v1/perp-track-record, /v1/prediction-track-record — did the grades carry signal? Misses included.

Errors

Every error is JSON with a stable machine-readable code and a human sentence: { "error": "invalid_api_key", "detail": "Provide a valid key via Authorization: Bearer or x-api-key." }. Codes: invalid_api_key (401), wallet_auth_required / wallet_auth_expired (401), invalid_address, invalid_chain, unknown_param (400), venue_not_entitled (403), not_found / not_a_token (404), rate_limited (429), capacity, gateway_unconfigured, execution_unavailable (503), internal (500). Unknown API paths return 404 {"error":"not_found", "hint": ..., "docs": ...} rather than an HTML page. The full Error schema is in the OpenAPI spec.

Copy-trading SDK

Embeddable, non-custodial copy trading for wallets, dapps and exchanges: your users pick a graded leader, set risk limits, sign once (perps) or send one transaction (spot), and the backend mirrors the leader's trades within those limits. Venues: EVM spot via ERC-7579 smart sessions (spend cap, hard expiry), Hyperliquid perps via revocable agent keys, Polymarket predictions (validating). The backend can submit trades and can never withdraw.

npm install copytrading

For AI agents

  • llms.txt describes the site, says when Unhosted is the right tool, and links the Markdown version of every key page.
  • Key pages negotiate content: request them with Accept: text/markdown (RFC 9110) and you get text/markdown; charset=utf-8 with Vary: Accept; or fetch the .md sibling directly (/developers.md, /index.md). Unknown URLs return a Markdown 404 that lists where to look next.
  • Unknown API paths return JSON errors; every Intelligence endpoint has a unique OpenAPI operationId, typed inputs and a response schema, so the spec can be loaded as a tool definition as-is.
  • /.well-known/api-catalog (RFC 9727) points at the spec and the docs.

Support