api-ninjas-com ETF API

The ETF API provides detailed information about Exchange-Traded Funds including their holdings, expense ratios, assets under management, identifiers, and trailing total-return performance. It also exposes endpoints to list and search across all supported ETFs.

Operations 3

GET /v1/etf Get ETF Information #
GET /v1/etflist List Supported ETF Tickers #
GET /v1/etfsearch Search ETFs #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/api-ninjas-com:api-ninjas-com-etf-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

api-ninjas-com-etf-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Ninjas ETF API
  description: 'Combined OpenAPI specification for every API Ninjas endpoint. Requests go to https://api.api-ninjas.com with an `X-Api-Key` header; get a free key at https://api-ninjas.com/register. Human-readable docs: https://api-ninjas.com/api. Index for LLMs: https://api-ninjas.com/llms.txt.'
  version: 1.0.0
  contact:
    name: API Ninjas
    url: https://api-ninjas.com
  license:
    name: Proprietary
servers:
- url: https://api.api-ninjas.com
  description: API Ninjas Production
security:
- ApiKeyAuth: []
tags:
- name: ETF
  description: The ETF API provides detailed information about Exchange-Traded Funds including their holdings, expense ratios, assets under management, identifiers, and trailing total-return performance. It also exposes endpoints to list and search across all supported ETFs.
paths:
  /v1/etf:
    get:
      summary: Get ETF Information
      description: Returns holdings, expense ratio, assets under management and trailing total-return performance for one ETF. Look it up by `ticker`, or by `isin` to get the fund's most-traded listing. `listings` lists every exchange the same fund trades on. To find or enumerate ETFs use /etfsearch or /etflist.
      operationId: getETFInfo
      security:
      - ApiKeyAuth: []
      parameters:
      - name: ticker
        in: query
        required: false
        schema:
          type: string
        description: ETF ticker symbol (e.g., QQQ, SPY, VTI), including any exchange suffix (e.g. EUNL.DE). Either ticker or isin is required, not both.
      - name: isin
        in: query
        required: false
        schema:
          type: string
        description: 'International Securities Identification Number of the ETF (e.g., IE00B5BMR087). An ISIN identifies the fund, which may trade on several exchanges: the most-traded listing fills the response and every listing is returned in `listings`. Either ticker or isin is required, not both.'
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ETFResponse'
        '400':
          description: Bad Request
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      tags:
      - ETF
  /v1/etflist:
    get:
      summary: List Supported ETF Tickers
      description: Returns ETF ticker symbols supported by the ETF API, paginated up to 1000 per call. Increment the offset parameter by 1000 until fewer than 1000 results are returned to walk the entire list. Available to Business, Professional, or annual subscribers only.
      operationId: listETFs
      security:
      - ApiKeyAuth: []
      parameters:
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          default: 0
        description: Number of results to skip for pagination. Page size is 1000.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ETFListResponse'
        '400':
          description: Bad Request — Business, Professional, or annual subscription required
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      tags:
      - ETF
  /v1/etfsearch:
    get:
      summary: Search ETFs
      description: Search for ETFs by name, AUM, expense ratio, holdings, or country. Results are sorted by AUM descending and paginated 50 per page. At least one filter parameter is required. Available to Business, Professional, or annual subscribers only.
      operationId: searchETFs
      security:
      - ApiKeyAuth: []
      parameters:
      - name: name
        in: query
        required: false
        schema:
          type: string
        description: Fund name to search for (e.g. vanguard 500 matches Vanguard S&P 500 ETF). Case-insensitive. Each word must match the start of a word in the fund name, in any order, so ark matches ARK Innovation ETF but not Emerging Markets. Up to 12 words.
      - name: min_aum
        in: query
        required: false
        schema:
          type: number
        description: Minimum assets under management in USD.
      - name: max_aum
        in: query
        required: false
        schema:
          type: number
        description: Maximum assets under management in USD.
      - name: min_expense_ratio
        in: query
        required: false
        schema:
          type: number
        description: Minimum annual expense ratio as a percentage (e.g. 0.1 for 0.1%).
      - name: max_expense_ratio
        in: query
        required: false
        schema:
          type: number
        description: Maximum annual expense ratio as a percentage.
      - name: holdings
        in: query
        required: false
        schema:
          type: string
        description: 'Comma-separated list of ticker symbols. Only ETFs that hold every listed ticker will be returned (AND match). Example: AAPL,MSFT.'
      - name: country
        in: query
        required: false
        schema:
          type: string
        description: Filter by ISO listing-country code -- the exchange the ETF trades on (e.g. US, GB, JP), not the fund's domicile.
      - name: offset
        in: query
        required: false
        schema:
          type: integer
          default: 0
        description: Number of results to skip for pagination. Page size is 50.
      responses:
        '200':
          description: Successful response
          content:
            application/json:
              schema:
                type: array
                description: Array of up to 50 matching ETFs, sorted by USD AUM (descending).
                items:
                  type: object
                  properties:
                    symbol:
                      type: string
                      description: ETF ticker symbol.
                    name:
                      type: string
                      description: ETF name.
                    country:
                      type: string
                      description: ISO country code of the exchange the ETF is listed on. See domicile for the fund's legal home.
                    domicile:
                      type: string
                      description: ISO country code of the fund's legal domicile, which can differ from where it trades.
                    expense_ratio:
                      type: number
                      description: Annual expense ratio of the ETF as a percentage (e.g. 0.09 for 0.09%).
                    aum:
                      type: number
                      description: Assets under management of the ETF, in the fund's local trading currency (see aum_currency). Use aum_usd for a USD figure.
                    aum_currency:
                      type: string
                      description: ISO 4217 currency code that aum is denominated in (e.g. USD, JPY, EUR).
                    aum_usd:
                      type:
                      - number
                      - 'null'
                      description: Assets under management converted to USD. Results are sorted by this field.
                    num_holdings:
                      type: integer
                      description: Number of holdings in the ETF.
        '400':
          description: Bad Request — missing filters or subscription tier too low
        '401':
          description: Unauthorized
        '500':
          description: Internal Server Error
      tags:
      - ETF
