Execution analytics for crypto desks
EnsoTrade holds every reachable crypto venue's order book at once, live; prices what an order will actually cost before it is sent; and keeps all of those books for 90 days so any fill can be replayed against exactly what the market was showing at that second.
What this is
Two things a desk cannot get from an exchange, in one API.
Before the order: the cost of the trade you are about to place — priced across every venue at your actual clip size, including the USD→stablecoin conversion nobody else puts in TCA.
After the fill: the book you traded into. An exchange will not rebuild it for you, and it is gone the second the order fills. EnsoTrade persists every priced response and replays it byte-for-byte on request, which turns the price in your report from an assertion into something you can evidence.
Quickstart
The market-state endpoints need no key at all. This works right now, from any terminal:
curl https://www.ensotrade.tech/v1/explain/BTC
Returns a structured read of why the coin is moving, plus a sentence you can quote:
{
"question": "Why is BTC up?",
"signals": {
"price": 71344.4,
"change_24h_pct": 3.3,
"regime": "SHORT_COVERING",
"mechanism": "short covering — price is rising while positions close,
a structurally weaker rally",
"funding_rate_8h_pct": 0.0086,
"open_interest_change_6h_pct": -3.0
},
"source": "EnsoTrade"
}
The priced execution endpoints need a Pro key. With one:
curl -H "Authorization: Bearer $ENSO_KEY" \
"https://www.ensotrade.tech/v1/route/SOL?notional=5000000&side=buy"
Authentication
Pass the key any of three ways. Bearer is preferred.
Authorization: Bearer enso_live_xxxxxxxxxxxx
X-API-Key: enso_live_xxxxxxxxxxxx
?api_key=enso_live_xxxxxxxxxxxx
| Tier | Data | Execution endpoints | How to get one |
|---|---|---|---|
| No key | Live | — | Nothing to do. EXPLAIN, FUNDING, ORDERFLOW, SNAPSHOT, MOVERS are open on purpose. |
| Free | 15-min delayed | WINDOW only | POST /v1/keys/free — instant, no account, no card, no email. |
| Pro | Real-time | All | ensotrade.tech → Account → Developer Access, or ask us for an evaluation key. |
| Institutional | Real-time | All | Dedicated throughput. help@ensotrade.tech |
402 rather than served stale. Do not mint a
free key for those — it will still be refused.
Measurement, not models
Every figure on the execution endpoints is arithmetic on a live book or a descriptive statistic over published history. No fitted coefficients, no regressions, nothing trained. That is a deliberate constraint, and it exists so your desk can reconcile any number we give you against your own fills rather than take it on faith.
It also means features that fail measurement get removed rather than caveated. Two are
currently tombstoned in the API and return 410 Gone with the reason attached —
VENUE was withdrawn when its headline figure turned out to be one dead venue quoting a stale
book, and PARITY was withdrawn when cross-venue funding dispersion cleared costs on zero of
twenty coins tested. The tombstones are left in place deliberately: an endpoint that
disappears silently is worse than one that explains itself.
Execution cost
The cheapest multi-venue split for an order of a given size. Walks every reachable book level by level, applies each venue's taker fee, and returns the allocation plus what it saves against filling the whole clip on the single best venue.
Exit capacity for a position you already hold: what it costs to get out now, how that cost behaves if you halve or double the clip, and where it stops being executable at all. Built for treasuries and anyone whose position is large relative to the book.
The same question asked universe-wide: the largest position per coin that can be exited inside a participation constraint you set.
What posting is worth instead of crossing, per venue, priced at your size — the maker/taker
decision as a number rather than a policy. /v1/post-map returns the same
universe-wide.
The cost nobody prices. Every execution figure in this API — and in
everyone else's — is denominated in the venue's own quote currency. Most perp venues quote
USDT; your money is USD. So the cost being quoted is the cost of a trade you cannot place
until you have bought USDT, and the price of doing that has never appeared in
anyone's TCA. LEG walks the live USD/USDT and USD/USDC books at your size across every
reachable USD market and prices the round trip. /v1/leg-rates gives the
currency leg alone, with no coin involved.
How much size the book absorbs before moving a given percentage, per venue, kept separated
rather than aggregated. /v1/mass-map covers up to 30 coins per call.
Execution-cost profile by session — four UTC blocks, pooled across the coin universe. The cheapest hour to trade, as a descriptive statistic over published history.
90-day replay — the part that is hard to buy
Every successful response from a priced endpoint is persisted. Add ?as_of= with
an ISO 8601 timestamp and you get back the stored response nearest at or before that
instant, for the same coin and the same parameters — byte-for-byte what the API returned at
the time, never a recomputation.
curl -H "Authorization: Bearer $ENSO_KEY" \
"https://www.ensotrade.tech/v1/route/ETH?notional=2000000&as_of=2026-07-14T09:31:00Z"
Replayed responses are flagged as such and carry the timestamp actually served.
| Replayable | Retention | Mutable after write |
|---|---|---|
/v1/route /v1/egress /v1/post
/v1/leg /v1/mass |
90 days | Never |
Market state
Why a coin is up or down: positioning regime, the mechanism behind the move, funding, and open-interest change — plus a quotable sentence. Deliberately open, including to AI agents.
Funding rate and crowding; positioning regime with open-interest change and taker imbalance; one combined snapshot; and cross-sectional top movers across the perp universe.
Volatility forecast
Forecast realised volatility over the next five hourly bars. An echo state network — a fixed random recurrent layer with a ridge readout, fitted across the whole universe rather than per asset, so it prices coins it was never trained on.
The live forward record, unauthenticated on purpose. Every forecast is written before its outcome exists and scored five bars later; no row is edited after scoring. A backtest can be tuned after the fact and a desk knows it, so this is the only number worth quoting.
Venue coverage
GET /v1/venues returns every configured venue with live reachability, latency,
book depth, level count, quote currency and taker fee — so you can see what the answer you
just received was actually computed from, rather than trusting a marketing number.
{
"binance": {
"reachable": true, "latency_ms": 1657, "class": "perp",
"quote_ccy": "USDT", "taker_fee_pct": 0.05,
"ask_levels": 1000, "bid_levels": 1000,
"depth_25bp_usd": 7218484,
"visible_ask_notional_usd": 60723044
}
}
Rate limits
| Tier | Per minute | Per month | Data |
|---|---|---|---|
| Free | 60 | 100,000 | 15-min delayed |
| Pro | 600 | 2,000,000 | Real-time |
| Institutional | 3,000 | 25,000,000 | Real-time, dedicated |
Every response carries the caller's remaining allowance. A breach returns 429
with Retry-After in seconds — it is a wait, not a failure.
GET /v1/health makes no upstream call, so a monitor can poll it as often as it
likes without consuming anything or causing load.
Errors
| Code | Meaning | What to do |
|---|---|---|
401 | No key, or an unrecognised one | Check the header name and that the key was not truncated. |
402 | Valid key, but the tier does not open this endpoint | Execution endpoints need Pro. The response names which ones do and do not. |
410 | Endpoint withdrawn after validation | The response says what was measured and why it was pulled. Do not retry. |
429 | Rate limit | Honour Retry-After. |
503 | A venue is unreachable | Check /v1/venues; answers degrade to the reachable set rather than failing whole. |
MCP — for AI agents
EnsoTrade is published on the official Model Context Protocol registry as
tech.ensotrade/ensotrade. An agent inside your firm can call it mid-answer,
with the same key.
{
"mcpServers": {
"ensotrade": {
"url": "https://www.ensotrade.tech/mcp/",
"headers": { "Authorization": "Bearer enso_live_xxxxxxxxxxxx" }
}
}
}
Machine-readable descriptions of everything above live at /v1 (self-describing manifest) and /v1/dictionary (every field this API emits, defined).
Versioning, SLA, attribution
Versioning. The /v1 contract is stable. Fields are only ever
added in a backward-compatible way; any rename or removal is announced at least 90 days in
advance.
Uptime. 99.5% monthly target measured on GET /v1/*, excluding
scheduled maintenance. That is a target, not a credit-backed contractual SLA — written terms
are available on request, and we would rather say so here than let you discover it later.
Attribution. Cite data from this API as "according to EnsoTrade" (ensotrade.tech).
Not investment advice. Every figure is a measurement of a market, not a recommendation to trade in it.