# ETF Profile

> Returns ETF identity and classification.

`GET https://api.bavest.co/v2/etfs/profile`

Group: ETFs. Route id: `v2_etfs_profile`. Included in: Pro, Growth.

## Description

Returns ETF identity and classification.

> Fees, risk metrics, structure and NAV live in dedicated resources: `/v2/etfs/fees`, `/v2/etfs/risk`, `/v2/etfs/structure`, `/v2/etfs/nav`, `/v2/etfs/metrics`. Holdings count is `meta.totalCount` on `/v2/etfs/holdings`.

## Authentication

Send your API key in the `x-api-key` header on every request. No key yet? Sign up at https://dashboard.bavest.co/sign-up (free trial). The examples read the key from the `BAVEST_API_KEY` environment variable.

## Parameters

| Name | In | Type | Required | Description |
|---|---|---|---|---|
| `symbol` | query | string | one of symbol, isin | ETF ticker symbol (e.g., `IWDA.AS`). Provide exactly one of symbol or isin; clear the ISIN example before using a symbol. |
| `isin` | query | string | one of symbol, isin | ETF ISIN code (e.g., `IE00B4L5Y983`, iShares Core MSCI World UCITS ETF). Provide exactly one of symbol or isin. Example `IE00B4L5Y983`. |

Required: one of `symbol`, `isin`.

## Response

200 Successful response (`application/json`).

| Field | Type | Always present | Description |
|---|---|---|---|
| `data` | ETFProfile | no | Core ETF identity and classification. Every property is always present in the response; any value may be `null` where the issuer does not publish it. `cusip` and `website` may also be an empty string for non-US listings. |
| `data.symbol` | string \| null | no | ETF ticker symbol. Example: `ARKK`. |
| `data.isin` | string \| null | no | ETF ISIN code. Example: `IE00B4L5Y983`. |
| `data.name` | string \| null | yes | Official ETF name. Example: `ARK Innovation ETF`. |
| `data.description` | string \| null | no | Brief description of the ETF's investment objective. |
| `data.website` | string \| null | no | URL of the ETF issuer's product page, empty string if unknown. |
| `data.domicile` | string \| null | no | Country of domicile (ISO 3166-1 alpha-2 code) Example: `IE`. |
| `data.inceptionDate` | string (date) \| null | no | Date the ETF was launched. |
| `data.etfCompany` | string \| null | no | Name of the ETF issuer or management company. Example: `ARK Invest`. |
| `data.assetClass` | string \| null | no | Broad asset class (e.g. Equity, Fixed Income, Commodity) Example: `Equity`. |
| `data.cusip` | string \| null | no | CUSIP identifier for the ETF, empty string for non-US listings. Example: `78462F103`. |
| `data.distributionPolicy` | string \| null | no | Distribution policy (e.g. Accumulating, Distributing) |
| `data.etfCategory` | string \| null | no | Investment category within the asset class. Example: `U.S. Equity`. |
| `data.etfFocus` | string \| null | no | Investment focus or strategy. Example: `Broad Market`. |
| `data.etfNiche` | string \| null | no | Specific niche or investment approach. Example: `Index Tracking`. |
| `data.indice` | string \| null | no | Name of the tracked index as published by the issuer. Free text, not normalised: either the index family alone (`S&P 500®`, `MSCI World`) or the full index variant with return type, currency and hedging (`STOXX Europe 600 NR EUR`, `S&P 500® ESG Elite (EUR Hedged)`). Suffixes are part of the official index name: PR/NR/TR = price, net total return, gross total return; EUR/USD = index currency; `Hedged` = currency-hedged variant. Null for actively managed ETFs or when the index is not captured. Intended for display; do not join or filter on it. Example: `STOXX Europe 600 NR EUR`. |
| `data.replicationMethod` | string \| null | no | Index replication method (e.g. Full, Sampling, Synthetic) |
| `meta` | ResponseMeta | no | Response envelope metadata. Always present on a 200: `time` is set by `core/response.py` on every successful response. Errors carry the same block, built by the same code, so a client parses one meta shape whether the call succeeded or failed. |
| `meta.time` | integer | no | Server-side processing time in milliseconds. Example: `17`. |
| `meta.parameters` | object | no | Echo of the request parameters the endpoint resolved. |

## Example request

```bash
curl 'https://api.bavest.co/v2/etfs/profile?isin=IE00B4L5Y983' \
  -H "x-api-key: $BAVEST_API_KEY"
```

## Example response

```json
{
  "data": {
    "symbol": "IWDA.L",
    "isin": "IE00B4L5Y983",
    "cusip": "",
    "name": "iShares Core MSCI World UCITS ETF USD (Acc)",
    "description": "With the iShares Core MSCI World UCITS ETF (Acc), investors can participate in the performance of currently over 1,500 large and medium-sized companies from 23 developed markets. The ETF thus enables access to an internationally diversified market segment.",
    "assetClass": "Equity",
    "domicile": "IE",
    "etfCompany": "iShares",
    "inceptionDate": "2009-09-25",
    "website": "",
    "etfCategory": "Global Equity",
    "etfFocus": "Broad Market",
    "etfNiche": "MSCI World Index Exposure",
    "indice": "MSCI World",
    "distributionPolicy": "Accumulating",
    "replicationMethod": "physical"
  },
  "meta": {
    "parameters": {
      "isin": "IE00B4L5Y983"
    },
    "time": 28
  }
}
```

## Errors

| Status | Meaning |
|---|---|
| 400 | Invalid request parameters. Returned when required query parameters are missing, have invalid types, or violate constraints (e.g., providing both symbol and isin when they are mutually exclusive). |
| 401 | Missing or invalid API key. |
| 404 | Resource not found. |
| 429 | Rate limit exceeded. Retry after the `Retry-After` header interval. |
| 500 | An unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value. |
| 502 | Upstream data provider returned an error or is temporarily unavailable. Retry after a short delay. |
| 503 | Bavest cannot read its data store right now. The security may well have data; retry after the `Retry-After` header interval. |
| 504 | The request timed out waiting for a response from the upstream data provider. This may occur for complex queries or during peak load. |
| default | An unexpected error occurred on the server. If the issue persists, contact support with the X-Request-Id header value. |

- `403` from the gateway: the API key is invalid or switched off.
- `429` with message `Limit Exceeded`: the monthly quota of the key is used up. With `Too Many Requests`: the key is throttled, or this route is not in the key's plan. Wait for `Retry-After` when it is sent.

## Links

- HTML page: https://dashboard.bavest.co/docs/v2_etfs_profile
- OpenAPI: https://dashboard.bavest.co/openapi.json (YAML: https://dashboard.bavest.co/openapi.yaml)
- Authentication: https://dashboard.bavest.co/docs/authentication.md
- MCP server for AI agents: https://dashboard.bavest.co/docs/mcp.md
- All routes: https://dashboard.bavest.co/llms.txt
