Developers

Build on NESTICT DMS PORTAL data with our REST API — schools, geography, postal, banks, and file catalogue metadata.

Quick start

  1. Create an account and choose a plan that includes API access.
  2. Open Dashboard → API keys and create a key (ksd_…).
  3. Send X-Api-Key (or ?api_key=) on every request.
  4. Base URL: https://www.unified.nestict.com/api/v1
Full API reference API overview

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 key
  • 429 — rate limit exceeded (plan-based)
  • 404 — resource not found

Monitor usage under Dashboard → Usage. Questions? Support.