GET /v1/quote
GET /v1/quote
Returns the latest quote for a single symbol or a batch of up to 8 symbols. The data is delayed by 15 minutes from the live tape; see delayed data.
Request
GET /v1/quote?symbol=AAPL HTTP/1.1Host: api.oneapi.financeAuthorization: Bearer oa_live_<your_key>Accept: application/jsonQuery parameters
| Param | Type | Required | Notes |
|---|---|---|---|
symbol | string | one of | Single symbol, e.g. AAPL. Mutually exclusive with symbols. |
symbols | string | one of | Comma-separated list, max 8. e.g. AAPL,MSFT,GOOGL. |
exchange | string | no | Disambiguate cross-listed tickers. Use the canonical code from exchanges. |
Either symbol or symbols is required, not both.
Response (single symbol)
{ "quote": { "symbol": "AAPL", "name": "Apple Inc.", "exchange": "NASDAQ", "currency": "USD", "price": 175.43, "open": 174.0, "high": 176.1, "low": 173.8, "previousClose": 174.5, "change": 0.93, "changePercent": 0.53, "volume": 52000000, "avgVolume": 60000000, "high52Week": 198.23, "low52Week": 124.17, "timestamp": "2026-05-04T20:00:00Z", "meta": { "source": "yahoo_query1", "fetched_at": "2026-05-04T20:14:32Z" } }}Response (batched)
{ "quotes": { "AAPL": { "symbol": "AAPL", "price": 175.43, "...": "..." }, "MSFT": { "symbol": "MSFT", "price": 421.08, "...": "..." } }}If a symbol in the batch fails to resolve, it is omitted from quotes and the
top-level data_issues array lists what went wrong:
{ "quotes": { "AAPL": { "symbol": "AAPL", "...": "..." } }, "data_issues": ["XYZQ: not_found"]}Field reference
| Field | Type | Notes |
|---|---|---|
symbol | string | Normalized to uppercase. |
name | string | null | Display name of the issuer. |
exchange | string | null | Canonical exchange code. See exchanges. |
currency | string | null | ISO 4217, possibly a sub-unit (GBX, ILA, ZAC). |
price | number | null | Last trade price in currency. |
open | number | null | Opening price for the current session. |
high | number | null | High of the current session. |
low | number | null | Low of the current session. |
previousClose | number | null | Close from the previous session. |
change | number | null | price - previousClose. |
changePercent | number | null | Percentage change as a plain number (e.g. 0.53 means 0.53%). |
volume | integer | null | Volume traded in the current session. |
avgVolume | integer | null | 30-day average daily volume. |
high52Week | number | null | Trailing 52-week high. |
low52Week | number | null | Trailing 52-week low. |
timestamp | string | null | ISO 8601 UTC. As-of time of the price tick. |
meta.source | string | null | Upstream identifier. See source attribution. |
meta.fetched_at | string | null | ISO 8601 UTC. When we pulled from the upstream. |
The wire-format model is oneapi_core.responses.quote.Quote.
Examples
# Single symbolcurl -H "Authorization: Bearer oa_live_..." \ "https://api.oneapi.finance/v1/quote?symbol=AAPL"
# Batchedcurl -H "Authorization: Bearer oa_live_..." \ "https://api.oneapi.finance/v1/quote?symbols=AAPL,MSFT,GOOGL,AMZN"
# Cross-listed disambiguationcurl -H "Authorization: Bearer oa_live_..." \ "https://api.oneapi.finance/v1/quote?symbol=BMW.DE&exchange=XETR"import osimport httpx
API_KEY = os.environ["ONEAPI_KEY"]
def quote(symbol: str) -> dict: r = httpx.get( "https://api.oneapi.finance/v1/quote", params={"symbol": symbol}, headers={"Authorization": f"Bearer {API_KEY}"}, timeout=10.0, ) r.raise_for_status() return r.json()["quote"]
def quotes(symbols: list[str]) -> dict[str, dict]: r = httpx.get( "https://api.oneapi.finance/v1/quote", params={"symbols": ",".join(symbols)}, headers={"Authorization": f"Bearer {API_KEY}"}, timeout=10.0, ) r.raise_for_status() return r.json()["quotes"]
print(quote("AAPL"))print(quotes(["AAPL", "MSFT", "GOOGL"]))const API_KEY = process.env.ONEAPI_KEY;
async function quote(symbol) { const r = await fetch( `https://api.oneapi.finance/v1/quote?symbol=${encodeURIComponent(symbol)}`, { headers: { Authorization: `Bearer ${API_KEY}` } }, ); if (!r.ok) throw new Error(`HTTP ${r.status}`); return (await r.json()).quote;}
async function quotes(symbols) { const r = await fetch( `https://api.oneapi.finance/v1/quote?symbols=${symbols.join(",")}`, { headers: { Authorization: `Bearer ${API_KEY}` } }, ); if (!r.ok) throw new Error(`HTTP ${r.status}`); return (await r.json()).quotes;}Errors
| Status | code | When |
|---|---|---|
| 400 | bad_request | Both symbol and symbols provided, or symbols longer than 8. |
| 401 | unauthenticated | Missing or invalid API key. |
| 404 | not_found | Symbol unknown on a single-symbol request. |
| 429 | rate_limit | See rate limits. |
| 502 | upstream_failure | All sources failed for this symbol. |
For batched requests, individual symbol failures populate data_issues rather
than returning an error status.
See also
GET /v1/time_seriesfor historical OHLCV.GET /v1/statisticsfor fundamentals.- Batching recipe for collapsing multiple lookups.