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 spec — all 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 key — self-serve partner console: sandbox org, API keys, usage, webhooks
- Documentation — product, wallet SDK and copy-trading docs (Markdown versions at docs.unhosted.com/llm/…)
- llms.txt — site overview for AI agents, including when to use Unhosted
Get an API key
- Sign in at the partner console with a wallet or Google/email — no invite, no approval step.
- 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. - 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 — mintkey_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).
| Plan | Requests per minute | Notes |
|---|---|---|
| sandbox | 60 | paper mode, key_test_ keys |
| free | 30 | evaluation |
| pro | 300 | production |
| enterprise | 2000 | custom 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- Complete integration instructions (one Markdown file) — self-contained; written to be pasted into an AI coding agent
- Copy-trading docs — quickstart, venues and custody, recipes
- Webhooks — execution and agent lifecycle events
- Audits — public security reports
- Why partners add it — revenue share, custody model, what you skip building
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 gettext/markdown; charset=utf-8withVary: Accept; or fetch the.mdsibling 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
- hi@unhosted.ai — developer and partner support
- Discord
- Telegram
- X (Twitter) — @UnhostedAI
- Contact — all channels and the postal address
- Changelog — what shipped