API Reference
The full OpenAPI 3.1 spec is downloadable, and works with any client generator for your language of choice.
| 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) |
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.
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.
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.
Failures use application/problem+json with type / title / status / detail / instance. The instance is the X-Request-Id — quote it when you contact support.
RateLimit-Limit / RateLimit-Remaining / RateLimit-Reset. A 429 carries Retry-After; back off by it, ideally with jitter.
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.