---
title: "Get Etf Holdings"
method: GET
path: "/api/etf/{symbol}/holdings"
tags: ["etf"]
---

# Get Etf Holdings

`GET /api/etf/{symbol}/holdings`

## Request

- Base URL: `https://api.halalterminal.com`
- URL: `https://api.halalterminal.com/api/etf/{symbol}/holdings`
- Auth: API key in header `X-API-Key`

Retrieve the full list of holdings for an ETF.

Returns every underlying position with its ticker, name, portfolio weight,
share count, market value, and Shariah compliance status (if previously
screened).

**curl example:**

    curl -X GET "http://localhost:8000/api/etf/VTI/holdings"

**Python requests example:**

```python
import requests
resp = requests.get("http://localhost:8000/api/etf/VTI/holdings")
data = resp.json()
print(data["holdings_count"], "holdings")
```

## Path parameters

- `symbol` string, required: ETF ticker symbol.

## Response `200`

ETF holdings list with weights and compliance statuses.

- ETFHoldingsResponse: Complete holdings list for an ETF.
  - `symbol` string, required: ETF ticker symbol.
  - `name` string: ETF fund name.
  - `holdings_count` integer: Total number of holdings in the ETF.
  - `holdings` ETFHoldingResponse[]: List of individual holdings.
    - `symbol` string, nullable: Ticker symbol of the underlying holding, or null for a weighted line with no listing of its own (e.g. a loyalty share class kept in the denominator).
    - `name` string: Company or security name.
    - `weight` number: Portfolio weight in percent: 6.5 means 6.5% of the fund.
    - `shares` integer, nullable: Number of shares held by the ETF.
    - `market_value` number, nullable: Current market value of the position in USD.
    - `isin` string, nullable: ISIN identifier, if available.
    - `cusip` string, nullable: CUSIP identifier, if available.
    - `compliance_status` string, nullable: Shariah compliance status: 'compliant', 'non_compliant', or 'unscreened'.
  - `data_source` string: Provider that supplied the holdings data (e.g. 'yfinance').
  - `disclaimers` Disclaimer[], nullable: Attached by middleware; see /api/disclaimers.
    - `id` string, required: Stable category identifier — safe for clients to dedupe and cache on.
    - `version` string, required: ISO-8601 date of the most recent edit to `text`. Advances whenever the wording changes, even for typo fixes.
    - `lang` string: BCP-47 language tag for `text`. Today always 'en'; reserved for future i18n.
    - `severity` string, required: Grouping hint for UIs. 'religious' for fatwa/scholar caveats; 'data' for data-freshness, sourcing, or coverage caveats.
    - `text` string, required: Short inline disclaimer text.
    - `url` string, required: Canonical legal page URL (deep-linked to the relevant section).

## Other responses

- `404`: ETF symbol not found or has no holdings data.
- `422`: Validation Error

---

[API](https://skmtc.dev/halalterminal/apis/halal-terminal-api.md) · [All operations](https://skmtc.dev/halalterminal/apis/halal-terminal-api/llms.txt) · [OpenAPI document](https://skmtc.dev/halalterminal/apis/halal-terminal-api/revisions/78768b250943?raw)
