Frequently asked questions
How the datasets are built, the caveats worth knowing before you backtest, and how plans and the API work. Still stuck? Email info@tesseralytics.dev.
Getting started
Sign up with Google or email — no card required for the free tier. Then open your Account page and create an API key. The raw key is shown exactly once at creation, so copy it somewhere safe. You can create more keys or revoke old ones at any time; revoked keys stop working immediately.
Pass your key as a bearer token. List what you can access with:
curl -H "Authorization: Bearer $TESSERA_API_KEY" \ https://tesseralytics.dev/v1/datasets
See the full reference on the API Docs page.
The …/download endpoint returns a 302 redirect to a temporary download URL. Follow redirects (curl -L) to stream the file straight to disk, then load it with Polars, pandas or DuckDB. If
you'd rather receive the URL itself instead of being redirected, send Accept: application/json and you'll get a JSON body
with the link.
The data
The datasets are sparse, not gap-filled. A bucket only exists if
there was activity in it — so in gold_ohlcv_1m, a one-minute bucket with no trades has no row at all (rather than a zero-volume/flat-price row).
The same applies to the hourly datasets. If your model needs a continuous time grid, resample
or forward-fill on your side after downloading — that way you stay in control of how gaps
are treated.
All timestamps are UTC with microsecond (µs) precision. Each row's time column is the start of its bucket (e.g. the minute
or hour bucket start).
Every dataset is partitioned per (coin, month), and each partition is a single
Parquet file. You download one (coin, month) file per request — to assemble a longer
history, fetch each month and concatenate them locally.
Running totals — cumulative volume delta (CVD), cumulative funding, and similar — are spliced continuously across month boundaries. The first row of a month carries on from where the previous month ended, so the series is already continuous; do not reset it to zero when you stitch consecutive months together.
NULL means "not defined for this row," not zero. For example account_ls_ratio is NULL when there are no
shorts to divide by, and several concentration metrics are NULL when a side is empty.
Each column's exact semantics are documented on the Datasets page.
HIP-3 (Hyperliquid Improvement Proposal 3) lets anyone deploy a perpetual futures
market on Hyperliquid. Most HIP-3 markets track real-world assets — equity ETFs like xyz:NVDA, xyz:TSLA, xyz:QQQ, commodity ETFs like xyz:GLD, and crypto-native tokens deployed by
third-party builders. They trade alongside core perps with the same full-depth order
book, settlement and liquidation mechanics — but on assets Hyperliquid itself doesn't
list. HIP-3 markets are Pro-only and available from September 2025, covering every HIP-3 launch from day one.
Core perps use their plain symbol (e.g. BTC, ETH). HIP-3 (builder-deployed) markets are
namespaced by their deployer in lowercase, e.g. xyz:NVDA. HIP-3 markets are Pro-only.
Data is refreshed every day — the full pipeline finishes by 5am UTC,
so yesterday's trading data is available each morning. Partitions are per (coin, month), and the current partial month is
included: it's rebuilt daily alongside the closed months. There's no formal SLA or uptime guarantee and we don't issue credits for delays.
Occasionally, yes. When upstream Hyperliquid data is missing for a window, that window is absent downstream too — it isn't synthesised or interpolated. This is rare, but worth handling defensively if your pipeline assumes unbroken coverage.
Plans & billing
Free gives you order-flow-enriched minute OHLCV (gold_ohlcv_1m) — CVD, aggressor delta, VWAP, fees and more — for BTC, ETH, SOL and HYPE over the
trailing month, with no card required. Pro ($29/mo) unlocks full history, adds the raw
funding (gold_funding_1h) and positioning (gold_positioning_1h) datasets, and opens all coins, including HIP-3 markets. See Pricing.
No. Every plan is all-you-can-eat — unlimited downloads, no per-GB egress fees. Pull the whole history as often as you like.
If a coin or month falls outside your plan, the API returns 404 rather than 403. That's deliberate: it keeps the shape of the full catalog opaque to lower tiers. Upgrade to Pro to unlock funding, positioning and all coins.
Upgrade from your Account page — checkout is handled by Stripe. The same page links to the Stripe billing portal, where you can update your card or cancel. Cancelling stops the renewal; your Pro access continues until the end of the current billing period, then reverts to Free. Fees are non-refundable — there are no partial refunds for the unused part of a period.
API & formats
Send your API key as a bearer token on every /v1 request: Authorization: Bearer <your-api-key>.
Account management endpoints use your signed-in browser session instead.
Everything is Apache Parquet — columnar, typed and compressed. It
drops straight into Polars, pandas (pd.read_parquet) or DuckDB (SELECT * FROM 'file.parquet')
with no conversion.
Download URLs are short-lived by design. If a link has expired, just
call the …/download endpoint again to mint a fresh
one. Don't cache or share the URL itself — cache the dataset file, not the link.