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 building | Recipe | Core calls |
|---|---|---|
| Leaderboard / "who to copy" | Leaderboard screen | GET /v1/trader-board Β· POST /v1/trader-leaderboard Β· GET /v1/copy/strategies |
| Wallet / trader profile | Trader page | POST /v1/wallet-overview (bundle) Β· POST /v1/perp-wallet |
| Holdings / portfolio view | Portfolio page | POST /v1/portfolio-overview (bundle) |
| Token detail | Token page | POST /v1/token-overview (bundle) |
| Copy activation + feed | Copy flow | the 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.
Intelligence API access is included with your partner key β there is no
per-call bill. The X-Usage-Units header (bundles count as the sum of their
components: wallet-overview = 14, portfolio-overview = 5, token-overview
= 19) exists for fair-use rate limiting and so you can see what your
integration consumes, not for invoicing.
Three rules that apply everywhere
- Render the reasons. Every assessment carries plain-language
reasons(leaders), acoveragenote (thin perp profiles), or a skipreason(simulations). The reasons are the product β a bare grade is a number, a graded verdict with its why is intelligence. - A thin profile is an answer, not an error.
winRate: nullwithcoverage.reason: 'account-too-new'means "too new to judge", not "broken". Render the engine'scoverage.noteverbatim instead of an empty state. - 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.