Price fields
Look up every field a prices row can contain, with its type, unit, nullability and meaning.
These are the fields of a row returned by Prices, GET /v1/prices/{ticker}. Every row carries five identity fields. Twelve data fields are selectable with fields, and seven companion fields appear alongside the data fields they describe.
Units are the same on every row. Prices are in USD per share, as traded. volume and shares_outstanding are numbers of shares, not millions. market_cap is in USD, not millions. return_daily is a decimal ratio, not a percentage. split_ratio is new shares per old share. Dates are ISO YYYY-MM-DD strings. A value that is not recorded is null, never 0.
Identity fields
Returned on every row, whatever fields says.
| field | type | unit | nullable | description |
|---|---|---|---|---|
entity_id | int | none | no | Security id: one share class of one company. GOOGL is 10030636 and GOOG is 10003590. The same id is used by Resolve, Search, Index membership and Institutional holdings. See Tickers and entities. |
ticker | str | none | yes | Symbol in force on the row's date. A later symbol is never applied to earlier rows, so Booking Holdings reads PCLN in 2016 and BKNG today. Class shares read in hyphen form, such as BRK-B. null on rows before the security's first recorded symbol, such as IBM before 1962-07-02. |
entity_name | str | none | no | Current name of the security as recorded, such as APPLE INC or WHIRLPOOL CORP — DP SHS SER A. The same on every row of a series. |
gics_sector | str | none | yes | GICS sector of the issuer, such as Information Technology. null when the issuer has no GICS classification, such as the ETF GLD. |
date | str | ISO date | no | Trading date of the bar. |
Price and volume fields
| field | type | unit | nullable | description |
|---|---|---|---|---|
open | float | USD per share | yes | Opening price as traded. null where no opening price is recorded, which includes many older rows, such as IBM in 1973 and Apple in 1980. |
high | float | USD per share | yes | Highest price as traded. On a midpoint row, the higher of the two quotes the midpoint is taken from. |
low | float | USD per share | yes | Lowest price as traded. On a midpoint row, the lower of the two quotes. |
close | float | USD per share | yes | Closing price as traded. Never adjusted: it steps at a split. On a midpoint row, the midpoint of the bid and ask. null on a trading day with no recorded price. |
price_basis | str | none | no | trade when the close is a traded price, midpoint when it is a bid/ask midpoint. Apple's early closes, from 1980-12-12 to 1982-10-01, are midpoints. Returned when any of open, high, low or close is selected. |
adj_close | float | USD per share | yes | Close restated to today's share basis for splits, stock dividends and spin-offs. Not adjusted for cash dividends. Equal to close on the latest bar. meta.adj_close_basis reads split. Removed from every row by adjust=none. null when close is. |
volume | int | shares | yes | Shares traded on the day, as traded, not split-adjusted. null where not recorded. |
return_daily | float | decimal ratio | yes | Total return from the previous close, including cash distributions and the value of spin-offs: 0.01 is 1%. Unaffected by splits. null on a security's first bar and on a day with no close. |
Listing field
| field | type | unit | nullable | description |
|---|---|---|---|---|
exchange_code | str | none | yes | Listing exchange on the row's date: NYSE, NASDAQ, AMEX, ARCA, BATS or IEX. null when the security has no recorded listing exchange, such as WHR-PA. |
Share count fields
| field | type | unit | nullable | description |
|---|---|---|---|---|
shares_outstanding | float | shares | yes | Shares outstanding for this share class on the row's date, on the same split basis as close. Taken from the latest observation on or before the date and restated for any split or stock dividend since that observation, so AAPL reads 4275634000 on 2020-08-28 and 17102536000 on 2020-08-31. null before the first observation, and when the latest observation is more than 400 days older than the row. |
market_cap | float | USD | yes | close × shares_outstanding for the requested share class only. Not millions. Returned only when fields names it. null when either input is. For the whole company across share classes, use Metrics. |
shares_as_of | str | ISO date | yes | Date of the observation behind shares_outstanding. Reported also when the count is withheld as stale. null when there is no observation. Returned with shares_outstanding or market_cap. |
shares_source | str | none | yes | Origin of the observation: filing, filing_class or archive. null when there is no observation. Returned with shares_outstanding or market_cap. |
shares_stale | bool | none | no | true when the latest observation is more than 400 days older than the row; shares_outstanding and market_cap are then null. false when there is no observation at all. Returned with shares_outstanding or market_cap. |
Corporate action fields
| field | type | unit | nullable | description |
|---|---|---|---|---|
split_ratio | float | ratio | yes | New shares per old share on the ex-date: 4 for Apple's 4-for-1 split on 2020-08-31, 25 for Booking's 25-for-1 on 2026-04-06, 0.125 for GE's 1-for-8 reverse split on 2021-08-02, 1.05 for Commerce Bancshares' 5% stock dividend on 2025-12-02. null on days without one, and on days where split_ratio_suspect is true. Spin-offs do not set it. |
split_ratio_suspect | bool | none | no | true when the day carries a capital change recorded as a ratio that is not a plain split, such as Comcast on 2026-01-05. split_ratio is then null, and adj_close and return_daily still reflect the change. Returned with split_ratio. |
dividend | float | USD per share | yes | Cash distributed per share on the ex-date, on that date's share basis, not split-adjusted. Covers ordinary, special, return-of-capital and capital-gains distributions. When a day has several, dividend is their sum. null on days without one. Cash paid when a security ends, such as merger consideration, is not a dividend: Twitter's last row, 2022-10-27, reads dividend: null, and the cash is reflected in meta.delisting. |
dividend_type | str | none | yes | Kind of distribution in dividend. Several kinds on one day are joined with commas in alphabetical order, such as capital_gains,cash_dividend. null when dividend is. Returned with dividend. |
ca_source | str | none | no | Which of the two corporate-action records answered split_ratio and dividend on the row: archive or vendor (values below). Returned on every row when split_ratio or dividend is selected. |
Values of enumerated fields
price_basis:
trade: the close is a traded price.midpoint: no trade is recorded for the close, and the close is the midpoint of the bid and ask.
shares_source:
filing: the company's share count from its SEC filings, such as Apple's from 2026.filing_class: a per-class share count from the company's SEC filings, for companies that report share classes separately, such as Alphabet'sGOOGLandGOOG.archive: the historical share-count record, such as Apple's in 2025.
dividend_type:
cash_dividend: an ordinary cash dividend.special_dividends: a special cash dividend, such as Costco's 15 USD per share on 2023-12-27.return_of_capital: a distribution classed as a return of capital, such as Kimbell Royalty Partners' 0.43 USD per unit on 2024-03-12.capital_gains: a capital-gains distribution, such as the one paid by the closed-end fund Central Securities on 2025-11-14.cash_distribution: a cash distribution on a row whoseca_sourceisvendor, such as Apple's 0.27 USD per share on 2026-08-10.
ca_source:
archive: the historical corporate-action record. Comcast's rows readarchivethrough 2025-12-31.vendor: the corporate-action record kept current with each trading day. Comcast's rows readvendorfrom 2026-01-02.
exchange_code:
NYSE: New York Stock Exchange, such asGM.NASDAQ: Nasdaq, such asAAPL.AMEX: NYSE American, formerly the American Stock Exchange, such asSEB.ARCA: NYSE Arca, such asGLD.BATS: Cboe BZX, formerly BATS, such asCBOE.IEX: Investors Exchange, such asIBKRin 2019.
Default and opt-in fields
With no fields parameter, or fields=all, a row carries the identity fields and these 11 data fields: open, high, low, close, adj_close, volume, return_daily, shares_outstanding, exchange_code, split_ratio and dividend, plus their companions. market_cap is the one opt-in field: it appears only when fields names it.
Companion fields follow the data fields you select:
price_basisappears whenopen,high,loworcloseis selected.shares_as_of,shares_sourceandshares_staleappear whenshares_outstandingormarket_capis selected.split_ratio_suspectappears whensplit_ratiois selected.dividend_typeappears whendividendis selected.ca_sourceappears whensplit_ratioordividendis selected.
fields=market_cap on its own returns the identity fields, market_cap, shares_as_of, shares_source and shares_stale:
{
"data": [
{"entity_id": 10003635, "ticker": "AAPL", "entity_name": "APPLE INC", "gics_sector": "Information Technology", "date": "2026-09-25", "market_cap": 4977636972600, "shares_as_of": "2026-07-17", "shares_source": "filing", "shares_stale": false}
],
"meta": {
...
}
}Fields on interval rows
With interval set to 3d, 1w, 1mo, 3mo, 6mo or 1y, each row covers one bucket of trading days and carries the same fields, aggregated as follows. No field exists only on interval rows.
| field | type | unit | nullable | description |
|---|---|---|---|---|
date | str | ISO date | no | First trading date in the bucket. |
ticker | str | none | yes | Symbol in force on the bucket's last trading day. |
open | float | USD per share | yes | Open of the first trading day. |
high | float | USD per share | yes | Highest high in the bucket, as traded. |
low | float | USD per share | yes | Lowest low in the bucket, as traded. In a bucket that contains a split, high and low can come from opposite sides of it: Apple's August 2020 bar has high 515.14001 and low 126. |
close | float | USD per share | yes | Close of the last trading day. |
price_basis | str | none | no | midpoint when any day in the bucket is a midpoint, otherwise trade. |
adj_close | float | USD per share | yes | adj_close of the last trading day. |
volume | int | shares | yes | Sum of daily volumes, as traded. |
return_daily | float | decimal ratio | yes | Total return over the bucket, compounded from the daily returns: Apple's 2019 bar reads 0.889662523885143. |
exchange_code | str | none | yes | Listing exchange on the bucket's last trading day. |
shares_outstanding | float | shares | yes | Share count on the bucket's last trading day. |
market_cap | float | USD | yes | close × shares_outstanding of the bucket. |
shares_as_of | str | ISO date | yes | Observation date behind the bucket's share count. |
shares_source | str | none | yes | Origin of that observation. |
shares_stale | bool | none | no | Staleness of that observation on the bucket's last trading day. |
split_ratio | float | ratio | yes | Product of the split ratios in the bucket; 1 when the bucket has no split. Apple's 2020 bar reads 4. |
split_ratio_suspect | bool | none | no | true when the bucket's product ratio is not a plain split; split_ratio is then null. Comcast's week of 2026-01-05 reads true. |
dividend | float | USD per share | yes | Sum of the distributions in the bucket, each on its own date's share basis; null when there are none. Apple's 2020 bar reads 2.6149999999999998, which adds three pre-split and one post-split payment. |
dividend_type | str | none | yes | Every kind of distribution in the bucket, comma-separated in alphabetical order. |
ca_source | str | none | no | Record that answered the bucket's last trading day. Comcast's week of 2025-12-29, which runs into 2026, reads vendor. |
Series fields in meta
Three meta fields describe the series rather than a row. The rest of meta is on Prices and Response metadata.
| field | type | unit | nullable | description |
|---|---|---|---|---|
meta.entity_id_grain | str | none | no | Always security: entity_id on a row names one share class. |
meta.adj_close_basis | str | none | no | Always split: adj_close is restated for splits, stock dividends and spin-offs, not for cash dividends. |
meta.delisting | dict[str, object] | none | no | Omitted when empty. For each security on the page whose last bar is on or before its recorded exit, keyed by security id. |
meta.delisting.*.event_date | str | ISO date | no | Date of the exit. |
meta.delisting.*.event_type | str | none | no | Kind of exit, such as merger (Twitter, 2022-10-27), exchange (Raytheon, 2001-05-14), liquidation or dropped (Lehman Brothers, 2008-09-17). |
meta.delisting.*.delisting_return | float | decimal ratio | yes | Return from the last close to the value recorded at the exit: 0.009311 for Twitter, -0.6 for Lehman Brothers. |
Adjusting prices yourself
adj_close is adjusted backwards: the latest bar equals close, and every earlier bar is restated onto today's share basis. When a new split, stock dividend or spin-off happens, earlier adj_close values change. close never changes.
To adjust forwards from a start date instead, take close and split_ratio and compound the ratios forward:
import xfinlink as xfl
xfl.set_api_key("YOUR_API_KEY")
df = xfl.prices("BKNG", start="2026-04-01", end="2026-04-08",
fields=["close", "split_ratio"], adjust="none")
df = df.sort_values("date")
factor = df["split_ratio"].fillna(1.0).cumprod()
df["forward_adj_close"] = df["close"] * factor
print(df[["date", "ticker", "close", "split_ratio", "forward_adj_close"]].to_string(index=False)) date ticker close split_ratio forward_adj_close
2026-04-01 BKNG 4184.56 NaN 4184.56
2026-04-02 BKNG 4194.31 NaN 4194.31
2026-04-06 BKNG 176.19 25.0 4404.75
2026-04-07 BKNG 173.41 NaN 4335.25
2026-04-08 BKNG 181.00 NaN 4525.00split_ratio covers splits and stock dividends. A spin-off, or a day with split_ratio_suspect: true, leaves split_ratio null, so this forward series does not adjust for it; adj_close and return_daily do.
There is no dividend-adjusted price field. To build one, compound return_daily into a total return index and scale it to the last adj_close:
import xfinlink as xfl
xfl.set_api_key("YOUR_API_KEY")
df = xfl.prices("AAPL", start="2026-08-06", end="2026-08-12",
fields=["adj_close", "return_daily"])
df["total_return_index"] = (1 + df["return_daily"]).cumprod()
df["div_adj_close"] = (df["adj_close"].iloc[-1] * df["total_return_index"]
/ df["total_return_index"].iloc[-1])
print(df[["date", "adj_close", "return_daily", "div_adj_close"]].round({"div_adj_close": 4}).to_string(index=False)) date adj_close return_daily div_adj_close
2026-08-06 312.41 0.004534 312.1366
2026-08-07 313.33 0.002945 313.0558
2026-08-10 308.26 -0.015319 308.2600
2026-08-11 304.91 -0.010867 304.9100
2026-08-12 302.25 -0.008724 302.2500Rows before Apple's 0.27 USD dividend on 2026-08-10 are scaled down by it; adj_close is not.
On that ex-date, return_daily is the close plus the dividend over the previous close: (308.26 + 0.27) / 313.33 - 1 = -0.015319. adj_close moves by the price alone: 308.26 / 313.33 - 1 = -0.016181. On a spin-off both fields carry the distribution. On 2024-04-02, when GE distributed GE Vernova, GE's close fell from 175.36 to 136.47 USD per share, while adj_close and return_daily both show a change of -0.022183.
Was this page helpful?
Thank you for helping improve xfinlink documentation.
- Need help? Get in touch.
- Building with an LLM? Read llms.txt.
- Using Claude or ChatGPT? Connect the MCP server.