components:
  schemas:
    FundPerformance:
      type: object
      description: Trailing returns for this share class, based on monthly total returns with distributions reinvested. Values are percentages.
      properties:
        as_of:
          type: string
          format: date
          description: Last month-end the figures cover.
        months_available:
          type: integer
          description: Number of monthly returns on file.
        return_1m:
          type:
          - number
          - 'null'
          description: Total return over the most recent month, in percent.
        return_3m:
          type:
          - number
          - 'null'
          description: Cumulative total return over the trailing 3 months, in percent.
        return_6m:
          type:
          - number
          - 'null'
          description: Cumulative total return over the trailing 6 months, in percent.
        return_ytd:
          type:
          - number
          - 'null'
          description: Cumulative total return from January of the as-of year, in percent.
        return_1y:
          type:
          - number
          - 'null'
          description: Cumulative total return over the trailing 12 months, in percent.
        return_3y:
          type:
          - number
          - 'null'
          description: Cumulative total return over the trailing 36 months, in percent.
        return_5y:
          type:
          - number
          - 'null'
          description: Cumulative total return over the trailing 60 months, in percent.
        annualized_3y:
          type:
          - number
          - 'null'
          description: Trailing 3-year return annualized (geometric), in percent.
        annualized_5y:
          type:
          - number
          - 'null'
          description: Trailing 5-year return annualized (geometric), in percent.
        since:
          type: string
          format: date
          description: First month of history.
        return_since:
          type:
          - number
          - 'null'
          description: Cumulative total return since `since`, in percent.
        annualized_since:
          type:
          - number
          - 'null'
          description: Return since `since`, annualized, in percent.
        best_month:
          $ref: '#/components/schemas/FundMonthlyReturn'
        worst_month:
          $ref: '#/components/schemas/FundMonthlyReturn'
        volatility_3y:
          type:
          - number
          - 'null'
          description: Annualized standard deviation of monthly returns over the trailing 36 months, in percent.
        monthly_returns:
          type: array
          description: Every month on file, oldest first.
          items:
            $ref: '#/components/schemas/FundMonthlyReturn'
    FundMonthlyReturn:
      type: object
      properties:
        month:
          type: string
          description: Return month as YYYY-MM.
        total_return:
          type: number
          description: Total return for that month, in percent.
    ETFResponse:
      type: object
      properties:
        etf_ticker:
          type: string
          description: ETF ticker symbol.
        etf_name:
          type: string
          description: ETF name.
        isin:
          type: string
          description: International Securities Identification Number (ISIN) of the ETF.
        cusip:
          type: string
          description: Nine-character Committee on Uniform Security Identification Procedures (CUSIP) identifier for the ETF.
        country:
          type: string
          description: ISO country code of the exchange the ETF is listed on (e.g. a Tokyo-listed ETF is JP). See domicile for the fund's legal home.
        domicile:
          type: string
          description: ISO 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).
        price:
          type: number
          description: Current price of this listing, in its trading currency (see the matching entry in listings). Premium members receive the live price; free users receive the closing price of the most recent completed trading session.
        expense_ratio:
          type: number
          description: Annual expense ratio of the ETF as a percentage.
        aum:
          type: number
          description: Assets under management of the ETF, in the fund's local trading currency (see aum_currency). Use aum_usd for a USD figure.
        aum_currency:
          type: string
          description: ISO 4217 currency code that aum is denominated in (e.g. USD, JPY, EUR).
        aum_usd:
          type:
          - number
          - 'null'
          description: Assets under management converted to USD.
        num_holdings:
          type: integer
          description: Number of holdings in the ETF.
        holdings:
          type: array
          items:
            type: object
            properties:
              ticker:
                type: string
                description: Ticker of the holding. Empty for positions that have no ticker, such as cash, futures and money-market sweeps.
              name:
                type:
                - string
                - 'null'
                description: Name of the security or position. For holdings without a ticker it says what the position is (for example a futures contract or cash).
              isin:
                type:
                - string
                - 'null'
                description: ISIN of the security, or null when it has none (cash, futures and other non-securities).
              cusip:
                type:
                - string
                - 'null'
                description: CUSIP (or CINS for non-US issuers) of the security, or null when it has none.
              num_shares:
                type: integer
              weight:
                type: number
              value:
                type: number
              last_updated:
                type: integer
          description: Array of all holdings in the ETF, each with ticker, num_shares, weight (decimal fraction), value and last_updated (Unix timestamp).
        performance:
          allOf:
          - $ref: '#/components/schemas/FundPerformance'
          description: Trailing returns for this ETF. Business tier and above.
        listings:
          type: array
          items:
            $ref: '#/components/schemas/ETFListing'
          description: Every exchange this fund trades on, most traded first. Holdings, expense ratio and aum_usd are the same whichever listing you look up. Listings with no trades in the last 14 days are left out.
    ETFListing:
      type: object
      properties:
        ticker:
          type: string
          description: Ticker of this listing, with exchange suffix (e.g. SXR8.DE).
        exchange:
          type: string
          description: Exchange code (e.g. LSE, XETRA, NASDAQ).
        country:
          type:
          - string
          - 'null'
          description: ISO country code of the exchange.
        currency:
          type:
          - string
          - 'null'
          description: 'Trading currency: an ISO 4217 code, or GBX (UK pence) or ZAC (South African cents) for listings quoted in those units.'
        price:
          type:
          - number
          - 'null'
          description: Latest price in currency. Premium only.
        volume:
          type:
          - integer
          - 'null'
          description: Shares traded in the latest session. Premium only.
        avg_volume:
          type:
          - integer
          - 'null'
          description: Average shares traded per day. Premium only.
    ETFListResponse:
      type: array
      items:
        type: string
      description: Array of every supported ETF ticker symbol.
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-Api-Key
externalDocs:
  description: API Ninjas documentation
  url: https://api-ninjas.com/api