List historical stock prices
Return a cursor-paginated series of daily prices for one supported security
identifier. Prices are unadjusted by default: every open, high, low,
and close is exactly what traded on the day, ignoring later corporate actions.
Pass adjustment to restate them in current terms.
/v3.0.0/stock-prices/{identifier}Plan Access
Free
(Your plan)
Individual
$29/mo
Professional
$89/mo
Plan History
Free
(Your plan)
2 years
Individual
$29/mo
5 years
Professional
$89/mo
All available
curl "https://api.roic.ai/v3.0.0/stock-prices/NASDAQ:AAPL?apikey=YOUR_API_KEY&date.gte=2025-01-01&date.lt=2026-01-01&order=asc"{
"data": [
{
"date": "2026-07-17",
"open": 210.61,
"high": 213.34,
"low": 209.85,
"close": 212.41,
"volume": 48923700
}
],
"symbol": "NASDAQ:AAPL",
"currency": "USD",
"next_page_url": null,
"previous_page_url": null
}Bulk downloads
Unadjusted daily stock prices for all tickers are available as bulk CSV files. You can download them directly from the bulk stock prices page, without API requests.
Parameters
Path parameters
identifierstringrequiredA ticker ID, an exchange and symbol separated by a colon (e.g. NASDAQ:AAPL), or a FIGI.
NASDAQ:AAPLtkr_cO46h8pgSu9QqyBBG000B9XRY4Query parameters
datestringoptionalPass a YYYY-MM-DD date directly for an exact trading-date match. For a range, combine the modifiers below, for example, date.gte=2025-01-01&date.lt=2026-01-01.
+ Show filter modifiers- Hide filter modifiers
date.gtestringReturn prices whose date is greater than or equal to the given date.
date.gtstringReturn prices whose date is strictly greater than the given date.
date.ltestringReturn prices whose date is less than or equal to the given date.
date.ltstringReturn prices whose date is strictly less than the given date.
adjustmentstringoptionalHow OHLC prices are restated in current terms. none returns prices exactly as they traded on the day. splits restates them for later capital actions: stock splits, reverse splits, spin-offs and special distributions. total_return restates for those capital actions and for ordinary cash dividends. Volume is always the raw session volume.
noneValues: nonesplitstotal_returnorderstringoptionalSort by trading date (date).
descValues: ascdesclimitintegeroptionalMaximum number of resources to return.
250Min: 1Max: 1000pagestringoptionalToken to request the next page of data. Each response returns ready-made next_page_url and previous_page_url (null on the last and first page, respectively) that repeat your filters with this token. They are relative and carry no credentials: prefix the API host and pass apikey separately, or keep sending your Authorization header.
Response
A page covers one ticker, so the response states symbol and currency once on
the envelope, next to the page URLs, and each item in data is one daily price
identified by its date. Both envelope fields are present even when data is
empty, so a filtered-out page still tells you what you asked for.
By default the open, high, low, and close are unadjusted, matching the
prices printed on the exchange that day. When you request an adjustment, those
same four fields are restated for every subsequent qualifying event, so a
continuous series is comparable across them. volume is always the raw session
volume.
Response fields
dataarray of objectsArray of daily price resources for the current page.
+ Show child attributes- Hide child attributes
datestringThe trading day the prices refer to, in YYYY-MM-DD format.
opennumberPrice of the first trade of the regular session, in currency units. Unadjusted unless you pass adjustment.
highnumberHighest price traded during the session. Unadjusted unless you pass adjustment.
lownumberLowest price traded during the session. Unadjusted unless you pass adjustment.
closenumberPrice of the last trade of the regular session. Unadjusted unless you pass adjustment.
volumenumberTotal number of shares traded during the session.
symbolstringQualified symbol every quote in data belongs to, e.g. NASDAQ:AAPL. A page covers one ticker, so the symbol is stated once here instead of on every quote. Present even when data is empty.
currencystringISO 4217 code every quote in data is priced in, e.g. USD. Matches the ticker's trading currency, and a ticker is only ever quoted in one currency. null when the page carries no priced quote.
next_page_urlnullableURL of the next page of results, or null when there are no more pages. Request it unchanged to continue paging.
previous_page_urlnullableURL of the previous page of results, or null on the first page.
Examples
Combine the filters below to answer common questions. Each request is runnable.
The most recent daily prices for one company, unadjusted:
curl "https://api.roic.ai/v3.0.0/stock-prices/NASDAQ:AAPL?apikey=YOUR_API_KEY&order=desc&limit=10"Prices from one exact trading day:
curl "https://api.roic.ai/v3.0.0/stock-prices/NASDAQ:AAPL?apikey=YOUR_API_KEY&date=2025-09-30"One year of prices in ascending date order, using a date.gte=2025-01-01 lower
bound and a date.lt=2026-01-01 upper bound:
curl "https://api.roic.ai/v3.0.0/stock-prices/NASDAQ:AAPL?apikey=YOUR_API_KEY&date.gte=2025-01-01&date.lt=2026-01-01&order=asc"A window spanning Apple's 4:1 split of 31 August 2020, restated for capital
actions with adjustment=splits. The 28 August close reads 124.8075 instead
of the 499.23 that printed on the day, so the series stays continuous across
the split:
curl "https://api.roic.ai/v3.0.0/stock-prices/NASDAQ:AAPL?apikey=YOUR_API_KEY&date.gte=2020-08-26&date.lte=2020-09-02&adjustment=splits"The same window with adjustment=total_return, folding cash dividends in as
well. That same close reads 121.0600, the remaining 3% being every dividend
Apple has paid since:
curl "https://api.roic.ai/v3.0.0/stock-prices/NASDAQ:AAPL?apikey=YOUR_API_KEY&date.gte=2020-08-26&date.lte=2020-09-02&adjustment=total_return"