Contents

Authentication & limits

One header per request. Your plan sets how many requests you get per minute and per day, and how far back the data goes.

You are not logged in. Without a key you can call the API with X-Blockmetric-Access: public: 10 requests a minute and 300 a day per address, 24 h of history. A free key gives you 10 a minute, 1,000 a day and 30 days of history.

API keys

Create keys under Account › API keys. Every account includes a free personal key; the full key (bm_live_…) is shown once; we store only a hash.

Send the key in a header
curl -s -H "Authorization: Bearer $BLOCKMETRIC_API_KEY" \
  "https://api.blockmetric.io/v1/markets"

# or
curl -s -H "x-api-key: $BLOCKMETRIC_API_KEY" "https://api.blockmetric.io/v1/markets"
  • Headers only, HTTPS only. A key in the URL (?api_key=) is refused with 400, because URLs end up in logs and browser history. Plain http answers 403 https_required.
  • Typos fail fast. Keys end in a checksum, so a cut or mistyped key answers 401 without a lookup, and secret scanners recognise leaked keys.
  • Name, expiry, IP allowlist, browser origins. Each key can get a name, an expiry date, an IP allowlist (CIDR) and (for browser widgets only) a list of allowed origins. Revoke a key (or all at once) on the account page if it leaks; it stops working immediately.
  • Keys belong on your server. A browser request that carries a key is only served when the key lists that page's origin; otherwise it answers 403 origin_not_allowed. Server code (Node, Python, cURL) sends no Origin and is not affected. The rule prevents accidental embedding; it does not replace keeping the key secret.

Without a key

For a first test, notebooks and AI agents: send X-Blockmetric-Access: public instead of a key.

Data
The free tier with 24 h of history (a free key: 30 days).
Limits
10 requests a minute and 300 a day per address.
Licence
Personal, non-commercial use with the credit "Data by Blockmetric" (meta.license.id = public).

Rate limits

Per account: all keys share them. Minutes are fixed one-minute windows; the day is the UTC day.

Limits per plan
PlanPricePer minutePer dayHistoryLicenceRealtime
No key$01030024 hPublic-
Free$0101,00030 dayspersonal use-
Pro$29/mo205,000365 dayspersonal use-
Desk$79/mo3010,0001095 dayspersonal use-
API Dev$49/mo6050,000365 daysinternal use (1 organisation)2 webhooks
API Pro$249/mo300500,0001095 daysdisplay in your product2 streams · 10 webhooks

Beyond the daily limit, API Dev and API Pro can switch on billed overage (API Dev $0.5 per 1,000), (API Pro $0.3 per 1,000) under Account › Plan & billing, never above the monthly cap you set; the per-minute limit always stays hard. Compare plans

Desk trial: During the trial, the API key (20/min, 5,000/day), the history depth (1 year), the order-flow depth (7 days) and wallet CSV exports run at Pro level. Everything else is Desk from day one; the first payment, or Start Desk now, unlocks the rest.

Rate-limit and tracing headers

Every response tells you where you stand. Read the headers instead of guessing.

Response headers
HeaderMeaning
X-Request-IdUnique id of this response (also error.request_id). Quote it when contacting support.
X-Client-Request-IdYour own request id, when you sent one as X-Client-Request-Id or X-Request-Id (printable, at most 64 characters); logged next to ours.
X-Blockmetric-Api-VersionVersion of the v1 contract that served the response (OpenAPI info.version).
X-RateLimit-LimitRequests allowed per minute for the account.
X-RateLimit-RemainingRequests left in the current minute.
X-RateLimit-ResetUnix seconds when the current minute window ends.
X-RateLimit-Limit-DayRequests allowed per UTC day for the account.
X-RateLimit-Remaining-DayRequests left today (UTC); 0 with overage on means further calls are billed.
X-RateLimit-Reset-DayUnix seconds when the UTC day ends.
RateLimit-PolicyBoth quotas in the IETF draft format (draft-ietf-httpapi-ratelimit-headers), e.g. "minute";q=60;w=60, "day";q=100000;w=86400.
RateLimitRemaining requests and seconds to the reset per window, IETF draft format, e.g. "minute";r=59;t=42, "day";r=99990;t=50000.
X-Blockmetric-Overage"billed" when this request was beyond the daily limit and billed as overage (API Dev / API Pro with overage on).
X-Blockmetric-Key-ExpiresExpiry of the key (ISO 8601), sent during its last 14 days. Create a new key on /account/api in time.
Retry-AfterSeconds to wait before retrying (429).
ETagStrong validator of the body; send it as If-None-Match to get 304 Not Modified when nothing changed.
DeprecationOnly on deprecated endpoints or parameters: "@<unix seconds>" (RFC 9745).
SunsetOnly on deprecated endpoints with a removal date: HTTP date (RFC 8594).
LinkOnly together with Deprecation: <url of the changelog entry>; rel="deprecation" (RFC 9745). With format=csv / ndjson also <next page>; rel="next" and <licence terms>; rel="license" (RFC 8288).
X-Blockmetric-Next-Cursorformat=csv / ndjson only: meta.nextCursor (pass it as cursor); absent on the last page.
X-Blockmetric-Next-Afterformat=csv / ndjson only: meta.nextAfter of feeds with forward polling.
X-Blockmetric-Updated-Atformat=csv / ndjson only: meta.updatedAt, the newest data timestamp.
X-Blockmetric-Warningsformat=csv / ndjson only: meta.warnings as code:param pairs, e.g. history:from, clamped:limit (the JSON format has the messages).
X-Blockmetric-Restrictedformat=csv / ndjson only: meta.restricted, the venues the licence gate withheld.
X-Blockmetric-Licenseformat=csv / ndjson only: meta.license.id, the licence the rows are served under (attribution duties as in meta.license).

Handling 429

Wait Retry-After seconds and try again. 304 Not Modified and refused 429s are explained in the error catalogue.

Retry with Retry-After
# -i prints the headers: X-RateLimit-Remaining, X-RateLimit-Reset, and Retry-After on a 429
curl -si -H "Authorization: Bearer $BLOCKMETRIC_API_KEY" \
  "https://api.blockmetric.io/v1/liquidations/summary?hours=24" | grep -iE "^(HTTP|x-ratelimit|retry-after)"

Poll less, not faster: revalidate with If-None-Match, page with cursors, or let us push events to you with webhooks and the live stream.

Code snippets in these docs are licensed under MIT-0: copy them into your own code without attribution. The SDKs, CLI and MCP server will be, once published, Apache-2.0; the name Blockmetric is not licensed (forks must be renamed). Data from the API is governed by the API terms; third-party exchange data by the exchange’s terms.

LiveHyperliquid markets 2sOperationalHyperliquid positions & whales 2sOperationalLiquidation heatmap & levels 4sOperationalLighter markets & liquidations 10sOperationalLighter positions & heatmap 2sOperationalLighter RH positions & heatmap 6sOperationalBinance markets 31sOperationalBybit markets 1sOperationalBinance liquidations 10sOperationalBybit liquidations 10sOperationaldYdX positions & heatmap 3sOperationalGMX positions & heatmap 6sOperationalLong/short & open interest history 2mOperationalOrder books & trade flow 1sOperationalOn-chain transfers 2sOperationalSecurity monitor 40sOperationalBlockmetric Sentiment 9mOperationalOfficial news 7mOperationalAlert delivery 3sOperational10:06:28 UTCData: Blockmetric Research · Binance · Bybit