Tickers
US (reference data). Every ticker registered with the SEC, with its CIK, company name and exchange. Public domain.
What this is
The US listed universe: 10,398 companies with a ticker registered with the SEC, each with its Central Index Key, legal name and exchange.
curl -s https://snapdata.dev/api/v1/tickers/us/aapl.jsonThere are no prices in this dataset, and there will not be. Daily US equity prices are not redistributable from any free source. Every free price API either forbids redistribution or requires a key per consumer, and this project's whole product is republishing data under a stated licence. Publishing prices we are not permitted to redistribute would be dishonest, so we publish the parts that are public domain and say plainly what is missing.
Why the CIK is the point
The CIK is how the SEC identifies a filer. With it, every filing and every XBRL financial fact is one predictable URL away. Building ticker → CIK is the annoying step, so each file has it already, along with the URLs it unlocks:
{
"ticker": "AAPL",
"cik": "0000320193",
"name": "Apple Inc.",
"exchange": "Nasdaq",
"links": {
"filings": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0000320193&type=10-K",
"facts": "https://data.sec.gov/api/xbrl/companyfacts/CIK0000320193.json",
"submissions": "https://data.sec.gov/submissions/CIK0000320193.json"
}
}The CIK is zero-padded to ten digits because that is the form the SEC's own URLs
require. cik_number carries the bare integer if you would rather build them
yourself.
Endpoints
| Path | What it returns |
|---|---|
/api/v1/tickers/us/{symbol}.json | One company. aapl, AAPL, either works |
/api/v1/tickers/us/latest.json | All 10,398, full records |
/api/v1/tickers/us/index.json | Compact search index, 124 KB gzipped |
/api/v1/tickers/us/exchange/nyse.json | One exchange (nyse, nasdaq, otc, cboe, none) |
The symbol in the path is case-insensitive; R2 keys are not, so the router lower-cases it and there is exactly one object per symbol.
The search index
index.json carries positional tuples rather than objects:
{ "fields": ["ticker", "name", "exchange"],
"rows": [["A", "AGILENT TECHNOLOGIES, INC.", "NYSE"]] }Repeating three keys 10,398 times is the difference between a file a browser will fetch and one it will not. At 124 KB gzipped the whole universe fits in the client, which is how ticker search works with no database and no request per keystroke.
Not a price series
This is reference data, so it does not follow the shape the rest of the API
uses. There are no series/30d windows, no is_trading_day, no status and no
dated snapshots — a ticker has no trading day and no value, and inventing those
fields to fit the envelope would be a lie about what the data is.
Cadence
Refreshed monthly, not every three hours. The listed universe changes a handful of times a month, when a company lists, delists or renames. Rebuilding 10,404 objects every three hours to discover nothing had changed took over ten minutes a run and produced nothing.
Licence
US Government work, so public domain. No key, no attribution requirement, no redistribution limit. That is rare in this space and is most of the reason this dataset exists.