Twelve paid endpoints, a handful of free ones, and one payment flow shared by everything — from intraday bars to SEC filings to a full joined research brief. If you're integrating an AI agent over MCP or A2A, the agent integration guide is the faster path.
Returns a full trading day of intraday bars for one ticker at your chosen timeframe — interval accepts 3, 6, 9, 12, 15, 30, 60, or 240 minutes and defaults to 3 (about 130 bars per regular session).
Intraday endpoints — /v1/query, /v1/range, /v1/batch and /v1/bars — return both on every bar: absolute open, high, low and close price levels, and each one’s fractional change from that day’s open, alongside raw volume and transaction counts.
Read the prices directly when you want levels; use the percentages when you are comparing across tickers or dates, where levels are not comparable. No second call is needed for either.
/v1/daily rolls the same prices up to the session — open, high, low, close, volume, transactions and VWAP — and is the cheapest way to cover long histories.
One caveat worth knowing: day_open is the first bar of the session and includes pre-market, so the percentages are measured from that rather than the 09:30 regular-session open a third party would quote. The absolute prices are unaffected.
Every symbol that printed at least one trade on the given date. Useful for building universes or discovering what existed at any point in the last two decades.
One ticker across consecutive trading days. Price scales with days returned.
Several tickers, one date, one request. Price scales with tickers returned.
Daily OHLCV bars plus VWAP and volatility for one ticker over any date range — two decades of history for about two cents. Session-level aggregates of the same prices the intraday endpoints return, and by far the cheapest way to cover long histories. Each day also returns range_pct = (high − low) / open, and true_range_pct = (max(high, prev_close) − min(low, prev_close)) / prev_close, which unlike range_pct captures the overnight gap. Pass "adjusted": true for split-adjusted prices (also supported on /v1/query and /v1/range).
Screen every US stock on a date for custom criteria — gap percentage, price change, volume thresholds. One query replaces thousands.
The same eight intervals as /v1/query, with multi-day ranges in one call. Supports split-adjusted prices.
| Minutes | Bars per regular session |
|---|---|
3 | ~130 |
6 | ~65 |
9 | ~44 |
12 | ~33 |
15 | ~26 |
30 | ~13 |
60 | ~7 |
240 | ~2 |
Name, CIK, SIC industry, exchange, and fiscal year end from SEC EDGAR.
Quarterly financials normalized from SEC EDGAR XBRL filings: revenue, net income, EPS, margins, cash, debt — every reported quarter.
SEC Form 4 transactions: who bought or sold, role, shares, price, and value.
Filing index for a ticker — 10-Ks, 10-Qs, 8-Ks (with item codes, so earnings 8-Ks are identifiable), proxies, and ownership filings, each with a direct document link. Pass "sections": ["risk_factors", "mdna"] to get the full extracted text of those sections from the latest 10-K/10-Q — an agent reads Risk Factors without parsing a 300-page filing.
Everything material about one company, joined in a single structured response: price action over the lookback window, latest fundamentals, insider activity, and split history. Replaces roughly twenty individual queries — and the token bill of assembling them.
All paid endpoints use x402, the open standard for HTTP-native payments. The pattern is always the same:
Payments settle in USDC on Base mainnet. Most x402 client libraries handle steps 2–5 automatically.
| Endpoint | Description |
|---|---|
GET /v1/sample | Real bars, no payment, no parameters — check data quality before you spend |
GET /v1/pricing | Machine-readable pricing and coverage |
GET /v1/stats | Platform statistics |
GET /health | Service health |
POST /mcp | MCP JSON-RPC endpoint — see the agent guide |
GET /.well-known/mcp.json | MCP capability card |
GET /.well-known/agent-card.json | A2A agent card |
GET /llms.txt | Plain-text service description for LLMs |
GET /openapi.json | OpenAPI 3 specification (also at /swagger.json) |
GET /.well-known/x402 | x402 service manifest — every endpoint, method and exact price |
GET /agents.txt | Plain-text integration guide for agents |
| Field | Description |
|---|---|
window_start | Bar start time, ISO 8601 UTC |
timestamp | Bar start time, nanoseconds since Unix epoch (UTC) |
open / high / low / close | Absolute prices in USD for that bar |
pct_open / pct_high / pct_low / pct_close | The same four values as fractional change from the daily open (0.0012 = +0.12%) |
volume | Shares traded during the bar interval |
transactions | Number of individual trades |
range_pct | Day-level, returned alongside data: (high − low) / open — the day’s swing, precomputed |
| Field | Description |
|---|---|
date | Trading date (YYYY-MM-DD) |
open / high / low / close | Absolute prices in USD, aggregated over the session |
volume | Shares traded for the day |
transactions | Number of individual trades |
vwap | Volume-weighted average price |
range_pct | (high − low) / open — intraday swing, ignores overnight gaps |
true_range_pct | (max(high, prev_close) − min(low, prev_close)) / prev_close — standard true range, includes the overnight gap. Null when no prior close is available. |
| Coverage | Value |
|---|---|
| Date range | September 2003 → present |
| Tickers per day | 7,000 – 16,000+ |
| Bars per ticker per day | ~130 at 3m; scales with interval |
| Code | Meaning |
|---|---|
400 | Invalid parameters (bad date format, empty ticker, etc.) |
402 | Payment required — terms are in the PAYMENT-REQUIRED header |
404 | No data for that ticker/date (weekend, holiday, or pre-listing) |
429 | Rate limited — 30/min per IP unpaid, 120/min on /mcp. Paid (x402-settled) requests have no rate limit. |