Public JSON data · API version 1
API developer hub
Build with Biznesnetwork's markets, currencies, oil and source observations. Generate a request, inspect its freshness fields and copy a working example.
GET requests · no API key · no credentialsDownload OpenAPI 3.1Data status
Try a request
Select an endpoint and run a request.
Request examples
JavaScript
Python
cURL
Endpoint reference
| Endpoint | Data & freshness | Response fields | Cache |
|---|---|---|---|
| Markets API GET /api/markets | Six African index summaries. Check index_quality before treating a number as recent. Scheduled hourly checks; original source times retained | markets[].key, markets[].index, markets[].index_quality, markets[].updated | 30s |
| Exchange board GET /api/markets/{exchange} | A source-qualified equity board. Individual rows may be undated even when the headline index is dated. Scheduled hourly checks | rows[].symbol, rows[].price, rows[].observed_at, quality, index_quality | 30s |
| Rates API GET /api/currencies | Indicative cross-rates, not interbank, bureau or executable payment quotes. Hourly checks; provider publication is usually daily | base, rates[].code, rates[].rate, source, observed_at, quality | 120s |
| Crypto API GET /api/crypto | Crypto prices and source timestamps; reference snapshots and undated prices are distinguished. Scheduled hourly checks | coins[].slug, coins[].price_usd, coins[].observed_at, source, quality | 60s |
| Price Barometer API GET /api/barometer | Monthly basket. Reported and indicative entries are explicit; headline medians exclude illustrative entries. Monthly editorial compilation | period, reading, items[].basis, items[].price, items[].unit | 3600s |
| Oil Prices API GET /api/oil-prices | Eleven daily EIA spot benchmarks, source dates, compatible-unit histories and same-date Brent–WTI spread. Four scheduled source checks daily; EIA observations are daily | quote, history[].points, spread, refresh_status, fetched_at | 300s |
| Source Observations API GET /api/price-observations | Distinct source, market, product, unit and price-type series. No synthetic Ghana average. Two scheduled checks daily; original observations may be historical | rows[].raw_price, rows[].normalized, rows[].observed_at, matched, source_status | 300s |
| Data status API GET /api/status | Coverage and freshness per dataset; recent does not mean streaming. Assessed on each request from stored source dates | feeds[].quality, feeds[].checked_at, recent, total | 30s |
| Watchlist catalogue GET /api/watchlist | Public instruments and alert eligibility. Personal choices and targets are stored only in the visitor browser. Stored observations with eligibility assessed on request | items[].id, items[].value, items[].can_alert, items[].quality, alert_policy | 30s |
| Daily brief API GET /api/briefing | A dated, source-linked brief. Returns 404 if a requested day is not published. Published and refreshed by the hourly job | date, generated_at, facts, headlines, next_events | 300s |
| Business calculator API GET /api/calculators | FX after fees, margin and break-even, or fuel-trip estimates. Pass type=fx, margin or fuel and the matching calculator inputs. Invalid inputs return 400. Calculated on request | ok, results, assumptions, errors | 0s |
| Economic calendar API GET /api/calendar | Exact days and provisional week windows remain distinct. Only exact days are included in ICS exports. GSS source checked hourly; BoG source verified in the published seed | events[].precision, events[].date, events[].window, events[].source_url | 3600s |
Usage, errors & limits
- Origin quota: 120 JSON requests per minute per client address. Read
X-RateLimit-Limit,X-RateLimit-RemainingandX-RateLimit-Reset. Shared caches may serve responses without an origin request. - HTTP 429 includes
Retry-After. Wait before retrying; use exponential backoff for network failures. - HTTP 400 means invalid calculator input; 404 means an unknown exchange or unpublished brief; 503 means unavailable source data.
- Public JSON responses allow cross-origin reads with
Access-Control-Allow-Origin: *. No credentialed requests or custom authentication headers are required. - Cache responses for their documented interval. Browser polling does not make a source publish more frequently.
Dates, units & reuse
- HTTP 200 means the request worked, not that every value is current. Inspect
quality,observed_at, source dates and status fields. - Observation timestamps are Unix seconds or explicitly labeled ISO dates. Fetch/check times remain separate. Null means unknown; it is not zero.
- Keep original units and price types. A reference snapshot, monthly basket, daily spot quote and retail offer are different measures.
- Attribute Biznesnetwork and the original source. Original-source rights apply; aggregation does not grant a blanket redistribution licence.
- Version 1 adds fields without removing existing keys. Check
X-API-Version. No uptime or commercial market-data entitlement is implied.
Changelog
13 November 2026: developer hub, OpenAPI, source status, watchlist catalogue, daily brief, economic calendar, calculator endpoint and public CORS/quota headers. Existing market responses add source-quality metadata while keeping their existing keys.