New fields, endpoints and parameters arrive without a version change, so code that ignores unknown fields never breaks. Breaking changes would come under /v2 with at least 90 days' notice.
date exactly, returning 404 when unavailable.date to select the newest available completed session.history/replay rows (both parts) are stamped with the moment of the state they show, the as_of of the same row on history/levels, and carry that moment's walls and strike profile.history/chain, history/replay) says when it will be: 404 not_built carries ready_by and queue_position, with Retry-After.404 not_available and is not queued.POST /v1/stream/negotiate before every socket, one socket for every topic ({family}:{TICKER}:{scope}:-), each message carrying its REST twin's body, MessagePack or JSON frames, a fixed set of streamable shapes (the scopes), the quotes family (up to 50 a connection on every plan), drift sending only its new points.GET /v1/symbols/{symbol}/intraday?bars=N and GET /v1/symbols/{symbol}/flow?buckets=N: the newest N bars or buckets.GET /oauth/authorize sends a valid sign-in straight to the DataFirst login (302); the code is no longer shown, and the consent page names the app.meta and GET /v1/symbols/{symbol}/spot dropped internal fields.503 code was renamed, to temporarily_unavailable (with Retry-After, as before).symbols on /v1/plans (limits), /v1/status (reach) and /v1/me is "all" or "limited" (it listed the symbols; on /v1/me it was a list or null), and symbol_not_in_tier reads "your plan doesn't include this symbol".https URL of a client's metadata document may be its client_id; a loopback redirect_uri matches whatever its port; /.well-known/openid-configuration answers 404./expirations and the expirations=N windows at the 16:00 New York close, finished sessions keep it.GET /v1/me gains addons and multi_indicator./intraday?date=) are finished-session data; today's bars cover the whole day; a weekend or holiday date answers 404 no_session; the plan's stream limits and compatible-API access are enforced.meta.settlement declared; the export manifest gives each column its unit./intraday without a date answers today's bars only, from 04:00 New York.If-None-Match is compared the weak way, so revalidating through a proxy answers 304.ETag and take rev= for permanent caching; an undetermined flip or wall is null./expirations lists every expiration of the last session./expirations and /intraday answer from the last session.RateLimit-Remaining is the whole key's.plan_until on every key: a professional's ended plan is 403 plan_ended, a non-professional's key reads as Free.GET /v1/status: plan, mode, usage and reach in one free read.offline_access advertised in the OAuth metadata.403 attestation_required).403 attestation_pending, finished sessions only), GET /v1/me for every valid key, stream tickets, streams closed when their key is refused./intraday starts a symbol's live bars at its first read, with the day's earlier minutes for a stock./intraday keeps the day's earlier minutes at every hour.pro is named developer, with the same limits./v1/trades/stats gains offset.202 with Retry-After./v1/trades/stats honours limit and gains sort.GET /v1/sessions/{date}; /v1/symbols/{symbol}/reference gains sessions.GET /v1/me in the OpenAPI document.Quota-* headers.meta.time_to_expiry_years declared.strikes=N or all on strikes and heatmap.code on every error; time limits, heavy reads in flight and the per-address ceiling; limits on /v1/me; the retry rule.