Reference

Changelog

What changed in the contract of the API, newest first, and the notice we commit to before a breaking change. Current contract: v1, OpenAPI version 1.1.0.

#Versioning and deprecation

The contract is v1. Not breaking, and shipped without notice: a new route, a new field in a response, a new optional parameter, a new error.code, a new value in an informative text. Write clients that ignore unknown fields.

Breaking: removing or renaming a route, a field, a parameter or an error.code, changing a unit or the meaning of a field. A breaking change is announced on this page, and only takes effect for your plan once its notice has run:

PlanNotice before a breaking change
FreeNo guaranteed notice (announced on this page)
Traders30 days
Financial60 days
Startup90 days
EnterpriseSet in the contract

#Changes

2026-10-01 · One error format, a generated reference

  • Every error has one shape: status: "error", timestamp, error {code, message, param} and detail. error.code is stable and machine-readable; branch on it. detail is kept and repeats the message; on a validation error it is now a string instead of a list.
  • Error messages are in English (they were in French). A client that matched the French text must switch to error.code.
  • /v1/snapshot accepts =true as a depth of 1 (funding_rate_8h=true). Called with only symbol, it now also returns available_multi_tf_fields, timeframes and max_depth.
  • timePeriod=1mo on the Bitcoin histories, an unambiguous spelling of one month; 1m still works there and still means one month.
  • POST /v1/indicators also accepts the parameters nested in a parameters object.
  • /v1/trades/future on a stablecoin answers unavailable: "not_applicable" (it said no_data).
  • Responses are compressed (gzip) when the client asks for it; GET https://api.bytnode.com/ answers a JSON index of the links.
  • The OpenAPI contract now carries a schema, the unit of every field and a real example for every route, the error responses and code samples. New: llms-full.txt, a Postman collection and the interactive reference.
  • The texts of /v1/macro/correlations (method) and /v1/macro/risk (condition) are in English.

2026-09-30 · Data quality

  • Combined trade candles (/v1/trades) are built from the spot and futures candles of the same bucket.
  • New field volume_estimated on candles: true when the aggregated volume of an older candle was reconstructed.
  • Funding is aligned on the period actually covered; /v1/funding/rate?live=1 serves the window in progress.
  • Price change of the USDC pair is computed on spot candles.
  • WebSocket: every book.* message carries mid_avg and spread_bps_avg.

2026-09-29 · Time alias, empty answers, published contract

  • Every timestamped object under data also carries time, a copy of its bucket, timestamp, date… so a generic client reads one key.
  • Every REST route whose data is empty carries unavailable (not_applicable, no_api_key, no_data), like the snapshot.
  • The OpenAPI contract with the unit of each numeric field is served without a key at /openapi.json.
  • OHLC candles come from one reference spot market per symbol; volumes stay aggregated across venues.
  • An unknown timeframe is a 422, no longer a 403.

2026-09-28 · Strict parameters and one scale per suffix

  • Strict parameters: a parameter a route does not declare, or a repeated one, is a 422 with a suggestion (it was silently ignored).
  • since_ms / until_ms in seconds, micro- or nanoseconds, or before 2009-01-03 are a 422.
  • Units by suffix: *_pct is a percent, *_ratio a fraction, *_bps basis points. apr became apr_pct; basis_pct is served ×100.
  • Every timestamp is ISO 8601 UTC with fixed milliseconds (2026-09-28T14:00:00.000Z).
  • The envelope repeats the effective symbol and timeframe of the request.
  • is_closed is immutable: a closed bucket is final and never rewritten.
  • Rate-limit headers in the IETF format (RateLimit-Policy, RateLimit), with the monthly quota left.
  • Every error generated at the edge is JSON, never an HTML page.
  • /v1/status has one row per public feed, with a threshold of 1.5 × its expected interval.

2026-09-26 · MCP server

  • The MCP server exposes three tools covering the whole API (73 fields), with the client’s own key and plan.
  • A history is never cut silently: a period without timeframe gets the finest step that fits, and every series carries its real coverage (ranges).

2026-09-16 · WebSocket capacity

  • The WebSocket stream runs on dedicated infrastructure and announces its capacity: a 503 at the handshake means the service is full, not that your plan refused.
  • Sequence numbers (seq) are global per channel.

2026-09-12 · Ten new pairs

  • XMR, LINK, ADA, LTC, UNI, GRAM (ex-TON), AVAX, HBAR, NEAR and TAO join the catalogue: 22 pairs.