ETF listing ids
Use an ETF listing id such as ARCX:SPY. A bare US ticker such as SPY also works when it names one US listing.
Get prices and price history for ETFs and mutual funds, with search and profiles on every plan. Each request needs a Bearer key; REST and MCP share one account quota.
curl --request GET \
--url "https://api.narwhalapi.com/v1/funds/ARCX:SPY/price" \
--header "Authorization: Bearer $NARWHAL_API_KEY"{
"id": "ARCX:SPY",
"symbol": "SPY",
"currency": "USD",
"price": "578.12",
"previous_close": "576.40",
"change": "1.72",
"change_percent": "0.30",
"volume": "61230500",
"market_session": "open",
"timestamp": "2026-10-26T15:42:00Z",
"stale": false,
"type": "etf"
}/v1/funds/search/v1/funds/{id}/v1/funds/{id}/price/v1/funds/prices/v1/funds/{id}/bars/v1/funds/{id}/distributionsUse an ETF listing id such as ARCX:SPY. A bare US ticker such as SPY also works when it names one US listing.
Use FUND:VFIAX for a mutual fund. Its daily net asset value appears in nav, with previous_nav and date; mutual fund values are never delayed.
Free stock, ETF and crypto prices are delayed 15 minutes. Basic and Pro get live ETF prices; delayed answers carry delayed: true and omit day volume.
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.
Daily bars and past distributions cover the last 12 months on Free, last 5 years on Basic and full history on Pro. Paid plans include one-minute ETF bars within their history limits. Mutual funds have no one-minute bars; requests return 400 invalid_interval. Their daily bars use NAV for open, high, low and close, with no volume. Batch price calls accept up to 50 ids and count one call per id that returns a price.
idsymbolcurrencypriceprevious_closechangechange_percentvolumemarket_sessiontimestampstaledelayedtypenavprevious_navdateRead fund search and price routes, with field definitions for ETF prices and mutual fund NAVs.
Read the reference →Compare monthly request quotas and history limits, with live ETF prices on Basic and Pro.
See pricing →Listed stock prices and company data through REST and MCP
Explore the API →Crypto pair prices and history through REST and MCP
Explore the API →An ETF returns a traded price. A mutual fund returns one end-of-day net asset value in nav, with previous_nav and date. Read type for etf or mutual_fund. NAVs are never delayed and become stale once older than the next business day. ETF prices are never stale when the exchange is closed.
ETF ids use the exchange code and ticker, such as ARCX:SPY; mutual fund ids use FUND followed by a colon and ticker. A stock id on a fund route returns 404 not_found. A fund id on a stock route redirects to the fund route with a 301.
Free covers the last 12 months, Basic the last 5 years and Pro full history for daily bars and past distributions. If your plan cuts older rows, start returns the first date served. The kind field on a distribution is omitted until sources provide it.
REST and MCP use one account and monthly request quota, and every request needs a Bearer key. A batch accepts up to 50 fund ids and counts one call per id that returns a price.
Create a free key and call the API from your own code. Get a free API key