Top gainers and losers
curl --request GET \
--url https://api.ngnmarket.com/v1/market/movers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ngnmarket.com/v1/market/movers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ngnmarket.com/v1/market/movers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ngnmarket.com/v1/market/movers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ngnmarket.com/v1/market/movers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ngnmarket.com/v1/market/movers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngnmarket.com/v1/market/movers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"trade_date": "2026-04-17",
"summary": {
"total_gainers": 10,
"total_losers": 10,
"biggest_gainer": {
"symbol": "OKOMUOIL",
"change_percent": 9.94
},
"biggest_loser": {
"symbol": "TRANSCORP",
"change_percent": -9.8
}
},
"top_gainers": [
{
"symbol": "OKOMUOIL",
"company_name": "Okomu Oil Palm",
"logo_url": "https://cdn.jsdelivr.net/gh/ngnmarket/ngx-logos/dist/png/OKOMUOIL.png",
"sector": "Agriculture",
"market_cap": 456800000000,
"last_close": 364.5,
"todays_close": 400.7,
"change": 36.2,
"change_percent": 9.94,
"volume": 287340,
"value_traded": 115073718,
"trades": 412,
"updated_at": "2026-04-17T18:00:00.000Z"
}
],
"top_losers": [
{
"symbol": "TRANSCORP",
"company_name": "Transnational Corporation",
"logo_url": "https://cdn.jsdelivr.net/gh/ngnmarket/ngx-logos/dist/png/TRANSCORP.png",
"sector": "Conglomerates",
"market_cap": 87200000000,
"last_close": 10.2,
"todays_close": 9.2,
"change": -1,
"change_percent": -9.8,
"volume": 1820450,
"value_traded": 16748140,
"trades": 831,
"updated_at": "2026-04-17T18:00:00.000Z"
}
]
},
"meta": {
"plan": "pro",
"calls_used": 210,
"calls_remaining": 249790,
"reset_at": "2026-05-15T23:57:00.000Z"
}
}Market Endpoints
Market Movers
Retrieve the top gaining and losing NGX stocks for any trading date.
GET
/
market
/
movers
Top gainers and losers
curl --request GET \
--url https://api.ngnmarket.com/v1/market/movers \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ngnmarket.com/v1/market/movers"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.ngnmarket.com/v1/market/movers', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.ngnmarket.com/v1/market/movers",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.ngnmarket.com/v1/market/movers"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.ngnmarket.com/v1/market/movers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngnmarket.com/v1/market/movers")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"data": {
"trade_date": "2026-04-17",
"summary": {
"total_gainers": 10,
"total_losers": 10,
"biggest_gainer": {
"symbol": "OKOMUOIL",
"change_percent": 9.94
},
"biggest_loser": {
"symbol": "TRANSCORP",
"change_percent": -9.8
}
},
"top_gainers": [
{
"symbol": "OKOMUOIL",
"company_name": "Okomu Oil Palm",
"logo_url": "https://cdn.jsdelivr.net/gh/ngnmarket/ngx-logos/dist/png/OKOMUOIL.png",
"sector": "Agriculture",
"market_cap": 456800000000,
"last_close": 364.5,
"todays_close": 400.7,
"change": 36.2,
"change_percent": 9.94,
"volume": 287340,
"value_traded": 115073718,
"trades": 412,
"updated_at": "2026-04-17T18:00:00.000Z"
}
],
"top_losers": [
{
"symbol": "TRANSCORP",
"company_name": "Transnational Corporation",
"logo_url": "https://cdn.jsdelivr.net/gh/ngnmarket/ngx-logos/dist/png/TRANSCORP.png",
"sector": "Conglomerates",
"market_cap": 87200000000,
"last_close": 10.2,
"todays_close": 9.2,
"change": -1,
"change_percent": -9.8,
"volume": 1820450,
"value_traded": 16748140,
"trades": 831,
"updated_at": "2026-04-17T18:00:00.000Z"
}
]
},
"meta": {
"plan": "pro",
"calls_used": 210,
"calls_remaining": 249790,
"reset_at": "2026-05-15T23:57:00.000Z"
}
}The movers endpoint returns the biggest movers on the NGX for a given trading session — top gainers sorted by percentage gain and top losers sorted by percentage decline.
Each entry includes
logo_url, market_cap, previous close, today’s closing price, absolute and percentage change, volume, value traded, and trade count. Use the type filter to request only gainers or losers when building separate leaderboards.
For example, to fetch the top 5 gainers for a specific session:
curl "https://api.ngnmarket.com/v1/market/movers?type=gainers&limit=5&date=2026-04-17" \
-H "Authorization: Bearer ngm_live_YOUR_KEY"
const url = new URL('https://api.ngnmarket.com/v1/market/movers');
url.searchParams.set('type', 'gainers');
url.searchParams.set('limit', '5');
url.searchParams.set('date', '2026-04-17');
const res = await fetch(url, {
headers: { Authorization: 'Bearer ngm_live_YOUR_KEY' },
});
const { data } = await res.json();
import requests
res = requests.get(
'https://api.ngnmarket.com/v1/market/movers',
params={'type': 'gainers', 'limit': 5, 'date': '2026-04-17'},
headers={'Authorization': 'Bearer ngm_live_YOUR_KEY'},
)
data = res.json()['data']
Authorizations
Pass your API key as a Bearer token: Authorization: Bearer ngm_live_YOUR_KEY.
Generate keys at ngnmarket.com/dashboard/developer.
Query Parameters
Trading date in YYYY-MM-DD format. Omit for the most recent available day.
Example:
"2026-04-17"
Number of entries to return per category (gainers and losers each respect this limit). Maximum 50.
Required range:
1 <= x <= 50Filter to a single category. Omit to receive both.
Available options:
gainers, losers