High Granular Tick Data API: US Stocks Learn more

Live OHLCV Stock Prices API: US & Global Stocks, Currencies

EODHD APIs offer one of the best ways for trading enthusiasts, developers, and data analysts to incorporate live financial data into their decision-making projects, with a delay of 15-20 min covering almost all stocks on the market and 1 min delay for Forex — 994 active pairs as of August 2026, a set that moves as pairs are listed and retired, and the exchange symbol list always returns the current one.

Check out our new live dataset for US stocks only but with extended quote.

Compare current live data with similar data feeds we offer:

AspectReal-Time (WebSockets)Live (Delayed)Intraday Historical
TransportWebSocket (push)HTTPS REST (pull)HTTPS REST (pull)
Latency / Freshness~live (<50 ms transport)Stocks: 15–20 min delay; Currencies: ~1 minFinalized ~2–3 h after US after-hours close
Data typesUS trades & quotes; FX ticks; crypto ticksLast price plus session OHLC snapshot (1-min updates), not minute barsOHLCV bars at 1m / 5m / 1h
Time rangesn/a (streaming)n/a (snapshot feed)1m: 120 d · 5m: 600 d · 1h: 7200 d
Markets & assets*US stocks (pre/post supported), Forex & Digital CurrenciesUS & Global StocksForex & Digital CurrenciesUS & Global StocksForex & Digital Currencies
Best forDashboards, signals, market-making toolsQuote tickers, watchlists, lightweight UIsBacktests, analytics, charting

* Get the full list of covered tickers.

Overview

The Live (Delayed) Data API returns the latest delayed snapshot for a symbol: the current price plus the session open, high, low and volume, the previous close, and the change, refreshed about once a minute. It covers US and global stocks, ETFs, funds, forex, and cryptocurrencies. Request one symbol in the path, or several at once with the s parameter. Each symbol returns a single quote object.

Prices are delayed: 15-20 minutes for stocks and about 1 minute for forex. For true real-time trades and quotes use the WebSockets Real-Time API instead.

This is a snapshot, not a one-minute bar. The open, high, low and volume describe the whole trading session so far and stay put as the session runs — only the close field moves, and it carries the latest delayed price rather than the close of any particular minute. If you need OHLCV per minute, per five minutes or per hour, use the Intraday Historical Data API.

Live (Delayed) Quote

Retrieve the latest delayed quote for a symbol. The path segment is the symbol in TICKER.EXCHANGE form, for example AAPL.US or EUR.FOREX.

https://eodhd.com/api/real-time/{ticker}?api_token=YOUR_TOKEN

Method GET. Authentication by api_token. The default output is CSV; add fmt=json for a JSON object.

Test Drive with "DEMO" Key
  1. 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.
  2. 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.
  3. We recommend to explore our plans, starting from $19.99, to access the necessary type of data without limitations.

Parameters

api_token string required
Your EODHD API token
s string optional
Additional ticker symbols, comma-separated, to return several quotes in one request. Up to 15-20 per request is recommended for performance
fmt enum optional
Output format. Allowed values: csv, json (Default: csv)
filter enum optional
Return only one field’s value instead of the full quote. Allowed values: code, timestamp, gmtoffset, open, high, low, close, volume, previousClose, change, change_p

Request Example

Here is an example of the live (delayed) quote for AAPL (Apple Inc). The demo token is limited to a small set of tickers — AAPL.US, MSFT.US, TSLA.US, AMZN.US, VTI.US, BTC-USD.CC and EUR.FOREX — and anything else returns HTTP 403.

https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json"
(Sign up for free to get an API token)
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/real-time/AAPL.US?api_token=demo&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();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/real-time/AAPL.US?api_token=demo&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")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Response Example

{
  "code": "AAPL.US",
  "timestamp": 1783974420,
  "gmtoffset": 0,
  "open": 317.015,
  "high": 323.45,
  "low": 315.78,
  "close": 317.31,
  "volume": 43138419,
  "previousClose": 315.32,
  "change": 1.99,
  "change_p": 0.6311
}

Response Fields

FieldTypeDescription
codestringTicker with exchange suffix
timestampintegerQuote time as Unix time, seconds since 1970-01-01 UTC
gmtoffsetintegerOffset from UTC, in seconds
opennumberSession opening price
highnumberSession high
lownumberSession low
closenumberLatest delayed price
volumeintegerSession volume
previousClosenumberPrevious session close
changenumberAbsolute change versus previous close
change_pnumberPercentage change versus previous close

Sign up & Get Data

Multiple Tickers with One Request

Add the s parameter to fetch several symbols in one request. List the extra symbols comma-separated; the symbol in the path is always included first. For example, this returns AAPL.US, VTI, and EUR.FOREX together, as a JSON array of quote objects.

https://eodhd.com/api/real-time/AAPL.US?s=VTI,EUR.FOREX&api_token=demo&fmt=json
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/real-time/AAPL.US?s=VTI,EUR.FOREX&api_token=demo&fmt=json"
(Sign up for free to get an API token)
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/real-time/AAPL.US?s=VTI,EUR.FOREX&api_token=demo&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();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/real-time/AAPL.US?s=VTI,EUR.FOREX&api_token=demo&fmt=json'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/real-time/AAPL.US?s=VTI,EUR.FOREX&api_token=demo&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")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Single Value Output

Set the filter parameter to a field name to return only that field’s value as a single bare value, instead of the full quote. This is convenient for spreadsheet functions such as the Excel WEBSERVICE function. For example, filter=close returns the latest price and filter=change_p returns the percentage change.

https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json&filter=close
(Sign up for free to get an API token)
curl --location "https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json&filter=close"
(Sign up for free to get an API token)
$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => 'https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json&filter=close',
    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();
}
(Sign up for free to get an API token)
import requests

url = f'https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json&filter=close'
data = requests.get(url).json()

print(data)
(Sign up for free to get an API token)
library(httr)
library(jsonlite)

url <- 'https://eodhd.com/api/real-time/AAPL.US?api_token=demo&fmt=json&filter=close'
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")
}
(Sign up for free to get an API token)
New to coding? Our ChatGPT assistant can generate code in any language tailored to our API. Simply describe how you want to use our data, and get a working piece of code. Don’t forget to replace the API token with your own.

Try it now (it's free)!

How to use it (YouTube)

Timestamp Field Explanation

We use Unix time for our timestamp field. Unix time represents a point in time by counting the number of seconds that have passed since 00:00:00 Coordinated Universal Time (UTC) on Thursday, January 1, 1970. You can easily check and convert all our timestamps using this tool.

Compare plans and find your fit
Free and paid plans for individual and commercial use
Go to Pricing
Chat