TickerDataHouse
STATUS

API Reference

Two read-only HTTP endpoints serve daily OHLCV bars for US equities and ETFs — a survivorship-bias-free archive going back to 1990, kept current by a nightly update. Both endpoints require an API key and are intended for server-side use.

Base URL

https://api.tickerdatahouse.com

Authentication

Every request must carry an x-api-key header. The data is not public: a missing or wrong key returns 401 with {"error": "UNAUTHORIZED"} and nothing else.

Responses carry no CORS headers, so the API cannot be called directly from a browser. Call it from your backend and proxy the result if you need it client-side.

GET /price?symbol=SPY
x-api-key: <your-key>

Endpoints

GET /price closing prices only

Returns the daily closing price series for one symbol. This is the lighter payload — use it when you only need a price line.

# request
curl -H "x-api-key: $KEY" \
  "https://api.tickerdatahouse.com/price?symbol=SPY&since=2026-06-25"

# response · 200
{
  "symbol": "SPY",
  "price": [
    { "date": "2026-06-25", "close": 734.3 },
    { "date": "2026-07-08", "close": 745.4 }
  ]
}
GET /stock full OHLCV candles

Returns the full daily candle for one symbol. Keys are abbreviated to keep long histories small: d date, o open, h high, l low, c close, v volume.

# request
curl -H "x-api-key: $KEY" \
  "https://api.tickerdatahouse.com/stock?symbol=NVDA&since=2024-01-01"

# response · 200
{
  "symbol": "NVDA",
  "bars": [
    { "d": "2024-01-02", "o": 49.24, "h": 49.29,
      "l": 47.58, "c": 48.15, "v": 411254000 }
  ]
}
GET /universe which instruments exist

Returns the current ticker universe — the set of storage keys the other two endpoints will answer for, stocks as well as the tracked indices and ETFs (SPY, $VIX, TQQQ, the sector XL* family). By default only active issues are listed; delisted ones are frozen at their last trading day and are included with all=1. symbol is the storage key, base_ticker is the ticker the daily update follows. Indices and ETFs carry no name or exchange — the universe file does not describe them.

# request
curl -H "x-api-key: $KEY" \
  "https://api.tickerdatahouse.com/universe?type=Common"

# response · 200
{
  "count": 5812,
  "universe": [
    { "symbol": "NVDA", "base_ticker": "NVDA",
      "name": "NVIDIA Corp Common", "exchange": "NASDAQ",
      "delisted": false, "is_nasdaq": true,
      "security_type": "Common" }
  ]
}

Query parameters

symbolREQUIRED
On /price and /stock. The storage key of the instrument, which is not always the Yahoo ticker. Indices keep the Norgate convention — ask for $VIX, not ^VIX. Delisted issues carry a -YYYYMM suffix and are frozen at their last trading day. Case-insensitive. Omitting it returns 400 SYMBOL_REQUIRED rather than defaulting to some other instrument, so a typo in the parameter name fails loudly.
tOPTIONAL
Short alias for symbol. If both are given, symbol wins.
sinceOPTIONAL
Inclusive lower bound as YYYY-MM-DD. There is no upper bound and no pagination: everything from since to the latest bar comes back in a single response. Omit it and you get the full history, which for a 1990-vintage symbol is roughly nine thousand rows.
allOPTIONAL
On /universe. Set to 1 to include delisted issues alongside the active ones. They are frozen at their last trading day, so a screen run against today's market usually wants the default.
typeOPTIONAL
On /universe. Restrict to one security type, case-insensitive: Common, ETF, Index, Unit, CEF, DepositaryReceipt, Warrant, Preferred, Right, HOLDR, Other. An unknown type returns 400 SECURITY_TYPE_INVALID rather than an empty list, so a typo fails loudly.

Status codes

200
Success. Days where the close is missing are omitted from the series entirely.
400 SYMBOL_REQUIRED
No symbol (or t) was supplied.
400 SECURITY_TYPE_INVALID
The type given to /universe is not one of the known security types.
401 UNAUTHORIZED
The x-api-key header is missing or does not match.
404 SYMBOL_NOT_FOUND
No stored series for that key — most often a Yahoo-style ticker where the storage key differs, or a misspelled delisting suffix.
500 INTERNAL
Unexpected failure. The body carries a detail field for diagnostics.
# error body shape
{ "error": "SYMBOL_NOT_FOUND", "detail": "Nincs ár-adat: XYZ" }

Data notes

Prices are split- and dividend-adjusted and rounded to four decimals; volume is an integer, and a missing volume reads as 0.

The nightly job appends the latest session on weekdays after the US close. When a new dividend causes the provider to re-adjust an entire history, a periodic full rebuild resynchronises the affected symbols — so a bar you fetched last month may be re-adjusted, and long-lived caches should be refreshed rather than appended to.

Coverage, freshness and the outcome of the last run are published on the status page.