Market data (licensed)

Daily Stock Prices (EOD)

Daily end-of-day closing-price history for US-listed stocks, ETFs, and mutual funds, including delisted tickers, so historical analysis is survivorship-bias-free. Coverage reaches back as far as 1962 for the oldest names. Each row carries the as-traded close, the split- and dividend-adjusted close (chart this one), the dividend paid with that ex-date, and the split factor. One call returns up to 5,000 daily rows, the newest 5,000 by default, with a cursor to page back further; weekly/monthly downsampling keeps multi-year charts compact. Paid plans only. Close Prices from Tiingo.com.

EndpointGET /v1/daily-prices
SourceTiingo (licensed market data)
Authx-api-key, paid plans only (Basic and up)

Live from the data

Loading the latest numbers…

What it returns

One call = one ticker. Use adj_close for charts and return calculations (as-traded close has artificial cliffs at splits). frequency=weekly|monthly returns the last bar per period with dividends summed and split factors compounded. History depth follows your plan: Basic = 5 years, Pro and Business = full history. Unlike KeyVex's public-record datasets, this is licensed third-party market data, no bulk export, attribution required (Close Prices from Tiingo.com). See the live example below for the full field set.

Filters

tickerTicker symbol, e.g. 'AAPL', 'SPY', 'BRK-B' (hyphen for share classes).
sinceISO date YYYY-MM-DD inclusive. Default: earliest your plan allows. Setting since pages forward from it: to read the next page of a long window, pass the previous response's next_since.
untilISO date YYYY-MM-DD inclusive. Default: latest available. Without since, a long window returns its newest 5,000 rows; to read the page before, pass the previous response's prev_until here.
frequencyDownsampling: daily, weekly or monthly. Default daily. Use weekly or monthly for multi-year charts.
include_ohlcAdd open/high/low/volume (+ adjusted variants) to each row. Default false. Aggregated per period on weekly/monthly.

Example request

curl "https://api.keyvex.com/v1/daily-prices?ticker=AAPL&since=2026-10-06&until=2026-10-09" \
  -H "x-api-key: YOUR_KEY"

Response

{
  "ticker": "AAPL",
  "price_ticker": "AAPL",
  "results": [
    { "date": "2026-10-06", "close": 333.63, "adj_close": 333.63, "div_cash": 0, "split_factor": 1 },
    { "date": "2026-10-07", "close": 336.67, "adj_close": 336.67, "div_cash": 0, "split_factor": 1 },
    { "date": "2026-10-08", "close": 340.42, "adj_close": 340.42, "div_cash": 0, "split_factor": 1 },
    { "date": "2026-10-09", "close": 336.64, "adj_close": 336.64, "div_cash": 0, "split_factor": 1 }
  ],
  "first_available": "1980-12-12",
  "last_available": "2026-10-12",
  "is_active": true,
  "attribution": "Close Prices from Tiingo.com",
  "count": 4,
  "query": { "ticker": "AAPL", "since": "2026-10-06", "until": "2026-10-09" },
  "freshness": {
    "checked_at": "2026-10-13T22:20:27.328Z",
    "datasets": [
      {
        "dataset": "Tiingo EOD prices sync",
        "last_updated": "2026-10-13T01:25:23.077Z",
        "age_hours": 20.9,
        "data_last_added": "2026-10-13T01:25:23.077Z",
        "data_age_hours": 20.9,
        "expected_cadence": "daily (9:05 PM ET)",
        "status": "current"
      }
    ]
  }
}

Rows run oldest to newest. A window holding more than 5,000 rows is cut, never silently: without since you get the newest 5,000 with truncated: true and prev_until (call again with until=prev_until for the page before); with since you get the 5,000 from that date with next_since. On the Basic plan the response also carries history_floor and history_note, the start of your 5-year window.

Example questions you can answer

Related datasets

Query Daily Stock Prices (EOD) from your AI

Hand any AI your key + the OpenAPI spec and it can pull this dataset directly. Paid plans only (Basic and up): a free key does not include market-price data.

See plans OpenAPI spec → REST docs →
← All 60+ datasets