Splits
Splits and reverse splits, including stock dividends paid in the listing's own shares, which the source records as splits (forward_split), with split ratios and cumulative price adjustment factors. Splits at whose ex-date prices did not move, and spin-off or rights-offering price adjustments the source records as splits but which distribute no shares, are not listed; /v1/eod still applies the latter to prices (not volume), so adjusted bars before one differ from the product of the listed splits. Filters from and to apply to execution_date as the source recorded it, which differs from the published date only for a split recorded on a day the exchange was closed. A split usually reaches the feed before it executes; one can arrive up to a day after, and until it does the bars of its execution_date are on the new share basis without a split record. Default order: requested symbol, then execution_date ascending; without symbols or instrument_ids, execution_date ascending across listings. Select listings with symbols or instrument_ids, not both; order=desc returns each listing's rows newest first. Without symbols or instrument_ids, returns every entitled listing's rows (optionally only those on exchanges) for a from-to window of at most 366 days counting both, newest first with order=desc; plans limited to named symbols see only those. Each such row names its listing by its symbol at symbol_at, or its last symbol before then. Requires corporate-actions.read and an entitled market. An empty data array is a successful result. When none of the requested symbols resolves, the response is 404 symbol-not-resolved, whatever the size of the list; when at least one does, the others are reported in meta.errors.
/v1/splits- Required capability
- corporate-actions.read
- Data timing
- As published by the source
- Credits
- 5 credits per symbol; 500 credits without symbols (whole market).
Parameters
limitintegeroptional · query- Maximum records per page, from 1 to 500; default 100.Default:
100 cursorstringoptional · query- Opaque cursor, expires after one hour. Keep all query parameters unchanged. Changes to entitlements can invalidate it.
If-None-Matchstringoptional · header- ETag from a previous response. Authorization is rechecked before returning 304, and a 304 costs no credits.
symbolsstringoptional · query- Comma-separated MIC:TICKER symbols (crypto pairs are CRYPTO:BTC-USD, currency pairs FOREX:EUR-USD, indices INDEX:GSPC, bonds BOND and the ISIN, such as BOND:US00037BAF94) or bare tickers, which resolve to the exchange listing that ticker; neither part is case-sensitive, and two spellings of one listing count as a repeated value. A bare ticker that names no listing as written is also read in the common vendor spellings: with an exchange suffix (RY.TO, SHEL.L, VOD.LSE, BHP.AX), ^GSPC for INDEX:GSPC, and EURUSD=X or EURUSD for FOREX:EUR-USD. At most 100, further limited by the effective plan and key scope. A symbol names the listing recorded under it at symbol_at; at a date before any ticker is recorded for a listing, the earliest ticker recorded for it selects it as well (see symbol_at). Supply symbols or instrument_ids, or omit both for a market-wide request, which from and to must bound.
instrument_idsstringoptional · query- Comma-separated stable instrument IDs (the instrument_id of each row, and of the research endpoints) instead of symbols; each selects its listing at any date, including history from before its earliest recorded ticker and listings that no longer trade. Rows carry the symbol the listing had at symbol_at, or where it had none then, its symbol at as_of, else the last one it carried by as_of, else its first. At most 100. Cannot be combined with symbols.
exchangesstringoptional · query- Market-wide requests only (no symbols or instrument_ids): comma-separated ISO MIC codes, at most 100. Defaults to every exchange of the entitled markets. A malformed or repeated code returns 422 invalid-exchanges, a MIC the API does not serve 404 exchange-not-found, and one outside the key's markets 403 market-not-entitled.
symbol_atstringoptional · query- Resolve symbols as they were assigned at the end of this UTC date (YYYY-MM-DD); defaults to as_of. Only listings the security master holds resolve: it was built in September 2026 and records delistings from then on, so most issuers delisted earlier, such as TWTR or SIVB, resolve at no date. A ticker names the listing that carries it at symbol_at, and every row of a from/to range carries that symbol, rows from before the listing took the ticker included: a ticker reused after its earlier holder delisted returns the new holder's older rows, so set symbol_at inside the range to name the listing that traded under the ticker then. Tickers are recorded only where there is evidence for them (for many listings from 2003, though prices start earlier), and none is asserted earlier. As a lookup convenience, a date before a listing's earliest recorded ticker still finds the listing by that ticker when no record contradicts it (no listing is recorded under the ticker by that date, and the listing has no earlier ticker): its rows carry the symbol as a label and meta.unrecorded_symbols lists it. A date before the listing's first row returns 200 with no-data, as a to before it does. A ticker another listing held, or one the listing was renamed from or to, returns 404 naming the date and the listing; instrument_ids select a listing at any date.
as_ofstringoptional · query- Knowledge cutoff as a UTC date (YYYY-MM-DD): the response reflects what was known by the end of that day. Defaults to now; cannot be in the future. A date from before the dataset's knowledge history returns 422 point-in-time-unavailable naming the earliest one, which GET /v1/datasets lists as earliest_as_of.
fromstringoptional · query- First execution_date to include (YYYY-MM-DD). Required without symbols or instrument_ids.
tostringoptional · query- Last execution_date to include (YYYY-MM-DD); on or after from, so from equal to to selects one day. Required without symbols or instrument_ids, at most 365 days after from.
known_fromstringoptional · query- First UTC date (YYYY-MM-DD, inclusive) on which a revision became known. Filters eligible revisions; not a change feed or deletion log.
known_tostringoptional · query- Last UTC date (YYYY-MM-DD, inclusive) on which a revision became known; on or after known_from.
orderstringoptional · query- Direction on execution_date, asc (default) or desc; ties keep their internal order in the same direction. The cursor is bound to it.
Default:ascdescasc formatstringoptional · query- Response format. csv returns the data rows with a header row, for spreadsheet functions such as IMPORTDATA; nested fields become dotted columns and lists one JSON array cell, the next page cursor is returned in X-Next-Cursor and meta.errors in X-Meta-Errors. A result without rows is the header row alone, listing the documented fields of a row. Default json, or csv when format is omitted and the Accept header ranks text/csv above JSON; a format the Accept header does not admit returns 406 not-acceptable.
jsoncsv
Response fields
Returns data as an array of records. All example values are illustrative.
idstring- Stable public record ID; unchanged when the split is revised.
instrument_idstring- Stable instrument ID of the listing; the same value as security_id.
security_idstring- Deprecated: the same stable public ID as instrument_id, which replaces it.Being superseded by instrument_id, which carries the same value. Read instrument_id where present; security_id remains for compatibility.
symbolstring- symbol
exchange_micstring- exchange mic
execution_datestring- Ex-date: the first trading date on the post-split basis. A split the source dates on a day the listing's exchange was closed is given the next session (a split recorded for 2001-09-12, during the closure of US markets, executes on 2001-09-17).
split_fromstring- Shares held before the split: a 4-for-1 split is 1 to 4, a 1-for-10 reverse split 10 to 1.
split_tostring- Shares held after the split for split_from shares before it.
adjustment_typestring- reverse_split when split_to is below split_from, forward_split when it is not. The current sources record a stock dividend paid in the listing's own shares as a split, so it is forward_split; stock_dividend is reserved.
forward_splitreverse_splitstock_dividend historical_adjustment_factorstring · null- Cumulative price factor for prices before execution_date: the exact product of (split_from / split_to) over this split and every later executed split of the listing, rounded half up to 24 places. /v1/eod?adjustment=split multiplies raw prices by the same product as a fraction, and by the price factor of any later spin-off or rights-offering adjustment the source records as a split but which distributes no shares (not listed here), and rounds the result to 6 places. A 4-for-1 split followed by a 2-for-1 split gives 0.125 for the first and 0.5 for the second. Null while execution_date is after the as_of date, and for cancelled splits.
announced_atstring · null- When the split was announced, if the source states it. The current split source gives only the execution date and ratio, so it is null.
is_cancelledboolean- is cancelled
Response metadata
Responses include meta.timezone. Dataset responses include next_cursor; health and exports have their own metadata. Request tracing uses the X-Request-ID header.
When something goes wrong
An empty data: [] is a successful query with no matching records. Invalid symbols, permissions and malformed parameters produce an RFC 9457 problem with an actionable detail.
Plans
Requires corporate-actions.read. Access, recency and history depth come from the plan definitions the API enforces.
| Plan | Access | Recency | History |
|---|---|---|---|
| Free | Included | As published | 5 years |
| Developer | Included | As published | 5 years |
| Pro | Included | As published | 15 years |
| Commercial | Included | As published | Full history |
| Scale | Included | As published | Full history |
Free requests are limited to AAPL, NVDA, JNJ, PEP, MSFT, SPY, QQQ.
History is how far back a plan may request. How far records actually go for a symbol is history_from in dataset coverage. Nothing is real-time. Compare plans