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 presigned Parquet 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.
Datasets are built one month at a time. The previous month's data is generally available within the first few hours of the 1st of each new month. There is no in-month refresh — during the current month the most recent closed month is the freshest partition available. 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 minute OHLCV (gold_ohlcv_1m) for BTC, ETH, SOL and HYPE over the full history, with no card required. Pro ($50/mo) adds funding rates (gold_funding_1h) and positioning analytics (gold_positioning_1h), and unlocks 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.
Presigned 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 presigned URL itself — cache the dataset file,
not the link.