Developers
Build on NESTICT DMS PORTAL data with our REST API — schools, geography, postal, banks, and file catalogue metadata.
Quick start
- Create an account and choose a plan that includes API access.
- Open Dashboard → API keys and create a key (
ksd_…). - Send
X-Api-Key(or?api_key=) on every request. - Base URL:
https://www.unified.nestict.com/api/v1
Authentication
X-Api-Key: ksd_your_key_here # or query string GET https://www.unified.nestict.com/api/v1/schools?api_key=ksd_your_key_here&q=nairobi
Code examples
cURL — search schools
curl -s -H "X-Api-Key: ksd_YOUR_KEY" \ "https://www.unified.nestict.com/api/v1/schools?q=Alliance&per_page=10&page=1" | jq .
cURL — school by code
curl -s -H "X-Api-Key: ksd_YOUR_KEY" \ "https://www.unified.nestict.com/api/v1/schools/12345678"
JavaScript (fetch)
const API_KEY = 'ksd_YOUR_KEY';
const base = 'https://www.unified.nestict.com/api/v1';
async function searchSchools(q) {
const res = await fetch(`${base}/schools?q=${encodeURIComponent(q)}&per_page=20`, {
headers: { 'X-Api-Key': API_KEY, 'Accept': 'application/json' },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
return res.json();
}
searchSchools('Nairobi').then(console.log).catch(console.error);
PHP
$apiKey = 'ksd_YOUR_KEY';
$base = 'https://www.unified.nestict.com/api/v1';
$url = $base . '/schools?' . http_build_query(['q' => 'Alliance', 'per_page' => 10]);
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'X-Api-Key: ' . $apiKey,
'Accept: application/json',
],
]);
$body = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
$data = json_decode($body, true);
if ($code !== 200) {
throw new RuntimeException('API error: ' . ($data['error'] ?? $code));
}
foreach ($data['data'] ?? [] as $school) {
echo $school['name'] . ' (' . ($school['code'] ?? '') . ")\n";
}
Python
import requests
API_KEY = "ksd_YOUR_KEY"
BASE = "https://www.unified.nestict.com/api/v1"
r = requests.get(
f"{BASE}/schools",
params={"q": "Alliance", "per_page": 10},
headers={"X-Api-Key": API_KEY, "Accept": "application/json"},
timeout=30,
)
r.raise_for_status()
payload = r.json()
for school in payload.get("data", []):
print(school.get("name"), school.get("code"))
Node.js
const API_KEY = process.env.KSD_API_KEY || 'ksd_YOUR_KEY';
const base = 'https://www.unified.nestict.com/api/v1';
const res = await fetch(`${base}/stats`, {
headers: { 'X-Api-Key': API_KEY },
});
const stats = await res.json();
console.log(stats);
More endpoints
# Geography curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/regions" curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/counties?region_id=1" curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/sub-counties?county_id=47" # Postal & banks curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/postal?q=00100" curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/banks?q=Equity" curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/bank-branches?bank_id=1&q=Nairobi" # Files catalogue (metadata) & account curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/files?q=scheme" curl -s -H "X-Api-Key: ksd_YOUR_KEY" "https://www.unified.nestict.com/api/v1/me"
Errors & limits
401— missing or invalid API key429— rate limit exceeded (plan-based)404— resource not found
Monitor usage under Dashboard → Usage. Questions? Support.