Listing ids
A listing id combines a four-letter exchange code and ticker, such as XNAS:MSFT for Microsoft. Unique bare US tickers work; answers return the canonical id.
Get prices and company events for listed stocks, with market cap and valuation ratios on Basic and Pro. Use a Bearer key for every request; REST and MCP share one account quota.
curl --request GET \
--url "https://api.narwhalapi.com/v1/equities/XNAS:MSFT/price" \
--header "Authorization: Bearer $NARWHAL_API_KEY"{
"id": "XNAS:MSFT",
"symbol": "MSFT",
"currency": "USD",
"price": "421.35",
"previous_close": "418.90",
"change": "2.45",
"change_percent": "0.58",
"volume": "18234100",
"market_session": "open",
"timestamp": "2026-10-26T15:42:00Z",
"stale": false
}/v1/equities/search/v1/equities/{id}/v1/equities/{id}/price/v1/equities/prices/v1/equities/movers/v1/equities/{id}/bars/v1/equities/{id}/dividends/v1/equities/{id}/splits/v1/equities/{id}/earnings/v1/equities/{id}/valuation/v1/equities/{id}/cost-of-capital/v1/equities/{id}/valuation/historyA listing id combines a four-letter exchange code and ticker, such as XNAS:MSFT for Microsoft. Unique bare US tickers work; answers return the canonical id.
Free is $0 for 5,000 requests a month. Basic is $59 a month for 100,000; Pro is $149 a month for 1,000,000. Free permits commercial use.
Free stock, ETF and crypto prices are delayed 15 minutes. Basic and Pro get live prices. Batch calls accept up to 50 ids and count each returned price.
US-only movers require Basic or Pro, as do valuation history and cost of capital with beta. Valuation matches US and Korea listings to filings; Korea has P/E only.
Search and profiles are available on every plan. Daily bars and past earnings cover the last 12 months on Free, last 5 years on Basic and full history on Pro; dividends and splits follow the same limits. One-minute bars require Basic or Pro within those limits. Day volume is paid only and omitted when unknown. Market cap and P/E, P/S, P/B and dividend yield require Basic or Pro. Prices and amounts are decimal strings.
idsymbolcurrencypriceprevious_closechangechange_percentvolumemarket_sessiontimestampstaledelayedRead stock routes and response fields, including beta, cost of equity, cost of debt and WACC.
Read the reference →Compare monthly request quotas and history limits, with live prices on Basic and Pro.
See pricing →Use a listing's company_id to join its prices and valuations with company financial statements.
Explore the API →ETF prices and daily mutual fund net asset values
Explore the API →Crypto pair prices and history through REST and MCP
Explore the API →The earnings route returns past results only; upcoming earnings dates are unavailable. Japan prices are unavailable; profiles carry only name, exchange, country, currency and company_id. Earnings eps_actual uses the market data basis, while EPS behind pe_ratio comes from company filings. The two can differ and should not be compared directly.
Valuation history has one point per fiscal period end, quarterly or yearly. Each uses the close on or just before that date, adjusted only for splits, and figures as filed for that period. Basic covers 5 years; Pro covers full history. When plan limits cut older rows, start gives the first date served.
Cost of capital covers US and Korea listings matched to a company in our filings, and every answer links to the cost of capital methodology. Send your equity risk premium in erp. Banks and insurers return 422 not_applicable because interest is an operating cost. An input that cannot be worked out is named in 422 inputs_unavailable instead of being estimated.
A listing can carry company_id, which joins it to a company in the Filings API. Use that id to connect prices and valuations with financial statements. Ratios that cannot be calculated correctly are left out without sending 0 in their place.
Create a free key and call the API from your own code. Get a free API key