AI-powered blog post search
curl --request GET \
--url https://api.ngnmarket.com/v1/blog/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ngnmarket.com/v1/blog/search"
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/blog/search', 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/blog/search",
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/blog/search"
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/blog/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngnmarket.com/v1/blog/search")
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": [
{
"slug": "dangote-cement-q1-analysis",
"title": "Dangote Cement Q1 2026 Results: What the Numbers Say",
"excerpt": "A breakdown of Dangote Cement's Q1 2026 financial results.",
"cover_image": "https://ngnmarket.com/images/blog/dangote-cement-q1.jpg",
"published_date": "2026-04-07",
"categories": [
"corporate-news"
],
"tags": [
"earnings"
],
"companies": [
"DANGCEM"
],
"url": "https://ngnmarket.com/blog/dangote-cement-q1-analysis",
"relevance_score": 12
},
{
"slug": "ngx-cement-sector-outlook",
"title": "NGX Cement Sector: Competitive Dynamics in 2026",
"excerpt": "How DANGCEM, WAPCO, and BUA Cement are positioning.",
"cover_image": "https://ngnmarket.com/images/blog/cement-sector.jpg",
"published_date": "2026-03-15",
"categories": [
"markets"
],
"tags": [
"stocks"
],
"companies": [
"DANGCEM",
"WAPCO"
],
"url": "https://ngnmarket.com/blog/ngx-cement-sector-outlook",
"relevance_score": 8
}
],
"total": 2,
"query": "Dangote Cement",
"expanded_terms": [
"dangote",
"cement",
"dangcem",
"dcp",
"bua",
"wapco"
]
},
"meta": {
"plan": "free",
"calls_used": 314,
"calls_remaining": 9686,
"reset_at": "2026-05-15T23:57:00.000Z"
}
}Blog Endpoints
Search Blog Posts
Full-text search across all published posts with AI query expansion and relevance scoring.
GET
/
blog
/
search
AI-powered blog post search
curl --request GET \
--url https://api.ngnmarket.com/v1/blog/search \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.ngnmarket.com/v1/blog/search"
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/blog/search', 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/blog/search",
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/blog/search"
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/blog/search")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.ngnmarket.com/v1/blog/search")
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": [
{
"slug": "dangote-cement-q1-analysis",
"title": "Dangote Cement Q1 2026 Results: What the Numbers Say",
"excerpt": "A breakdown of Dangote Cement's Q1 2026 financial results.",
"cover_image": "https://ngnmarket.com/images/blog/dangote-cement-q1.jpg",
"published_date": "2026-04-07",
"categories": [
"corporate-news"
],
"tags": [
"earnings"
],
"companies": [
"DANGCEM"
],
"url": "https://ngnmarket.com/blog/dangote-cement-q1-analysis",
"relevance_score": 12
},
{
"slug": "ngx-cement-sector-outlook",
"title": "NGX Cement Sector: Competitive Dynamics in 2026",
"excerpt": "How DANGCEM, WAPCO, and BUA Cement are positioning.",
"cover_image": "https://ngnmarket.com/images/blog/cement-sector.jpg",
"published_date": "2026-03-15",
"categories": [
"markets"
],
"tags": [
"stocks"
],
"companies": [
"DANGCEM",
"WAPCO"
],
"url": "https://ngnmarket.com/blog/ngx-cement-sector-outlook",
"relevance_score": 8
}
],
"total": 2,
"query": "Dangote Cement",
"expanded_terms": [
"dangote",
"cement",
"dangcem",
"dcp",
"bua",
"wapco"
]
},
"meta": {
"plan": "free",
"calls_used": 314,
"calls_remaining": 9686,
"reset_at": "2026-05-15T23:57:00.000Z"
}
}Searches all published posts by keyword. Queries are automatically expanded using AI, so searching
"MTNN" will find articles about “MTN Nigeria”, and "gtbank" will surface “Guaranty Trust” results.
Each result includes a relevanceScore and a canonical url linking to the full article on ngnmarket.com/blog.
Narrow results to a date window with fromDate and toDate, and cap the number of hits with limit (max 10):
curl "https://api.ngnmarket.com/v1/blog/search?q=Dangote%20Cement&fromDate=2026-01-01&limit=10" \
-H "Authorization: Bearer ngm_live_YOUR_KEY"
const url = new URL('https://api.ngnmarket.com/v1/blog/search');
url.searchParams.set('q', 'Dangote Cement');
url.searchParams.set('fromDate', '2026-01-01');
url.searchParams.set('limit', '10');
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/blog/search',
params={'q': 'Dangote Cement', 'fromDate': '2026-01-01', 'limit': 10},
headers={'Authorization': 'Bearer ngm_live_YOUR_KEY'},
)
data = res.json()['data']
If you want posts for a specific NGX-listed stock, use GET /blog/posts?company=SYMBOL instead. It’s a direct lookup on the
companies field and doesn’t require a search query.Authorizations
Pass your API key as a Bearer token: Authorization: Bearer ngm_live_YOUR_KEY.
Generate keys at ngnmarket.com/dashboard/developer.
Query Parameters
Search query. Must be a non-empty string.
Example:
"Dangote Cement"
Maximum number of results (1–10). Defaults to 5.
Required range:
1 <= x <= 10Filter posts published on or after this date (e.g. 2026-01-01).
Filter posts published on or before this date.