---
name: ngnmarket
description: Use this skill to call the NGN Market API for Nigerian Exchange (NGX) market data. Make sure to use this skill whenever the user wants a stock price or quote for an NGX-listed company, a candlestick or OHLCV price chart, top gainers/losers or most-traded stocks, the daily market summary (ASI, volume, deals), sector performance or market breadth, year-to-date stock returns, dividend calendars or a company's dividend history, corporate disclosures or filings, financial statements (income statement, balance sheet, cash flow, ratios), company news, NGX index or ETF data, NGX-listed bonds, live or historical NGN/foreign-exchange rates, a company logo, or NGN Market blog content — even if they don't explicitly mention "NGN Market" or "NGX" by name. Requires an NGNMARKET_API_KEY environment variable.
compatibility: Requires an NGN Market API key in the NGNMARKET_API_KEY environment variable. REST API only — call endpoints directly with curl/fetch; no official SDK yet.
metadata:
  author: ngnmarket
  version: "1.0"
---

# NGN Market

NGN Market turns Nigerian Exchange (NGX) market activity into structured JSON: live and historical equity prices, indices, ETFs, bonds, forex rates, dividends, corporate disclosures, financial statements, and company news. Base URL `https://api.ngnmarket.com/v1`. Full docs: [docs.ngnmarket.com](https://docs.ngnmarket.com) · machine index: [docs.ngnmarket.com/llms.txt](https://docs.ngnmarket.com/llms.txt).

Every endpoint takes one bearer token and returns typed JSON in a consistent envelope. This file tells you which endpoint answers which question, exactly what each takes, and exactly what each gives back.

## Setup

Authenticate with a bearer token read from `NGNMARKET_API_KEY`. Never hardcode it; never ship it to client-side code (use a backend proxy).

```bash
export NGNMARKET_API_KEY="ngm_live_..."
```

No official SDK exists yet — call the REST API directly:

```bash
curl https://api.ngnmarket.com/v1/companies/DANGCEM \
  -H "Authorization: Bearer $NGNMARKET_API_KEY"
```

```javascript
const res = await fetch('https://api.ngnmarket.com/v1/companies/DANGCEM', {
  headers: { Authorization: `Bearer ${process.env.NGNMARKET_API_KEY}` },
});
const { data } = await res.json();
```

## Choosing an endpoint

Pick the narrowest endpoint that answers the question. Start from what you already have:

| You have | Use | Path |
| --- | --- | --- |
| A stock symbol, want its current price | Company detail | `GET /companies/{symbol}` |
| Many stocks, want prices in one call | Browse companies | `GET /companies` |
| A stock symbol, want price history / a chart | Price chart | `GET /companies/{symbol}/chart` |
| A stock symbol, want financial statements | Financial statements | `GET /companies/{symbol}/financials` |
| A stock symbol, want recent news | Company news | `GET /companies/{symbol}/news` |
| A stock symbol, want dividend history | Dividend history | `GET /companies/{symbol}/dividends` |
| A stock symbol, want its own disclosures | Company disclosures | `GET /companies/{symbol}/disclosures` |
| Want all NGX symbols for a picker/lookup table | Company identifiers | `GET /companies/identifiers` |
| Want today's market summary (ASI, volume, deals) | Market snapshot | `GET /market/snapshot` |
| Want to know if NGX is open right now | Market status | `GET /market/status` |
| Want upcoming (or past) public holidays | Market holidays | `GET /market/holidays` |
| Want the most actively traded stocks | Top trades | `GET /market/top-trades` |
| Want today's gainers/losers | Market movers | `GET /market/movers` |
| Want advance/decline breadth history | Market breadth | `GET /market/breadth` |
| Want sector rotation / which sectors are hot | Market sectors | `GET /market/sectors` |
| Want best/worst YTD stock performers | YTD performers | `GET /market/ytd-performers` |
| Want valid trading dates for date pickers | Available dates | `GET /market/available-dates` |
| Want a dividend calendar (future ex-dates) | Upcoming dividends | `GET /dividends/upcoming` |
| Want dividends that recently went ex | Recent dividends | `GET /dividends/recent` |
| Want current NGN ⇄ foreign-currency rates | Forex current | `GET /forex/current` |
| Want historical FX rates | Forex history | `GET /forex/history` |
| Want all NGX indices | Index list | `GET /indices` |
| An index symbol, want value + constituents | Index detail | `GET /indices/{symbol}` |
| An index symbol, want its history | Index chart | `GET /indices/{symbol}/chart` |
| Want all NGX-listed ETFs | ETF list | `GET /etfs` |
| An ETF symbol, want its fund profile | ETF detail | `GET /etfs/{symbol}` |
| An ETF symbol, want its price history | ETF chart | `GET /etfs/{symbol}/chart` |
| Want NGX bond instruments | Bond list | `GET /bonds` |
| Want corporate filings/disclosures across NGX | Disclosures feed | `GET /disclosures` |
| Want valid disclosure filter values | Disclosure types | `GET /disclosures/types` |
| Want NGN Market blog posts | Blog list | `GET /blog/posts` |
| A loose topic, want relevant blog posts | Blog search | `GET /blog/search` |
| A blog slug, want the full post | Blog post detail | `GET /blog/posts/{slug}` |
| A company, want its logo | *(no endpoint)* | `logo_url` field / `ngx-logos` CDN |
| Your own quota/usage | Account usage | `GET /account/usage` |
| Your own request history | Account logs | `GET /account/logs` |

**Symbol lookups are case-insensitive** (`dangcem` and `DANGCEM` both work). There is no per-call credit system — every request counts as one call against your monthly quota, regardless of endpoint.

---

## Response envelope

Success:
```json
{
  "success": true,
  "data": { },
  "meta": {
    "plan": "starter",
    "calls_used": 4821,
    "calls_remaining": 95179,
    "reset_at": "2026-06-15T23:57:00.000Z"
  }
}
```
`meta.plan` is one of `free`, `hobby`, `starter`, `growth`, `business`, `enterprise`. `meta.reset_at` is your account's **billing renewal date**, not the calendar month start.

Error:
```json
{
  "success": false,
  "error": {
    "code": "PLAN_REQUIRED",
    "message": "This endpoint requires a starter plan or higher.",
    "required_plan": "starter",
    "current_plan": "free"
  }
}
```

| Status | Code | Meaning |
| --- | --- | --- |
| 401 | `MISSING_API_KEY` | Authorization header missing or malformed |
| 401 | `INVALID_API_KEY` | Key not found or revoked |
| 403 | `PLAN_REQUIRED` | Endpoint requires a higher-tier plan |
| 403 | `IP_NOT_ALLOWED` | Request IP not in the key's allowlist |
| 429 | `RATE_LIMITED` | Per-minute request limit exceeded |
| 429 | `QUOTA_EXCEEDED` | Monthly call limit reached |
| 404 | `NOT_FOUND` | Route/resource doesn't exist |
| 500 | `SERVER_ERROR` | Unexpected server error |

`MISSING_API_KEY`/`INVALID_API_KEY`/`RATE_LIMITED`/`QUOTA_EXCEEDED` don't count against your quota; the rest do (they already passed auth/quota checks).

---

## Market data

### Daily market summary

`GET /market/snapshot` · Free
[API reference](https://docs.ngnmarket.com/api-reference/market/snapshot)

- **When:** today's (or a given day's) NGX headline numbers — ASI level, deals, volume, market-cap breakdown.
- **Takes:** `date` (`YYYY-MM-DD`, optional — omit for the latest session).
- **Gives:** `asi`, `asi_change`, `asi_change_percent`, `ytd_asi_change_percent`, `deals`, `volume`, `value_traded`, `market_cap{equity, bonds, etfs, total}`, `breadth{advancers, decliners, unchanged, adv_dec_ratio}`, `turnover_rate`, `total_listed_securities`, `session{open_time, close_time, timezone}`, `updated_at`. Intraday, refreshed every 20 minutes during trading hours (Mon–Fri, 09:00–16:00 WAT) when `date` is omitted.

### Market open/close status

`GET /market/status` · Free
[API reference](https://docs.ngnmarket.com/api-reference/market/status)

- **When:** checking whether NGX is trading right now, and why not if it's closed.
- **Takes:** no parameters.
- **Gives:** open/closed status computed in Africa/Lagos time, the reason if closed (weekend, holiday, pre-market, after-hours), next scheduled open time, and minutes-to-close when open.

### Upcoming NGX holidays

`GET /market/holidays` · Free
[API reference](https://docs.ngnmarket.com/api-reference/market/holidays)

- **When:** building a trading calendar or checking if a date is a market holiday.
- **Takes:** `upcoming` (bool, default `true` — set `false` to include past holidays), `limit` (1–100, default 50).
- **Gives:** list of NGX public holidays with date and name.

### Market date index

`GET /market/available-dates` · Free
[API reference](https://docs.ngnmarket.com/api-reference/market/available-dates)

- **When:** populating a date picker or validating a date before querying other endpoints.
- **Takes:** `limit` (1–365, default 90).
- **Gives:** `count`, `latest`, `earliest`, and `data[]` of `{date, label, asi, formatted_date}` — `label` is a convenience tag (`today`/`yesterday`/`latest`/`previous`) for recent dates.

### Most-traded stocks

`GET /market/top-trades` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/market/top-trades)

- **When:** ranking NGX securities by naira value traded in a session.
- **Takes:** `date` (optional, omit for latest), `limit` (default 10, max 50).
- **Gives:** ranked `data[]` of `{rank, symbol, company_name, logo_url, sector, market_cap, volume, value_traded, price, price_change_percent, trades}`.

### Top gainers and losers

`GET /market/movers` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/market/movers)

- **When:** "what's up/down today" — biggest movers by percentage.
- **Takes:** `type` (`gainers`|`losers`, omit for both), `date` (optional), `limit` (default 10, max 50, applies per category).
- **Gives:** `topGainers[]`/`topLosers[]`, each a `StatisticsEntry`: `{symbol, company_name, logo_url, sector, market_cap, last_close, todays_close, change, change_percent, volume, value_traded, trades, updated_at}`, plus a `summary{total_gainers, total_losers, biggest_gainer, biggest_loser}`.

### Trading activity & breadth history

`GET /market/breadth` · Growth
[API reference](https://docs.ngnmarket.com/api-reference/market/breadth)

- **When:** advance/decline history across sessions — identifying active days or filtering date ranges.
- **Takes:** `from`/`to` (`YYYY-MM-DD`, overrides `limit`) or `limit` (1–365, default 90).
- **Gives:** per-date `{date, label, gainers_count, losers_count, unchanged_count, total_records, formatted_date}`.

### Sector performance

`GET /market/sectors` · Growth
[API reference](https://docs.ngnmarket.com/api-reference/market/sectors)

- **When:** which parts of the market are gaining or pulling back — sector rotation.
- **Takes:** no parameters.
- **Gives:** per-sector `{sector, company_count, total_market_cap, total_value_traded, total_volume, change_1d, change_7d, change_52w, breadth}`, plus `summary{top_sector_1d, top_sector_7d}`.

### Year-to-date performers

`GET /market/ytd-performers` · Growth
[API reference](https://docs.ngnmarket.com/api-reference/market/ytd-performers)

- **When:** best or worst YTD returns, current year or a past year.
- **Takes:** `type` (`best`|`worst`, default `best`), `limit` (max 30, default 10), `year` (optional, defaults to current year).
- **Gives:** ranked `data[]` of `{symbol, company_name, sector, year_start_price, year_start_date, current_price, end_date, ytd_pct}`.

---

## Companies

### Browse companies

`GET /companies` · Free
[API reference](https://docs.ngnmarket.com/api-reference/companies/list)

- **When:** a filterable, sortable, paginated list of all NGX-listed companies with current prices — bulk quotes, a stock screener, a live ticker.
- **Takes:** `page` (default 1), `limit` (max 200, default 50), `sector` (exact match), `search` (partial match on name/ticker), `sort` (`symbol`|`company_name`|`sector`|`current_price`|`market_cap`|`volume`|`price_change_percent`|`shares_outstanding`|`change_7d_percent`|`change_52w_percent`, default `market_cap`), `order` (`asc`|`desc`, default `desc`), `minMarketCap`/`maxMarketCap` (NGN).
- **Gives:** paginated `CompanyListItem[]`: `{id, symbol, name, logo_url, sector, sub_sector, market_classification, shares_outstanding, website, price, prev_close, day_high, day_low, volume, market_cap, price_change, price_change_percent, change7dPercent, change52wPercent, high52wk, low52wk, last_updated}`. Prices refresh every 20 minutes during trading hours (Mon–Fri, 09:00–16:00 WAT); reflect last close otherwise.

### Company identifiers

`GET /companies/identifiers` · Free
[API reference](https://docs.ngnmarket.com/api-reference/companies/identifiers)

- **When:** a lightweight, unpaginated symbol→name→ISIN lookup table — populating a dropdown or validating a ticker.
- **Takes:** no parameters.
- **Gives:** every listed company as `{id, symbol, name, logo_url, international_sec_id}`.

### Full company profile

`GET /companies/{symbol}` · Hobby
[API reference](https://docs.ngnmarket.com/api-reference/companies/detail)

- **When:** a comprehensive company page or a single stock's live quote.
- **Takes:** `symbol` (path, required).
- **Gives:** `CompanyDetail`: identity (`symbol`, `name`, `sector`, `sub_sector`, `market_classification`, `shares_outstanding`, `date_listed`, `date_incorporated`, `about`, `website`, `email`, `phone`, `address`, `nature_of_business`, `logo_url`, `international_sec_id`), price data (`current_price`, `prev_close`, `open_price`, `day_high`, `day_low`, `volume`, `value_traded`, `market_cap`, `price_change`, `price_change_percent`, `high52wk`/`low52wk` + dates), and fundamentals — `ttm_eps`, `latest_equity`, `ttm_dividends`, `pb_ratio`, `debt_to_equity`, `current_ratio`, `dividend_yield` — **all nullable**, `null` when balance-sheet data isn't available; always provide a fallback. `last_updated` reflects the last price write (every 20 min in trading hours).

### Price chart (OHLCV)

`GET /companies/{symbol}/chart` · Hobby
[API reference](https://docs.ngnmarket.com/api-reference/companies/chart)

- **When:** a candlestick or line chart of historical prices.
- **Takes:** `symbol` (path, required), `period` (`7d`|`30d`|`90d`|`1y`|`5y`|`all`, ignored if `from`/`to` given), `from`/`to` (`YYYY-MM-DD`, take priority over `period`), `format` (`detailed` default — full objects with OHLCV/VWAP/trade_count/change; `chart` — compact `[timestamp, close]`; `ohlcv` — compact `[timestamp, open, high, low, close, volume]`, candlestick-ready).
- **Gives:** `{symbol, company_name, format, period, count, data[], statistics{first_price, last_price, min_price, max_price, price_change, price_change_percent, start_date, end_date}}`. Only `close` is guaranteed on every point — `open`/`high`/`low`/`volume` can be `null`; check before drawing a candle body and fall back to a line/marker.

### Financial statements

`GET /companies/{symbol}/financials` · Business
[API reference](https://docs.ngnmarket.com/api-reference/companies/financials)

- **When:** income statement, balance sheet, cash flow, or computed ratios for fundamental analysis.
- **Takes:** `symbol` (path, required), `periodType` (`annual`|`quarterly`), `year` (optional), `limit` (1–100, default 10). Ordered most-recent first.
- **Gives:** array of `FinancialPeriod`: `{period, period_type, year, quarter, period_label, currency, income_statement{revenue, cost_of_sales, gross_profit, operating_expenses, operating_income, interest_income, interest_expense, pretax_income, income_tax_expense, net_income, eps_basic, eps_diluted}, balance_sheet{cash_and_equivalents, receivables, inventory, current_assets, ppe_net, intangible_assets, total_assets, accounts_payable, short_term_debt, current_liabilities, long_term_debt, total_liabilities, share_capital, retained_earnings, shareholders_equity, total_liabilities_and_equity}, cash_flow{net_cash_operating, net_cash_investing, net_cash_financing, capital_expenditure, free_cash_flow, dividends_paid}, ratios{gross_margin, operating_margin, net_profit_margin, return_on_equity, return_on_assets, current_ratio, debt_to_equity, interest_coverage, free_cash_flow_margin, bvps, fcfps, revenue_per_share}}`. All `ratios` fields are nullable.

### Company news

`GET /companies/{symbol}/news` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/companies/news)

- **When:** recent news articles about a specific NGX company, sourced live from Nigerian financial outlets.
- **Takes:** `symbol` (path, required), `limit` (1–50, default 10), `maxAge` (days, 1–365, default 90).
- **Gives:** `{company, total, data[]}` where each article is `{title, link, source, pub_date, days_old, time_ago, guid}`.

### Dividend history (per company)

`GET /companies/{symbol}/dividends` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/companies/dividends)

- **When:** a single company's full dividend history, most recent first.
- **Takes:** `symbol` (path, required), `from`/`to` (ex-dividend date range), `limit` (1–100, omit for all records).
- **Gives:** array of `{symbol, company_name, sector, ex_dividend_date, dividend (NGN/share), type, payment_date, yield}`.

### Disclosures (per company)

`GET /companies/{symbol}/disclosures` · Free
[API reference](https://docs.ngnmarket.com/api-reference/companies/disclosures)

- **When:** one company's corporate filings. Equivalent to `GET /disclosures?symbol={symbol}`, scoped.
- **Takes:** `symbol` (path, required), `type`, `from`/`to`, `sort` (`disclosed_at`|`modified_at`|`submission_type`), `order`, `page`, `limit` (default 25).
- **Gives:** see the shared `Disclosure` shape below.

---

## Dividends

### Upcoming dividends

`GET /dividends/upcoming` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/dividends/upcoming)

- **When:** a dividend calendar — companies with an ex-dividend date on or after today, chronological.
- **Takes:** `page` (default 1), `limit` (1–100, default 20).
- **Gives:** paginated array of the shared dividend shape (see [Company dividend history](#dividend-history-per-company) above).

### Recent dividends

`GET /dividends/recent` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/dividends/recent)

- **When:** dividends whose ex-date fell within the last 60 days.
- **Takes:** `page` (default 1), `limit` (1–100, default 20).
- **Gives:** same shape as Upcoming dividends.

---

## Forex

### Live NGN exchange rates

`GET /forex/current` · Free
[API reference](https://docs.ngnmarket.com/api-reference/forex/current)

- **When:** converting NGN to/from a foreign currency right now.
- **Takes:** no parameters — returns all supported currencies in one call.
- **Gives:** `{target: "NGN", date, rates[]}`, each `{currency, rate, inverse_rate, daily_change, daily_change_percent, last_updated}`. `rate` is how much of the foreign currency ₦1 buys (e.g. a USD rate of `0.000623` means ₦1 = $0.000623). NGN→FX is `amount × rate`; FX→NGN is `amount ÷ rate`; FX→FX crosses through NGN.

### Historical NGN forex rates

`GET /forex/history` · Hobby
[API reference](https://docs.ngnmarket.com/api-reference/forex/history)

- **When:** a rate trend or a specific past date's rate.
- **Takes:** `source` (default `USD`), `target` (default `NGN`), `currency` (shorthand, overridden by explicit `source`/`target`), `from`/`to` (default `to` = today), `limit`.
- **Gives:** array of `{date, currency, rate}`.

---

## Indices

### List indices

`GET /indices` · Free
[API reference](https://docs.ngnmarket.com/api-reference/indices/list)

- **When:** an overview of every NGX index, or discovering symbols before calling detail/chart.
- **Takes:** no parameters.
- **Gives:** array of `{symbol, name, value, change_pct}`.

### Index detail and constituents

`GET /indices/{symbol}` · Hobby
[API reference](https://docs.ngnmarket.com/api-reference/indices/detail)

- **When:** a specific index's description, current value, and constituent securities with weights.
- **Takes:** `symbol` (path, required, e.g. `NGX30`).
- **Gives:** `{symbol, name, description, value, change_pct, constituents[{ticker, name, weight}]}`.

### Index chart

`GET /indices/{symbol}/chart` · Hobby
[API reference](https://docs.ngnmarket.com/api-reference/indices/chart)

- **When:** a time series of daily closing values for an index.
- **Takes:** `symbol` (path, required), `period` (default `30d`) or `from`/`to`, `format` (`detailed` default | `chart` = compact `[timestamp, value]`).
- **Gives:** `{symbol, format, period, count, statistics{start_date, end_date, start_value, end_value, change, change_percent, min_value, max_value, return_1m, return_3m, return_1y, return_ytd}, data[]}`.

---

## ETFs

### List ETFs

`GET /etfs` · Free
[API reference](https://docs.ngnmarket.com/api-reference/etfs/list)

- **When:** every NGX-listed ETF/ETP with current price and performance.
- **Takes:** `page`, `limit`, `search`, `sort` (`name`|`symbol`|`price`|`price_change_percent`|`change_7d_percent`|`change_ytd_percent`|`change_52w_percent`|`volume`|`value_traded`), `order`.
- **Gives:** array of `{symbol, isin, name, fund_manager, index_tracked, current_price, prev_close, price_change, price_change_percent, change_7d_percent, change_ytd_percent, change_52w_percent, volume, value_traded, avg_vol_3m, high_52wk, low_52wk, stats_date}` — most fields nullable.

### ETF detail

`GET /etfs/{symbol}` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/etfs/detail)

- **When:** full fund profile (ISIN, fund manager, index tracked, trustee, custodian, liquidity provider) plus latest OHLCV and 52-week range.
- **Takes:** `symbol` (path, required).
- **Gives:** the ETF's fund profile and latest snapshot (see [List ETFs](#list-etfs) fields; detail adds trustee/custodian/liquidity-provider/website).

### ETF chart

`GET /etfs/{symbol}/chart` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/etfs/chart)

- **When:** historical ETF prices.
- **Takes:** `symbol` (path, required), `period` (default `30d`) or `from`/`to`, `format` (`detailed`|`chart` = compact `[date, price]`).
- **Gives:** `{format, period, count, statistics{start_date, end_date, start_price, end_price, change, change_percent, min_price, max_price, return_1m, return_3m, return_1y, return_ytd}, data[]}`.

---

## Bonds

### NGX-listed bond instruments

`GET /bonds` · Starter
[API reference](https://docs.ngnmarket.com/api-reference/bonds/list)

- **When:** government or corporate bonds listed on NGX.
- **Takes:** `page` (default 1), `limit` (max 100, default 50), `search` (name/issuer/ISIN), `type` (`government`|`corporate`).
- **Gives:** `{id, isin, name, issuer, type, coupon (% annual), issue_date, maturity_date, open_price, created_at, updated_at}`.

---

## Disclosures

### Disclosures feed

`GET /disclosures` · Free
[API reference](https://docs.ngnmarket.com/api-reference/disclosures/list)

- **When:** corporate filings across all of NGX — financial statements, AGM notices, board meetings, director dealings, earnings forecasts.
- **Takes:** `symbol`, `type` (see below), `search`, `from`/`to`, `sort` (`disclosed_at`|`modified_at`|`company_name`|`submission_type`), `order`, `page`, `limit` (default 25).
- **Gives:** paginated `Disclosure[]`: `{title, company_name, company_symbol, isin, submission_type, document_url, disclosed_at, modified_at}`. `document_url` links the source PDF on the NGX document library.

### Disclosure submission types

`GET /disclosures/types` · Free
[API reference](https://docs.ngnmarket.com/api-reference/disclosures/types)

- **When:** discovering valid `type` filter values before calling the disclosures feed. Don't guess a type string — call this first.
- **Takes:** no parameters.
- **Gives:** all submission types present in the database with document counts (includes values like `Financial Statements`, `Corporate Actions`, `Board Meeting (BM)`, `AGM`, `EGM`, `DirectorsDealings`, `EarningForcast`).

---

## Blog

### Blog post list

`GET /blog/posts` · Free
[API reference](https://docs.ngnmarket.com/api-reference/blog/posts)

- **When:** paginated NGN Market blog content, newest first (20/page).
- **Takes:** `page`, `category` (`markets`|`corporate-news`|`economy`|`industries`|`technology`|`personal-finance`|`product-updates`), `company` (ticker), `tag` (one of 13 slugs, e.g. `stocks`, `dividends`, `cbn`, `t-bills`) — all combinable.
- **Gives:** array of `{slug, title, excerpt, cover_image, published_date, categories[], tags[], companies[], url}`.

### Blog search (AI-powered)

`GET /blog/search` · Free
[API reference](https://docs.ngnmarket.com/api-reference/blog/search)

- **When:** full-text search with query expansion (e.g. "Dangote" also matches posts referencing `DANGCEM`) via Gemini; falls back to keyword match if AI is unavailable.
- **Takes:** `q` (required), `limit` (1–10, default 5), `from`/`to` (publish date range).
- **Gives:** `{data[], total, query, expanded_terms[]}`, ordered by relevance.

### Blog post detail

`GET /blog/posts/{slug}` · Free
[API reference](https://docs.ngnmarket.com/api-reference/blog/post-detail)

- **When:** the full record for one post — author profile, named taxonomy, an HTML content preview.
- **Takes:** `slug` (path, required — from a list or search response).
- **Gives:** `{slug, title, excerpt, cover_image, published_date, is_featured, author{name, bio, website, twitter, linkedin, avatar}, categories[{name, slug}], tags[{name, slug}], companies[{symbol, slug}], url, content{html}}`. `content.html` is the "Key Highlights" section if present, else the first 500 characters — the full article lives at the canonical `url`.

---

## Account

### Quota status and usage

`GET /account/usage` · Free (all plans)
[API reference](https://docs.ngnmarket.com/api-reference/account/usage)

- **When:** checking remaining quota or a 30-day usage summary before running a batch job.
- **Takes:** no parameters.
- **Gives:** `{period, calls_used, calls_limit, calls_remaining, reset_at, daily[{date, calls}], top_endpoints[{endpoint, calls}], status_breakdown{2xx, 4xx, 5xx, total}}`.

### Request log history

`GET /account/logs` · Starter or higher
[API reference](https://docs.ngnmarket.com/api-reference/account/logs)

- **When:** debugging — what did my key actually call, and what did it get back.
- **Takes:** `page` (default 1), `limit` (1–1000, default 100), `status` (`2xx`|`4xx`|`5xx`), `endpoint` (partial match).
- **Gives:** `{logs[{id, method, endpoint, status_code, latency_ms, ip_address, timestamp}], pagination{page, limit, total, pages}}`.

---

## Company logos

No dedicated endpoint. Every company/market response that includes a company already has `logo_url` — `/companies`, `/companies/{symbol}`, `/market/top-trades`, `/market/movers`. For direct CDN access without an API call: `https://cdn.jsdelivr.net/gh/ngnmarket/ngx-logos/dist/png/{SYMBOL}.png` (also `webp`, `ico`), or the `ngx-logos` npm package for local bundling.

## Rate limits

Every response includes `RateLimit-Policy`, `RateLimit-Limit`, `RateLimit-Remaining`, `RateLimit-Reset` (IETF draft-7). A `429` also includes `Retry-After`. Per-minute limits by plan: free 30, hobby 60, starter 120, growth 200, business 300, enterprise unlimited. Monthly call quotas: free 3,000, hobby 10,000, starter 100,000, growth 500,000, business 2,000,000, enterprise unlimited.

## Gotchas

- **Price freshness:** `current_price`/`price_change`/etc. refresh every 20 minutes during NGX trading hours (Mon–Fri, 09:00–16:00 WAT); outside those hours they reflect the last session's close. Check `last_updated` before treating a value as live.
- **Symbols are case-insensitive** everywhere (`dangcem` = `DANGCEM`).
- **Chart `format` matters:** `ohlcv` for candlesticks, `chart` for a simple line, `detailed` (default) for full objects. Only `close` is guaranteed non-null on chart data points.
- **Fundamentals are nullable.** `CompanyDetail`'s `ttm_eps`, `pb_ratio`, `debt_to_equity`, `current_ratio`, `dividend_yield`, `ttm_dividends` are `null` when balance-sheet data isn't available — always provide a fallback, don't assume a number.
- **Don't guess disclosure `type` values** — call `GET /disclosures/types` first.
- **`meta.reset_at`** is the account's billing renewal date, not the calendar month start.
- **This is a static reference file, not a live tool connection.** You still make your own HTTP requests with your API key — nothing is proxied or executed by NGN Market.

## Reference

- Machine index for agents: [docs.ngnmarket.com/llms.txt](https://docs.ngnmarket.com/llms.txt)
- Full OpenAPI 3.1 spec: [docs.ngnmarket.com/openapi.yaml](https://docs.ngnmarket.com/openapi.yaml)
- [Install this skill](https://docs.ngnmarket.com/install-skill) · [Agent quickstart](https://docs.ngnmarket.com/agent-quickstart)
- [Authentication](https://docs.ngnmarket.com/authentication) · [Response format](https://docs.ngnmarket.com/response-format) · [Errors](https://docs.ngnmarket.com/errors) · [Plans & limits](https://docs.ngnmarket.com/plans) · [Rate limits](https://docs.ngnmarket.com/rate-limits)
- Worked examples: [docs.ngnmarket.com/guides/*](https://docs.ngnmarket.com/guides/live-price-ticker)
