Director dealings by company
curl --request GET \
--url https://api.ngnmarket.com/v1/companies/{symbol}/director-dealings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ngnmarket.com/v1/companies/{symbol}/director-dealings"
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/companies/{symbol}/director-dealings', 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/companies/{symbol}/director-dealings",
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/companies/{symbol}/director-dealings"
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/companies/{symbol}/director-dealings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngnmarket.com/v1/companies/{symbol}/director-dealings")
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": {
"data": [
{
"id": 281,
"disclosure_id": 2261,
"company_symbol": "UCAP",
"company_name": "UNITED CAPITAL PLC",
"insider_name": "OYEBODE ISAAC BAYONLE",
"insider_slug": "oyebode-isaac-bayonle",
"insider_position": "Team Member, Internal Control.",
"insider_type": "employee",
"is_corporate_insider": false,
"notification_type": "initial",
"transaction_type": "sale",
"side": "sell",
"is_open_market": true,
"acquired_or_disposed": "D",
"instrument_type": "ordinary_shares",
"total_volume": 3651,
"average_price": 17.85,
"total_value": 65170.35,
"total_value_reported": null,
"currency": "NGN",
"shares_owned_after": null,
"shares_owned_after_source": null,
"letter_date": "2026-08-18",
"transaction_date_from": "2026-08-17",
"transaction_date_to": null,
"date_suspect": false,
"place_of_transaction": "NIGERIA",
"days_to_file": 2,
"days_letter_to_disclosure": 1,
"tranche_count": 1,
"tranches": [
{
"volume": 3651,
"price": 17.85,
"price_low": null,
"price_high": null,
"date": "2026-08-18"
}
],
"is_scanned": false,
"extraction_confidence": "high",
"extraction_notes": null,
"document_url": "https://doclib.ngxgroup.com/Financial_NewsDocs/176_SIGNED_-_NOTICE_OF_INSIDER_DEALING_-_SALE_-_OYEBODE_ISAAC_BAYONLE-19.08.2026.pdf",
"disclosure_title": "UNITED CAPITAL PLC DIRECTORSDEALINGS",
"disclosed_at": "2026-08-19",
"price_at_txn": null,
"current_price": 18.6
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 25,
"true_total": 684,
"locked_rows": 25,
"pages": 2,
"has_next": true,
"has_prev": false
}
},
"meta": {
"plan": "pro",
"calls_used": 118,
"calls_remaining": 249882,
"reset_at": "2026-10-01T00:00:00.000Z"
}
}
Company Endpoints
Director Dealings
Structured director-dealings filings for a single NGX-listed company.
GET
/
companies
/
{symbol}
/
director-dealings
Director dealings by company
curl --request GET \
--url https://api.ngnmarket.com/v1/companies/{symbol}/director-dealings \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ngnmarket.com/v1/companies/{symbol}/director-dealings"
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/companies/{symbol}/director-dealings', 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/companies/{symbol}/director-dealings",
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/companies/{symbol}/director-dealings"
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/companies/{symbol}/director-dealings")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngnmarket.com/v1/companies/{symbol}/director-dealings")
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": {
"data": [
{
"id": 281,
"disclosure_id": 2261,
"company_symbol": "UCAP",
"company_name": "UNITED CAPITAL PLC",
"insider_name": "OYEBODE ISAAC BAYONLE",
"insider_slug": "oyebode-isaac-bayonle",
"insider_position": "Team Member, Internal Control.",
"insider_type": "employee",
"is_corporate_insider": false,
"notification_type": "initial",
"transaction_type": "sale",
"side": "sell",
"is_open_market": true,
"acquired_or_disposed": "D",
"instrument_type": "ordinary_shares",
"total_volume": 3651,
"average_price": 17.85,
"total_value": 65170.35,
"total_value_reported": null,
"currency": "NGN",
"shares_owned_after": null,
"shares_owned_after_source": null,
"letter_date": "2026-08-18",
"transaction_date_from": "2026-08-17",
"transaction_date_to": null,
"date_suspect": false,
"place_of_transaction": "NIGERIA",
"days_to_file": 2,
"days_letter_to_disclosure": 1,
"tranche_count": 1,
"tranches": [
{
"volume": 3651,
"price": 17.85,
"price_low": null,
"price_high": null,
"date": "2026-08-18"
}
],
"is_scanned": false,
"extraction_confidence": "high",
"extraction_notes": null,
"document_url": "https://doclib.ngxgroup.com/Financial_NewsDocs/176_SIGNED_-_NOTICE_OF_INSIDER_DEALING_-_SALE_-_OYEBODE_ISAAC_BAYONLE-19.08.2026.pdf",
"disclosure_title": "UNITED CAPITAL PLC DIRECTORSDEALINGS",
"disclosed_at": "2026-08-19",
"price_at_txn": null,
"current_price": 18.6
}
],
"pagination": {
"page": 1,
"limit": 25,
"total": 25,
"true_total": 684,
"locked_rows": 25,
"pages": 2,
"has_next": true,
"has_prev": false
}
},
"meta": {
"plan": "pro",
"calls_used": 118,
"calls_remaining": 249882,
"reset_at": "2026-10-01T00:00:00.000Z"
}
}
Returns structured director-dealings filings available for a single NGX-listed company. NGX publishes these as PDF letters, and this endpoint extracts the insider identity, transaction type, volume, price, value, tranche breakdown, and filing-timeliness data into structured fields.
This is different from
GET /companies/{symbol}/disclosures?category=director_dealings, which returns only the filing envelope such as the title, PDF link, and date.
Every row also includes price_at_txn (the closing price on the transaction date) and current_price, so you can see how the share price has moved since the transaction without making another request.
This endpoint requires a Pro plan or higher. Pro includes the 50 most recent filings per company. Business and Enterprise include the full available history in our dataset.
Coverage is partial, so an empty result does not necessarily mean there has been no director-dealings activity.
curl "https://api.ngnmarket.com/v1/companies/UCAP/director-dealings" \
-H "Authorization: Bearer ngm_live_YOUR_KEY"
curl "https://api.ngnmarket.com/v1/companies/UCAP/director-dealings?side=buy&minValue=10000000" \
-H "Authorization: Bearer ngm_live_YOUR_KEY"
const symbol = 'UCAP';
const res = await fetch(
`https://api.ngnmarket.com/v1/companies/${symbol}/director-dealings?side=buy`,
{ headers: { Authorization: 'Bearer ngm_live_YOUR_KEY' } }
);
const { data } = await res.json();
import requests
symbol = 'UCAP'
res = requests.get(
f'https://api.ngnmarket.com/v1/companies/{symbol}/director-dealings',
params={'side': 'buy', 'minValue': 10000000},
headers={'Authorization': 'Bearer ngm_live_YOUR_KEY'},
)
data = res.json()['data']
insider_type preserves the classification available in the filing, with values such as executive_director, senior_officer, employee, and connected_to_director. The insider filter groups these into broader buckets such as directors, executives, employees, connected, shareholders, and other, so you can filter without knowing every raw value.
Use insider_type directly when the distinction between those classifications matters for your analysis.Authorizations
Pass your API key as a Bearer token: Authorization: Bearer ngm_live_YOUR_KEY.
Generate keys at ngnmarket.com/dashboard/developer.
Path Parameters
NGX ticker symbol (e.g. GTCO). Case-insensitive.
Example:
"UCAP"
Query Parameters
Filter by transaction direction.
Available options:
buy, sell Filter by insider-type bucket.
Available options:
directors, executives, employees, connected, shareholders, other Minimum transaction value in NGN.
Example:
10000000
Required range:
x >= 1Results per page. Pro's true cap is 50 total rows regardless of paging.
Required range:
1 <= x <= 100