Build Your Integration

You are not integrating endpoints, you are building screens. Each recipe below lists exactly what one screen calls β€” the composite bundle that paints it in one request, the single endpoints when you want pieces Γ  la carte, the response fields worth rendering, and the UX rules that make the data read as intelligence instead of noise.

These are the same recipes our own Alpha Terminal and copy-trading surface run on β€” every call here is dogfooded in production. The whole map also exists as running code: the copytrading npm package ships examples/intel-screens.ts β€” one CI-typechecked function per screen, ready to wire to your components and redesign.

The screen β†’ calls map

Screen you are buildingRecipeCore calls
Leaderboard / "who to copy"Leaderboard screenGET /v1/trader-board Β· POST /v1/trader-leaderboard Β· GET /v1/copy/strategies
Wallet / trader profileTrader pagePOST /v1/wallet-overview (bundle) Β· POST /v1/perp-wallet
Holdings / portfolio viewPortfolio pagePOST /v1/portfolio-overview (bundle)
Token detailToken pagePOST /v1/token-overview (bundle)
Copy activation + feedCopy flowthe copytrading SDK + POST /v1/copy-plan / perp-copy-decision

How the API is shaped

Base URL https://www.unhosted.ai/api/v1, key-gated (Authorization: Bearer key_live_…). Every response is derived β€” bands, scores, verdicts and reasons computed by our engine β€” never raw provider rows, so nothing you render redistributes an upstream feed.

Bundles are the singles, composed. wallet-overview and portfolio-overview fan out to the same handlers the single endpoints run β€” in-process, one implementation β€” so a bundle slot is byte-for-byte what the single endpoint would have returned. Start with the bundle; fall back to singles only when you render a subset and want the cheaper meter.

Three rules that apply everywhere

  1. Render the reasons. Every assessment carries plain-language reasons (leaders), a coverage note (thin perp profiles), or a skip reason (simulations). The reasons are the product β€” a bare grade is a number, a graded verdict with its why is intelligence.
  2. A thin profile is an answer, not an error. winRate: null with coverage.reason: 'account-too-new' means "too new to judge", not "broken". Render the engine's coverage.note verbatim instead of an empty state.
  3. Show the negative space. Skipped copies (status: 'skipped' + skipReason), gated-out leaders, simulated: false β€” surfacing why something didn't happen is what separates protection from a silent gap that reads as a bug.

Was this page helpful?