MCP Server For Financial Data by EODHD 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 1100+ Forex pairs.

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 ticksLatest OHLCV snapshot (1-min updates)OHLCV 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 OHLCV snapshot for a symbol: open, high, low, close, volume, previous close, and change, refreshed at a one-minute frequency. 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.

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 only works for AAPL.US, TSLA.US, VTI.US, AMZN.US, and BTC-USD.

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