Add extended, exchange-compliant quote snapshots for US stocks to your product with a single request. For each requested symbol the API returns the last trade with its event time, full bid and ask with sizes and timestamps, intraday change, rolling averages, 52-week extremes, extended-hours data, and reference fields such as market cap, P/E, dividends, and issuer details. Several symbols can be requested in one call.
- You can start with "DEMO" API key to test the data for a few tickers only: AAPL.US, TSLA.US, VTI.US, AMZN.US, BTC-USD.CC and EURUSD.FOREX. For these tickers, all of our types of data (APIs), including Real-Time Data, are available without limitations.
- Register for the free plan to receive your API key (limited to 20 API calls per day) with access to End-Of-Day Historical Stock Market Data API for any ticker, but within the past year only. Plus a List of tickers per Exchange is available.
- We recommend to explore our plans, starting from $19.99, to access the necessary type of data without limitations.
API Endpoint
GET https://eodhd.com/api/us-quote-delayed
The endpoint returns a delayed quote for one or more US stock symbols. The response is always JSON: a top-level object with meta, data (a per-symbol object), and links.
Parameters
api_token
string
required
s
string
required
fields
string
optional
Unknown or unsupported symbols are silently skipped: they do not appear in data, and meta.count reflects only the symbols that resolved. If none resolve, data is an empty array and meta.count is 0.
Request Example
https://eodhd.com/api/us-quote-delayed?s=AAPL.US&api_token=YOUR_API_TOKEN
curl --location "https://eodhd.com/api/us-quote-delayed?s=AAPL.US&api_token=YOUR_API_TOKEN&fmt=json"
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://eodhd.com/api/us-quote-delayed?s=AAPL.US&api_token=YOUR_API_TOKEN&fmt=json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
));
$data = curl_exec($curl);
curl_close($curl);
try {
$data = json_decode($data, true, 512, JSON_THROW_ON_ERROR);
var_dump($data);
} catch (Exception $e) {
echo 'Error. '.$e->getMessage();
}
import requests
url = f'https://eodhd.com/api/us-quote-delayed?s=AAPL.US&api_token=YOUR_API_TOKEN&fmt=json'
data = requests.get(url).json()
print(data)
library(httr)
library(jsonlite)
url <- 'https://eodhd.com/api/us-quote-delayed?s=AAPL.US&api_token=YOUR_API_TOKEN&fmt=json'
response <- GET(url)
if (http_type(response) == "application/json") {
content <- content(response, "text", encoding = "UTF-8")
cat(content)
} else {
cat("Error while receiving data\n")
}
Try it now (it's free)!
How to use it (YouTube)
Response Format
The response is a JSON object with three top-level members: meta (result metadata), data (an object keyed by requested symbol), and links (reserved for pagination; currently always null). Each requested symbol is a key inside data, mapping to that symbol’s quote object.
{
"meta": { "count": 2 },
"data": {
"AAPL.US": {
"symbol": "AAPL.US",
"exchange": "XNAS",
"type": "STOCK",
"name": "Apple",
"open": 317.615,
"high": 328.73,
"low": 317.32,
"lastTradePrice": 327.5,
"lastTradeTime": 1784147349117,
"bidPrice": 327.43,
"bidSize": 520,
"bidTime": 1784147337000,
"askPrice": 327.5,
"askSize": 320,
"askTime": 1784147349000,
"volume": 60673507,
"change": 0,
"changePercent": null,
"previousClosePrice": null,
"previousCloseDate": "2026-07-14 17:00:00",
"marketCap": 4808073350000,
"pe": 38.118644,
"dividendYield": 0.0034,
"currency": "USD",
"timestamp": 1784161740
},
"MSFT.US": { "symbol": "MSFT.US", "exchange": "XNAS", "lastTradePrice": 512.09, "currency": "USD" }
},
"links": { "next": null }
}
meta and links
| Field | Type | Description |
|---|---|---|
| meta.count | integer | Number of symbols returned |
| links.next | string or null | Reserved for pagination; currently always null |
Per-symbol fields (data)
Each key inside data is a requested symbol. The value is the quote object below. Fields are grouped for readability; expand each section to see its fields.
Identification and classification
| Field | Type | Description |
|---|---|---|
| symbol | string | Instrument code, for example AAPL.US |
| exchange | string | Exchange MIC code, for example XNAS |
| isoExchange | string | ISO exchange identifier |
| bzExchange | string | Human-readable exchange name, for example NASDAQ |
| otcMarket | string | OTC market name; empty if not applicable |
| otcTier | string | OTC market tier; empty if not applicable |
| type | string | Instrument type, for example STOCK |
| name | string | Company name |
| companyStandardName | string | Standardized issuer name |
| description | string | Instrument description |
| sector | string | Sector classification |
| industry | string | Industry classification |
| currency | string | Trading currency, ISO 4217 |
| issuerName | string | Issuer name |
| issuerShortName | string | Short issuer name |
| shortDescription | string | Short instrument description |
| primary | boolean | Whether this is the primary listing |
Price and session
| Field | Type | Description |
|---|---|---|
| open | number | Session open price |
| high | number | Session high price |
| low | number | Session low price |
| lastTradePrice | number | Last trade price |
| lastTradeTime | integer | Last trade timestamp, Unix milliseconds |
| size | integer | Last trade size |
| volume | integer | Cumulative session volume |
| change | number | Absolute change versus previous close |
| changePercent | number or null | Percent change versus previous close |
| previousClosePrice | number or null | Previous close price |
| previousCloseDate | string | Previous close date and time, UTC, YYYY-MM-DD HH:MM:SS |
Bid and ask
| Field | Type | Description |
|---|---|---|
| bidPrice | number | Best bid price |
| bidSize | integer | Best bid size |
| bidTime | integer | Best bid timestamp, Unix milliseconds |
| askPrice | number | Best ask price |
| askSize | integer | Best ask size |
| askTime | integer | Best ask timestamp, Unix milliseconds |
Extended hours
| Field | Type | Description |
|---|---|---|
| ethPrice | number | Extended-hours last price |
| ethVolume | integer | Extended-hours volume |
| ethTime | integer | Extended-hours last trade timestamp, Unix milliseconds |
Averages and 52-week range
| Field | Type | Description |
|---|---|---|
| fiftyDayAveragePrice | number | 50-day moving average price |
| hundredDayAveragePrice | number | 100-day moving average price |
| twoHundredDayAveragePrice | number | 200-day moving average price |
| averageVolume | integer | Average daily volume |
| fiftyTwoWeekHigh | number | 52-week high price |
| fiftyTwoWeekLow | number | 52-week low price |
Fundamentals
| Field | Type | Description |
|---|---|---|
| marketCap | integer | Market capitalization |
| sharesOutstanding | integer | Shares outstanding |
| sharesFloat | integer | Free-float shares |
| pe | number | Trailing price-to-earnings ratio |
| forwardPE | number | Forward price-to-earnings ratio |
| dividendYield | number | Dividend yield as a decimal fraction, for example 0.0034 means 0.34 percent |
| dividend | number | Dividend per share |
| payoutRatio | number | Dividend payout ratio as a decimal fraction |
Snapshot
| Field | Type | Description |
|---|---|---|
| timestamp | integer | Snapshot timestamp, Unix seconds |
Response Codes
| Code | Meaning |
|---|---|
| 200 | Success. Note that an empty result is also a 200 — unresolved symbols do not produce an error |
| 401 | Missing or invalid API token |
| 403 | Your subscription does not include live data access for the requested symbol |
| 422 | Validation error — the s parameter is missing or empty; the body names the offending field |
Live v2 vs Live v1
Live v2 for US Stocks gives you the quote itself: the last trade with its event time, the full bid and ask with sizes and their own timestamps, and reference context such as rolling averages, the 52-week range, market cap, P/E, dividends, and issuer fields. It is limited to US listed stocks and ETFs, and it suits quote tiles, watchlists, and any interface that needs bid, ask, and timing detail.
Live v1 (Live Delayed Data API) returns a smaller delayed snapshot of the same shape: the latest price plus the session open, high, low and cumulative volume, the previous close, and the change. It carries no bid, ask, or trade event times, and it is multi-asset — US and global stocks, Forex, and cryptocurrencies.
Neither endpoint returns one-minute bars. Both are snapshots: the open, high and low describe the session as a whole and stay put as the session runs, while the last price moves and the volume accumulates. If you need OHLCV per minute, per five minutes or per hour, that is the Intraday Historical Data API.
In short: choose Live v2 when you need quote-level detail for US stocks and ETFs; choose Live v1 when a compact delayed price is enough and you need it across several asset classes; choose Intraday Historical when you need bars, and the WebSockets API when you need a live push stream rather than a pull snapshot.