API Reference

API documentation

The full OpenAPI 3.1 spec is downloadable, and works with any client generator for your language of choice.

Endpoints

GET /v1/bars/1m 1-minute bars, multi-symbol
GET /v1/bars/1m/{symbol} Single-symbol convenience form
GET /v1/snapshot Latest finalised bar, in bulk
GET /v1/snapshot/{symbol} Latest finalised bar, single symbol
GET /v1/symbols Covered universe
GET /v1/calendar Calendar and session bounds
GET /v1/coverage Per-day completeness
GET /v1/corrections Published late corrections
GET /v1/corporate-actions Splits and dividends
GET /v1/usage Your usage and quota
GET /v1/status Feed status (public)

Conventions worth reading first

Prices are scaled integers

Every price is an integer scaled by meta.price_scale (10,000). Divide to get the real price. This is why reconciling us against another vendor never surfaces phantom rounding differences.

Timestamps label the bar open

ts is Unix seconds pointing at the bar’s OPEN. The 09:30 bar covers [09:30:00, 09:31:00). This is the single most common integration mistake.

No data is not an error

A minute with no trades has no bar (common pre/post market). 200 with an empty array genuinely means no data; upstream failures return 5xx. We never dress a failure up as a success.

Errors follow RFC 9457

Failures use application/problem+json with type / title / status / detail / instance. The instance is the X-Request-Id — quote it when you contact support.

Rate-limit state lives in headers

RateLimit-Limit / RateLimit-Remaining / RateLimit-Reset. A 429 carries Retry-After; back off by it, ideally with jitter.

Poll once a minute

The data is minute-granular, so polling faster only burns quota. Use meta.as_of to detect whether anything new landed and skip the fetch when it has not.