ETF API
The ETF API provides detailed information about Exchange-Traded Funds including their price, all holdings, expense ratios, assets under management, identifiers, and trailing total-return performance.
Available endpoints:
- /v1/etf - Get detailed information for a specific ETF by ticker or ISIN
- /v1/etflist - Get a list of every supported ETF ticker symbol
- /v1/etfsearch - Search for ETFs by name, AUM, expense ratio, holdings, or country
For data on Mutual Funds, use the Mutual Fund API instead.
Premium members have access to live prices, while free users receive the closing price of the most recent completed trading session.
From 8,061 users
Applications using this API
API Status
API Response Times
Average | P50 | P75 | P90 | P95 |
|---|---|---|---|---|
| 372ms | 418ms | 462ms | 847ms | 1193ms |
Didn't find what you were looking for? Suggest an improvement
https://api.api-ninjas.com/v1/etf
Returns comprehensive information about any ETF by its ticker or ISIN. Premium members have access to live prices, while free users receive the closing price of the most recent completed trading session.
Parameters
Provide ticker or isin, but not both. To find an ETF by name, use /v1/etfsearch.
tickeroptionalETF ticker symbol (e.g.,
QQQ,SPY,VTI). You must pass the complete ticker symbol, including any exchange suffix (dot notation) when the listing requires it. For example,EUNL.DE, notEUNL.isinoptionalInternational Securities Identification Number of the ETF (e.g.,
IE00B5BMR087,US78462F1030). An ISIN identifies the fund rather than one exchange listing, and many funds trade on several exchanges under different tickers. The response is for the most traded listing, andlistingsshows them all.
Headers
X-Api-KeyrequiredAPI Key associated with your account.
Response
The /v1/etf endpoint returns a JSON object with the following fields, or an error if the request is unsuccessful.
etf_tickerETF ticker symbol.
etf_nameETF name.
isinInternational Securities Identification Number (ISIN) of the ETF.
cusipNine-character Committee on Uniform Security Identification Procedures (CUSIP) identifier for the ETF.
countryISO country code of the exchange the ETF is listed on (e.g. a Tokyo-listed ETF is
JP). Seedomicilefor the fund's legal home.domicileISO country code of the fund's legal domicile, which can differ from where it trades (e.g. an Ireland-domiciled UCITS listed in London is
country: GB,domicile: IE).priceCurrent price of this listing, in its trading currency (the matching entry in
listingsgives the currency). Premium members receive the live price; free users receive the closing price of the most recent completed trading session.expense_ratioPremium onlyAnnual expense ratio of the ETF as a percentage. For example, 0.2% would be
0.2.aumPremium onlyAssets under management of the ETF, expressed in the fund's local trading currency (see
aum_currency). For a USD figure useaum_usd.aum_currencyPremium onlyISO 4217 currency code that
aumis denominated in (e.g.USD,JPY,EUR).aum_usdPremium onlyAssets under management converted to USD.
num_holdingsPremium onlyNumber of holdings in the ETF.
holdingsPremium onlyArray of all holdings in the ETF. Each entry contains
ticker,num_shares(number of shares held),weight(portfolio weight as a decimal fraction),value(position value in the listing's trading currency), andlast_updated(Unix timestamp).performanceBusiness tier and aboveTrailing returns for this ETF, built from monthly total returns: net of fees, with distributions reinvested. Values are percents:
17.75means +17.75%. Available on the Business tier and above.Field Description as_ofLast month-end the figures cover. months_availableNumber of monthly returns on file. return_1mreturn_3mreturn_6mreturn_ytdTotal return over the last 1, 3 and 6 months, and year to date. return_1yreturn_3yreturn_5yCumulative total return over the last 1, 3 and 5 years. annualized_3yannualized_5yThe 3- and 5-year returns, annualized. sinceFirst month of history. return_sinceannualized_sinceCumulative and annualized return sincethe specified start date.best_monthworst_monthBest and worst single month, as monthandtotal_return.volatility_3yAnnualized standard deviation of monthly returns over the last 3 years. monthly_returnsEvery month on file, oldest first, as monthandtotal_return.- Figures come from quarterly fund reports, not live prices, which is why
as_oflags.
- Figures come from quarterly fund reports, not live prices, which is why
listingsEvery exchange this fund trades on, most traded first. One fund can trade under several tickers and currencies:
IE00B5BMR087isCSPX.Lin USD,SXR8.DEin EUR andCSP1.Lin GBX. Holdings, expense ratio andaum_usdare the same whichever listing you look up. Listings with no trades in the last 14 days are left out.Field Description tickerTicker on that exchange. exchangeExchange code, e.g. LSE,XETRA,NASDAQ.countryISO country code of the exchange. currencyISO 4217 code, or GBX(UK pence) orZAC(South African cents).pricePremium onlyLatest price on that exchange, in currency.volumePremium onlyShares traded in the latest session. avg_volumePremium onlyAverage shares traded per day.
Live Demo
Code Examples
curl -X GET "https://api.api-ninjas.com/v1/etf?ticker=SPY" \
-H "X-Api-Key: YOUR_API_KEY"If your programming language is not listed in the Code Example above, you can still make API calls by using a HTTP request library written in your programming language and following the above documentation.
Business tier and above, or any annual plan
https://api.api-ninjas.com/v1/etflist
Returns ETF ticker symbols supported by the ETF API, paginated up to 1000 per call. Useful for discovering which tickers can be passed to /v1/etf or /v1/etfsearch. Increment the offset parameter by 1000 until fewer than 1000 results are returned to walk the entire list.
Parameters
offsetoptionalNumber of results to skip for pagination. Default
0. Page size is1000.
Headers
X-Api-KeyrequiredAPI Key associated with your account.
Response
The /v1/etflist endpoint returns a JSON array of strings (up to 1000 supported ETF ticker symbols starting at offset) or an error if the request is unsuccessful.
Live Demo
Code Examples
curl -X GET "https://api.api-ninjas.com/v1/etflist?offset=0" \
-H "X-Api-Key: YOUR_API_KEY"Business tier and above, or any annual plan
https://api.api-ninjas.com/v1/etfsearch
Search for ETFs by name, or by any combination of filters. Results are sorted by assets under management (descending) and capped at 50 per page. Use the offset parameter to paginate. At least one filter parameter is required.
Parameters
At least one of the following parameters must be provided.
nameoptionalFund name to search for (e.g.
vanguard 500matchesVanguard S&P 500 ETF). Case-insensitive. Each word must match the start of a word in the fund name, in any order, soarkmatchesARK Innovation ETFbut notEmerging Markets. Up to 12 words.min_aumoptionalMinimum assets under management in USD (e.g.
10000000000for $10B).max_aumoptionalMaximum assets under management in USD.
min_expense_ratiooptionalMinimum annual expense ratio as a percentage (e.g.
0.1for 0.1%).max_expense_ratiooptionalMaximum annual expense ratio as a percentage.
holdingsoptionalComma-separated list of ticker symbols. Only ETFs that hold every listed ticker will be returned (AND match). Example:
AAPL,MSFT.countryoptionalFilter by ISO listing-country code — the exchange the ETF trades on (e.g.
US,GB,JP), not the fund's domicile.offsetoptionalNumber of results to skip for pagination. Default
0. Page size is50.
Headers
X-Api-KeyrequiredAPI Key associated with your account.
Response
The /v1/etfsearch endpoint returns a JSON array of up to 50 matching ETFs (sorted by USD AUM descending) or an error if the request is unsuccessful. Each entry contains the following fields. To retrieve full holdings for a specific result, call /v1/etf with its symbol.
symbolETF ticker symbol.
nameETF name.
countryISO country code of the exchange the ETF is listed on. See
domicilefor the fund's legal home.domicileISO country code of the fund's legal domicile, which can differ from where it trades.
expense_ratioAnnual expense ratio of the ETF as a percentage. For example, 0.09% would be
0.09.aumAssets under management of the ETF, expressed in the fund's local trading currency (see
aum_currency). For a USD figure useaum_usd.aum_currencyISO 4217 currency code that
aumis denominated in (e.g.USD,JPY,EUR).aum_usdAssets under management converted to USD. Results are sorted by this field.
num_holdingsNumber of holdings in the ETF.
Live Demo
Get a free API key to get started — no credit card required.
Code Examples
curl -X GET "https://api.api-ninjas.com/v1/etfsearch?min_aum=10000000000&country=US" \
-H "X-Api-Key: YOUR_API_KEY"Frequently Asked Questions
Can I use the ETF API for commercial purposes?
Yes, but you must have a premium subscription. Commercial use of the ETF API is not permitted on the free tier. See our pricing page to choose a plan that fits your needs.How do I get an API key and start using the ETF API?
Sign up for a free account to instantly get your API key, then pass it in theX-Api-Keyheader on every request. The documentation above includes ready-to-run examples in cURL, Python, JavaScript, Node.js, and more.What happens if I exceed my quota for the month?
Your API requests will simply be denied once you hit your monthly quota — you will never be charged more than the plan you signed up for. To increase your quota, you can upgrade your plan any time on our pricing page.What happens if a request to the ETF API fails?
The API responds with a standard HTTP status code and a JSON error message describing the problem. See our error codes reference for the full list of codes and how to resolve each one, or contact support if you need help.How do I get the full list of holdings for an ETF like QQQ or SPY?
Call the/v1/etfendpoint with the requiredtickerparameter (e.g.ticker=SPY, including any exchange suffix likeEUNL.DEwhen required); the response includes aholdingsarray where each entry has the constituent ticker,num_shares, percentageweight, and value, alongsidenum_holdings,aum, andexpense_ratio. For live quotes on those individual constituents, see the Stock Price API.How can I find ETFs that hold a specific stock or match an AUM and expense-ratio range?
Use the/v1/etfsearchendpoint, which accepts filters includingname(e.g.vanguard 500; each word matches the start of a word in the fund name, in any order),holdings(a comma-separated AND match likeAAPL,MSFTthat returns only ETFs holding every listed ticker),min_aum/max_aum,min_expense_ratio/max_expense_ratio, andcountry; results are sorted by AUM descending, capped at 50 per page, and you paginate withoffset. These search and listing endpoints require a Business, Professional, or annual subscription, shown on pricing.How do I discover every ETF ticker symbol the API supports?
The/v1/etflistendpoint returns a JSON array of supported ticker symbols, paginated up to 1000 per call; increment theoffsetparameter by 1000 until fewer than 1000 results come back to walk the entire list. To verify or resolve any individual symbol you can also use the Ticker API.How fresh are ETF prices, and why might the price field be missing?
Premium members receive live prices; free users receive the closing price of the most recent completed trading session. Theaum,expense_ratio,num_holdings, andholdingsfields on/v1/etfare premium only. See pricing for the plans that unlock live prices and these fields, or use the Mutual Fund API for fund equivalents.
Explore API integration use cases for recommended APIs and workflow examples.