MASSARIdocsRequest access

ETF holdings

GET/v1/funds/{symbol}/holdingsPromised whole

Fund holdings as reported by the issuer portfolio or fund filing.

Parameters

  • symbolpathrequired

    Ticker symbol, case-insensitive.

Response contract

Every field in the response is part of the contract.

Response fields

The top level keys a live response actually returned, read off the API rather than written down here.

etfnameissueras_of_dateholding_counttotal_weightexpense_ratioholdings

How this was verified

Called against 3 different subjects on the live API. Every field it returned, at every level, was compared with the contract above. Last checked August 18, 2026.

Request

curl "https://api.massari.ai/v1/funds/SPY/holdings" \
  -H "Authorization: Bearer $MASSARI_TOKEN"

Example response

{
  "etf": "SPY",
  "name": "SPDR S&P 500 ETF Trust",
  "issuer": "spdr",
  "as_of_date": "2026-04-17T00:00:00.000Z",
  "holding_count": 503,
  "total_weight": 0.9756,
  "expense_ratio": 0.0945,
  "holdings": [
    {
      "symbol": "NVDA",
      "name": "NVDA",
      "weight": 0.08012,
      "shares": "286670335",
      "market_value": 56401834000,
      "sector": null,
      "country": null,
      "asset_class": "equity",
      "source_class": "cached_market_data"
    },
    {
      "symbol": "AAPL",
      "name": "AAPL",
      "weight": 0.06485,
      "shares": "173194653",
      "market_value": 45651900000,
      "sector": null,
      "country": null,
      "asset_class": "equity",
      "source_class": "cached_market_data"
    }
  ]
}

A real response from the live API, captured August 18, 2026. This one is CUT: long arrays, wide objects and long strings were trimmed to keep it readable, so treat it as a sample of the shape rather than all of it. Either way it is valid JSON.

Book a meeting