Skip to main content
Endpoints fall into four buckets by how they treat history. The window is enforced by the query layer, not by request parameters, so calling with a wider since than the underlying source allows will silently return data only as far back as the source goes.

Rolling 90-day window

Lifecycle-derived endpoints. Underlying aggregates are refreshed hourly. Querying beyond 90 days returns no rows.

All-time / lifetime

Reads the trader’s full indexed history (since Coinversa began indexing the wallet). No cap.

Caller-bounded via since

Window is what the caller passes, silently capped at 90 days (since above 90d / 2160h / 129600m is treated as 90 days). Routes with a lower ceiling reject an overlong window with a 400 instead. The since parameter accepts a number + unit (weeks are not a unit — use m, h or d, e.g. 14d, not 2w; a malformed since is an error, not a default). Routes with a ceiling reject an overlong window rather than clamping it: since=<value> exceeds this route's <ceiling> ceiling, as a 400. /pulse/trades/recent is the one to watch — 30 days with ?coin=, but only 6 hours without it. /live/whale-trades/{coin} stops at 24 hours. Within a route’s ceiling the effective maximum is bounded by the underlying data freshness, not by your tier.

Builder analytics windows

The builder endpoints use their own window parameters, enforced server-side like everything else on this page: The since clamp is silent: the response’s window field echoes what you requested even when the data was clamped to 90 days — same truncation-detection advice as above: compare response timestamps against your requested window. Underlying history: builder-fee orders and attributed fills are complete and gapless from 2025-01-25. Trigger-order (stop/TP) fill capture went live 2026-08-20 with backfill to 2026-03-24 and earlier history in progress — until it completes, attributed metrics slightly undercount vs ledger revenue (disclosed in every response’s dataNotes). Ledger revenue itself is cumulative on-chain data with no window floor. The clamps above are per-request query windows, not data floors — retention’s 12-month triangle reads the full order history. See Builder codes & attribution.

Sharpe windows

The Sharpe endpoints count completed UTC days and always exclude today. Unlike since, their windows are validated, not clamped: a days value outside its range, non-integer or missing is a 422; on /sharpe/interval, a malformed startDay, a start more than 90 days ago or an end later than today is a 400. The leaderboard also takes activity floors over the same 30-day window: minActiveDays (fill days inside the window, 1–30, default 10) and minPnl (−1,000,000,000 to 1,000,000,000, default 1000). Values out of range are a 422. The minRecentSharpe filter reads a stored 30-day score refreshed hourly; minTotalSharpe reads a stored score from each wallet’s first available daily history through yesterday, refreshed daily. Both are the wallet’s current score, also when filtering older trades or lifecycles.

Live / real-time

Most /live/* routes return current state — each call returns the latest state from the indexer. These take an explicit window: /live/long-short/history, /live/oi-history[/{coin}], /live/official-oi[/{coin}], /live/risk/coins/{coin}/history and /live/cohort-bias-history/{coin} (hours, default 168, silently clamped to 1–2160); /live/risk/coins/{coin}/mark-dislocations (hours, default and maximum 168); /live/risk/liquidations/recent and /live/risk/liquidations/summary (since, default 7d); /live/whale-trades/{coin} (since, default 6h, 24h ceiling). /live/cohort-bias-history/{coin} reads hourly snapshots and echoes its explicit UTC window in the format=layer body. /live/positioning-by-entry/{coin} is a current snapshot of open positions, never history, whose rows were observed at different times (source.medianAgeS). See Chart layer endpoints. /pulse/market/candles/recent/{symbol} returns at most 500 candles (larger limit values are clamped, with X-Limit-Clamped: 500); its rolled-up intervals (5m, 15m, 4h, 1d) read 1-minute candles kept for 30 days, so 1d returns at most 30 bars.

FAQ

The 90-day cap balances refresh cost (full lifecycle reconstruction is expensive) and storage against the analytical window most consumers actually need. Backtests and behavior-pattern studies rarely care about positions older than a quarter; trend-detection consumers care about the last few weeks.
Yes — longer windows are available on Enterprise. Contact chat@coinversa.ai with the wallet set and time range you need; one-off bulk exports and recurring custom-window endpoints are both possible.
  • Aggregates (lifecycles, cohort rollups, discovery endpoints): refreshed hourly.
  • Trades, closed positions, raw events: written as they’re indexed, typically within seconds of the L1 fill.
  • Live endpoints: current indexer state, but freshness differs by route — snapshot routes built from per-wallet polling (e.g. positioning by entry) carry observation times in the body; check source.medianAgeS / source.asOf / observedThrough rather than assuming real time.
Where a route has no ceiling, the query runs against the available data and returns whatever it has — compare your response timestamps against your requested since to detect truncation. Where a route does have a ceiling, an overlong since is a 400, not a short answer.