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:
Repeat tickers to return a subset:
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:
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.
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:
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.
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.