> ## Documentation Index
> Fetch the complete documentation index at: https://docs.rangler.co/llms.txt
> Use this file to discover all available pages before exploring further.

# ETF market data

> Discover NGX-listed funds, fetch current snapshots, and chart them through the company API.

Use `GET /v1/market-data/etfs` for current NGX exchange-traded fund prices and trading fields. Use the existing `GET /v1/companies/{company_ref}/chart` route for stored daily history.

Each listed ETF is a fund linked to a searchable company record. The snapshot response provides both IDs, while company charts accept the same ETF ticker used by the market-data route. You do not need a separate chart integration for funds.

## Request ETF snapshots

Omit `tickers` to return every supported NGX ETF:

```bash theme={null}
curl -s "https://api.rangler.co/v1/market-data/etfs" \
  -H "X-API-Key: $RANGLER_API_KEY"
```

Repeat `tickers` to return a subset:

```bash theme={null}
curl -s "https://api.rangler.co/v1/market-data/etfs?tickers=VETBANK&tickers=NEWGOLD" \
  -H "X-API-Key: $RANGLER_API_KEY"
```

Ticker matching is case-insensitive. An unknown filter ticker returns `422 unknown_tickers`; Rangler does not return an empty placeholder with `200 OK`.

The response is ordered by ticker:

```json theme={null}
{
  "data": [
    {
      "id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
      "company_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
      "fund_id": "cccccccc-cccc-cccc-cccc-cccccccccccc",
      "asset_type": "etf",
      "ticker": "VETBANK",
      "name": "Vetiva Banking ETF",
      "exchange": "NGX",
      "country_code": "NG",
      "currency": "NGN",
      "latest_price": 31.77,
      "open": 30.39,
      "high": 32.75,
      "low": 29,
      "volume": 317328,
      "value_traded": 10000000,
      "net_change": 1.38,
      "percentage_change": 0.0454,
      "week_52_high": 43.52,
      "week_52_low": 13,
      "latest_at": "2026-08-27T23:00:00Z"
    }
  ]
}
```

`percentage_change` is fractional: `0.05` means 5%. A field is `null` when no safe current value is available.

## Request an ETF chart

Pass the ETF ticker to the company chart route. An unknown ticker returns `404`.

```bash theme={null}
curl -s "https://api.rangler.co/v1/companies/VETBANK/chart?period=1y&format=line" \
  -H "X-API-Key: $RANGLER_API_KEY"
```

The chart route supports the same ranges and formats as company charts:

* `period`: `7d`, `1w`, `30d`, `1m`, `90d`, `6m`, `ytd`, `1y`, `5y`, or `max`
* `from` and `to`: inclusive ISO dates; `from` overrides `period`
* `format`: `detailed`, `line`, or `ohlcv`

`format=line` returns compact `[date, close]` pairs:

```json theme={null}
{
  "company_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
  "asset_type": "fund",
  "symbol": "VETBANK",
  "company_name": "Vetiva Banking ETF",
  "exchange": "NGX",
  "currency": "NGN",
  "period": "1y",
  "format": "line",
  "count": 2,
  "as_of_date": "2026-08-28",
  "data": [
    ["2026-08-27", 30.39],
    ["2026-08-28", 31.77]
  ]
}
```

The full response also includes `statistics` and `coverage`. Use `coverage.earliest_available_date`, `coverage.latest_available_date`, and `coverage.available_points` instead of assuming every ETF has the same history length.

## Retrieve fund factsheets

Use the snapshot's `company_id` with `GET /v1/companies/{company_id}/details`. A listed fund response has `asset_type: "fund"`, a `fund` relationship, and available factsheets in `documents` with `type: "fund_factsheet"`.

Factsheets remain fund documents rather than issuer filings. A fund without a stored factsheet returns `documents: null`.

## Handle thin trading safely

NGX ETFs can trade infrequently. A line response can contain an unchanged end-of-day close on a zero-volume date. Rangler retains that close so charts do not acquire artificial gaps.

`format=ohlcv` is stricter. Rangler omits zero-volume or incomplete candles and reports the count in `coverage.omitted_incomplete_candles`. Use `format=line` when you need every available close.

<Warning>
  ETF prices are end-of-day and are not adjusted for distributions or other corporate actions. Do not present them as real-time quotes or a total-return series.
</Warning>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.