Global Search
Search across all KenyaAPI resources in a single request. Returns grouped results from counties, constituencies, holidays, institutions, ministries, and exchange rates.
Type at least 2 characters to search
KenyaAPI Documentation
Free, open REST API for Kenyan public data. No API key required.
Base URL
All endpoints below are relative to this base URL.
https://kenya-api.netlify.app/api/v1
Authentication
No authentication required. All endpoints are publicly accessible.
Response Format
All successful responses use a consistent JSON shape.
{ "success": true, "count": 47, "data": [ ... ] }
{ "success": false, "error": "County with ID 99 not found", "statusCode": 404 }
Error Codes
Common HTTP response codes and their typical causes.
| Code | Meaning | Common Cause | Example |
|---|---|---|---|
| 200 | OK | Successful request | GET /counties |
| 400 | Bad Request | Invalid query or missing path param | GET /holidays?year=abc |
| 404 | Not Found | Resource ID does not exist | GET /counties/99 |
| 429 | Too Many Requests | Rate limit exceeded | 100 requests per minute |
| 500 | Server Error | Unexpected service failure | Internal API error |
Search
Global search endpoint. Query across all six resources simultaneously or narrow by type.
/search
Search across all KenyaAPI resources in a single request — counties, constituencies, holidays, institutions, ministries, and exchange rates. Use ?type= to narrow to a single resource.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| q | string | query | yes | Search term (min 2 chars) |
| type | string | query | no | Narrow to one resource: counties, constituencies, holidays, institutions, ministries, exchange_rates |
curl -X GET "https://kenya-api.netlify.app/api/v1/search?q=nairobi" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/search?q=nairobi", {
method: "GET",
headers: { "Accept": "application/json" }
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/search?q=nairobi"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$url = "https://kenya-api.netlify.app/api/v1/search?q=nairobi";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json"]);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/search?q=nairobi"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/search?q=nairobi")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
puts JSON.parse(response.body)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/search?q=nairobi"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "query": "nairobi", "type": "all", "total_results": 24, "results": { "counties": { "count": 1, "endpoint": "/api/v1/counties", "data": [ { "id": 47, "name": "Nairobi" } ] }, "constituencies": { "count": 17, "endpoint": "/api/v1/constituencies", "data": [ "..." ] } } }
{ "success": true, "query": "nairobi", "type": "all", "total_results": 24, "results": { ... } }
Counties
Retrieve county-level data for all 47 Kenyan counties.
upload.wikimedia.org) under Creative Commons licences. They are referenced by URL — no images are stored in this API./counties
Returns the full list of counties. Supports optional filtering and sorting.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| region | string | query | no | Filter counties by region, e.g. Coast |
| sort | string | query | no | Sort by area or population: area_asc, area_desc, population_asc, population_desc |
| governor_party | string | query | no | Filter by governor's party, e.g. UDA, ODM, Wiper, Independent |
| q | string | query | no | Full-text search across county name and description, e.g. q=coast or q=lake |
curl -X GET "https://kenya-api.netlify.app/api/v1/counties" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/counties", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/counties"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/counties";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/counties"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/counties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/counties"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 47, "data": [ { "id": 1, "code": "001", "name": "Mombasa", "headquarters": "Mombasa City", "region": "Coast", "area_km2": 212.5, "population": 1208333, "governor": "Abdullswamad Nassir", "governor_party": "ODM", "governor_since": 2022, "flag_url": "https://upload.wikimedia.org/wikipedia/commons/a/a6/Flag_of_Mombasa_County.svg", "description": "A coastal county along the Indian Ocean in southeastern Kenya, known for tourism, luxurious beach hotels, and the historic Mombasa Old Town." } ] }
{ "success": true, "count": 47, "data": [ { "id": 1, "name": "Mombasa", "governor": "Abdullswamad Nassir", "flag_url": "https://upload.wikimedia.org/...", "description": "A coastal county..." } ] }
/counties/:id
Returns data for a single county by ID. Includes all fields from the county record — area, region, population, and governor details.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | path | yes | County ID from 1 to 47 |
curl -X GET "https://kenya-api.netlify.app/api/v1/counties/47" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/counties/47", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/counties/47"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/counties/47";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/counties/47"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/counties/47")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/counties/47"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": { "id": 47, "code": "047", "name": "Nairobi", "headquarters": "Nairobi City", "region": "Nairobi", "area_km2": 694.9, "population": 4397073, "governor": "Johnson Sakaja", "governor_party": "UDA", "governor_since": 2022, "flag_url": "https://upload.wikimedia.org/wikipedia/commons/5/5e/Flag_of_Nairobi_County.svg", "description": "Kenya's capital and largest city, Nairobi is a major global metropolis, the economic hub of East Africa, home to the United Nations Environment Programme (UNEP), Nairobi National Park, and a fast-growing tech startup ecosystem." } }
{ "success": true, "data": { "id": 47, "name": "Nairobi", "governor": "Johnson Sakaja", "governor_party": "UDA", "flag_url": "https://upload.wikimedia.org/wikipedia/commons/5/5e/Flag_of_Nairobi_County.svg", "description": "Kenya's capital and largest city..." } }
/counties/governors
Returns a lightweight directory of all 47 county governors, sorted alphabetically by county name. Each record includes the governor's name, party, and year of election alongside the county's code and headquarters. Useful for building a governors index, party breakdown charts, or filtering counties by political affiliation.
curl -X GET "https://kenya-api.netlify.app/api/v1/counties/governors" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/counties/governors", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/counties/governors"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/counties/governors";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/counties/governors"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/counties/governors")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/counties/governors"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 47, "data": [ { "id": 30, "code": "030", "name": "Baringo", "headquarters": "Kabarnet", "governor": "Benjamin Cheboi", "governor_party": "UDA", "governor_since": 2022, "flag_url": "https://upload.wikimedia.org/wikipedia/commons/6/6c/Flag_of_Baringo_County.svg" } ] }
{ "success": true, "count": 47, "data": [ { "id": 47, "name": "Nairobi", "governor": "Johnson Sakaja", "flag_url": "https://upload.wikimedia.org/..." } ] }
/counties/:id/constituencies
Returns constituencies within a specific county.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | path | yes | County ID from 1 to 47 |
curl -X GET "https://kenya-api.netlify.app/api/v1/counties/47/constituencies" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/counties/47/constituencies", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/counties/47/constituencies"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/counties/47/constituencies";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/counties/47/constituencies"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/counties/47/constituencies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/counties/47/constituencies"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": [ { "id": 1 , "name": "Changamwe" } ] }
{ "success": true, "data": [ { "id": 1 , "name": "Changamwe" } ] }
Constituencies
Explore constituency-level data across Kenya.
/constituencies
Returns all 290 constituencies.
curl -X GET "https://kenya-api.netlify.app/api/v1/constituencies" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/constituencies", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/constituencies"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/constituencies";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/constituencies"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/constituencies")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/constituencies"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 290, "data": [ ... ] }
{ "success": true, "count": 290, "data": [ ... ] }
/constituencies/:id
Returns a single constituency.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | path | yes | Constituency ID |
curl -X GET "https://kenya-api.netlify.app/api/v1/constituencies/1" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/constituencies/1", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/constituencies/1"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/constituencies/1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/constituencies/1"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/constituencies/1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/constituencies/1"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": { "id": 1, "name": "Changamwe" } }
{ "success": true, "data": { "id": 1, "name": "Changamwe" } }
Public Holidays
Access national holiday information for any supported year.
/holidays
Returns all public holidays. Optionally filter by year.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| year | integer | query | no | Year to filter holidays by, e.g. 2025 |
curl -X GET "https://kenya-api.netlify.app/api/v1/holidays?year=2025" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/holidays?year=2025", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/holidays?year=2025"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/holidays?year=2025";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/holidays?year=2025"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/holidays?year=2025")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/holidays?year=2025"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 8, "data": [ ... ] }
{ "success": true, "count": 9, "data": [ ... ] }
/holidays/:id
Returns details for a single holiday by ID.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | path | yes | Holiday ID |
curl -X GET "https://kenya-api.netlify.app/api/v1/holidays/1" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/holidays/1", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/holidays/1"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/holidays/1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/holidays/1"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/holidays/1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/holidays/1"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": { "id": 1, "name": "New Year's Day" } }
{ "success": true, "data": { "id": 1, "name": "New Year's Day" } }
Population
Retrieve national population statistics and county breakdowns.
/population
Returns a summary of national population totals.
curl -X GET "https://kenya-api.netlify.app/api/v1/population" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/population", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/population"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/population";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/population"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/population")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/population"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": { "total_population": 53771296, "most_populous_county": { "name": "Nairobi", "population": 4397073 }, "census_year": 2019, "source": "Kenya National Bureau of Statistics" } }
{ "success": true, "data": { "population": 53771296, "female": 27358296 } }
/population/counties
Returns population breakdown for each county.
curl -X GET "https://kenya-api.netlify.app/api/v1/population/counties" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/population/counties", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/population/counties"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/population/counties";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/population/counties"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/population/counties")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/population/counties"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": [ ... ] }
{ "success": true, "data": [ ... ] }
Exchange Rates
Returns live KES exchange rates for 25 currencies, sourced from open.er-api.com mid-market rates. Rates are refreshed hourly and cached server-side to ensure fast response times. Includes buy, mean, and sell rates with a small illustrative spread.
/exchange-rates
Returns live KES exchange rates for 25 currencies. Rates are fetched from open.er-api.com and cached server-side for 1 hour. Supports ?q= to filter by currency code or name.
curl -X GET "https://kenya-api.netlify.app/api/v1/exchange-rates" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/exchange-rates", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/exchange-rates"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/exchange-rates";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/exchange-rates"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/exchange-rates")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/exchange-rates"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "base_currency": "KES", "last_updated": "Wed, 17 Jun 2026 00:02:31 +0000", "next_update": "Thu, 18 Jun 2026 00:17:01 +0000", "source": "open.er-api.com (live mid-market rates)", "count": 25, "data": [ { "id": 1, "currency": "USD", "currency_name": "US Dollar", "buy": 129.04, "mean": 129.43, "sell": 129.82 }, "..." ] }
// Click "Try It" to fetch live data from the API/exchange-rates/:currency
Returns the live KES rate for a specific currency. Case-insensitive.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| currency | string | path | yes | ISO 4217 code (e.g. USD, EUR, GBP). Case-insensitive. Available codes: USD, GBP, EUR, JPY, ZAR, AED, CAD, AUD, CHF, CNY, INR, SEK, NOK, DKK, SAR, QAR, HKD, SGD, UGX, TZS, RWF, ETB, NGN, ZMW, MUR |
curl -X GET "https://kenya-api.netlify.app/api/v1/exchange-rates/USD" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/exchange-rates/USD", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/exchange-rates/USD"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/exchange-rates/USD";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/exchange-rates/USD"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/exchange-rates/USD")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/exchange-rates/USD"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "base_currency": "KES", "last_updated": "Wed, 17 Jun 2026 00:02:31 +0000", "source": "open.er-api.com (live mid-market rates)", "data": { "id": 1, "currency": "USD", "currency_name": "US Dollar", "buy": 129.04, "mean": 129.43, "sell": 129.82 } }
// Click "Try It" to fetch live data from the APIEducational Institutions
Kenya's educational institutions covering 53 universities (41 public + 12 private chartered) accredited by CUE and 613 TVET institutions accredited by TVETA, including National Polytechnics, Technical Training Institutes, and Vocational Training Centers across all 47 counties.
/institutions
Returns institutions with optional pagination or filters.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| page | integer | query | no | Page number for pagination |
| limit | integer | query | no | Maximum items per page |
| type | string | query | no | Institution type (University, TVET, Secondary School, Primary School, College) |
| category | string | query | no | Institution category (Public, Private, Faith-Based, Technical) |
| initials | string | query | no | Filter by university initials e.g. UON, JKUAT, KU |
curl -X GET "https://kenya-api.netlify.app/api/v1/institutions" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/institutions", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/institutions"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/institutions";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/institutions"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/institutions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/institutions"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 10, "page": 1, "data": [ ... ] }
/institutions/universities
Returns all universities in Kenya — both public (41) and private (12) — accredited by the Commission for University Education (CUE). Sorted alphabetically. Filter by ?category=Public or ?category=Private.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| category | string | query | no | Public or Private |
| county_id | integer | query | no | Filter by county ID e.g. 47 for Nairobi |
curl -X GET "https://kenya-api.netlify.app/api/v1/institutions/universities" \
-H "Accept: application/json"
# Public universities only
curl "https://kenya-api.netlify.app/api/v1/institutions/universities?category=Public"
# Private universities only
curl "https://kenya-api.netlify.app/api/v1/institutions/universities?category=Private"
const response = await fetch("https://kenya-api.netlify.app/api/v1/institutions/universities", {
method: "GET",
headers: { "Accept": "application/json" }
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/institutions/universities"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$url = "https://kenya-api.netlify.app/api/v1/institutions/universities";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json"]);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/institutions/universities"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/institutions/universities")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
puts JSON.parse(response.body)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/institutions/universities"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 53, "public_count": 41, "private_count": 12, "accreditor": "Commission for University Education (CUE)", "data": [ { "id": 689, "name": "Strathmore University", "initials": "SU", "type": "University", "category": "Private", "county_id": 47, "county_name": "Nairobi", "address": "Ole Sangale Road, Madaraka Estate, Nairobi", "phone": "+254 703 034 000", "email": "admissions@strathmore.edu", "website": "https://www.strathmore.edu", "description": "A Nairobi-based institution emphasising high standards of teaching, research, and student welfare...", "accredited_by": "Commission for University Education (CUE)" }, "..." ] }
// Click "Try It" to fetch live data from the API/institutions/tvets
Returns all TVET institutions accredited by TVETA — including National Polytechnics, Technical Training Institutes, and Vocational Training Centers. Supports ?subtype=, ?category=, and ?county_id= filters.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| subtype | string | query | no | polytechnic = National Polytechnics only · tvc = TVCs and TTIs only |
| category | string | query | no | Public or Private |
| county_id | integer | query | no | Filter by county ID e.g. 47 for Nairobi |
curl -X GET "https://kenya-api.netlify.app/api/v1/institutions/tvets" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/institutions/tvets", {
method: "GET",
headers: { "Accept": "application/json" }
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/institutions/tvets"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$url = "https://kenya-api.netlify.app/api/v1/institutions/tvets";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json"]);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/institutions/tvets"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/institutions/tvets")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
puts JSON.parse(response.body)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/institutions/tvets"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 613, "accreditor": "Technical and Vocational Education and Training Authority (TVETA)", "data": [ { "id": 109, "name": "ABC Kivi VTC", "type": "Technical and Vocational College (TVET)", "category": "Public", "county_id": 16, "county_name": "Machakos", "accredited_by": "Technical and Vocational Education and Training Authority (TVETA)" }, "..." ] }
// Click "Try It" to fetch live data from the API/institutions/:id
Returns a single institution by ID.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | path | yes | Institution ID |
curl -X GET "https://kenya-api.netlify.app/api/v1/institutions/1" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/institutions/1", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/institutions/1"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/institutions/1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/institutions/1"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/institutions/1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/institutions/1"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": { "id": 1, "name": "Technical University of Mombasa" } }
/institutions/county/:county_id
Returns institutions in a given county.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| county_id | integer | path | yes | County ID from 1 to 47 |
curl -X GET "https://kenya-api.netlify.app/api/v1/institutions/county/47" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/institutions/county/47", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/institutions/county/47"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/institutions/county/47";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/institutions/county/47"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/institutions/county/47")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/institutions/county/47"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 4, "data": [ ... ] }
/institutions/type/:type
Returns all institutions matching the requested type.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| type | string | path | yes | Valid institution type, e.g. University |
curl -X GET "https://kenya-api.netlify.app/api/v1/institutions/type/University" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/institutions/type/University", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/institutions/type/University"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/institutions/type/University";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/institutions/type/University"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/institutions/type/University")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/institutions/type/University"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
/institutions/search?q=...
Search institutions by name, address, county, or constituency.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| q | string | query | yes | Search term, at least 2 characters |
curl -X GET "https://kenya-api.netlify.app/api/v1/institutions/search?q=nairobi" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/institutions/search?q=nairobi", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/institutions/search?q=nairobi"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/institutions/search?q=nairobi";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/institutions/search?q=nairobi"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/institutions/search?q=nairobi")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/institutions/search?q=nairobi"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Ministries
Kenya's 22 Cabinet Secretaries and their ministries, sourced from the Office of the President. Includes ministry name, cabinet secretary, appointment year, official image, and ministry website.
/ministries
Returns all 22 ministries and their Cabinet Secretaries. Supports ?appointed=2022 or ?appointed=2024 to filter by appointment year.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| appointed | string | query | no | Filter by appointment year, e.g. 2022, 2024 |
curl -X GET "https://kenya-api.netlify.app/api/v1/ministries" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/ministries", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/ministries"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/ministries";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/ministries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/ministries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/ministries"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 22, "source": "Office of the President of Kenya", "data": [ { "id": 1, "ministry": "Foreign and Diaspora Affairs", "cabinet_secretary": "Dr. Musalia Mudavadi E.G.H.", "title": "Prime Cabinet Secretary and Cabinet Secretary", "appointed": "2022", "image_url": "https://www.president.go.ke/wp-content/uploads/Mudavadi.jpg", "ministry_website": "https://www.mfa.go.ke", "source": "https://www.president.go.ke/cabinet/" } ] }
{ "success": true, "count": 22, "source": "Office of the President of Kenya", "data": [ { "id": 1, "ministry": "Foreign and Diaspora Affairs", "cabinet_secretary": "Dr. Musalia Mudavadi E.G.H." }, "..." ] }
/ministries/:id
Returns a single ministry by numeric ID (1–22).
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | path | yes | Ministry ID from 1 to 22 |
curl -X GET "https://kenya-api.netlify.app/api/v1/ministries/1" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/ministries/1", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/ministries/1"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/ministries/1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/ministries/1"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/ministries/1")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/ministries/1"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": { "id": 1, "ministry": "Foreign and Diaspora Affairs", "cabinet_secretary": "Dr. Musalia Mudavadi E.G.H.", "title": "Prime Cabinet Secretary and Cabinet Secretary", "appointed": "2022", "image_url": "https://www.president.go.ke/wp-content/uploads/Mudavadi.jpg", "ministry_website": "https://www.mfa.go.ke", "source": "https://www.president.go.ke/cabinet/" } }
{ "success": true, "data": { "id": 1, "ministry": "Foreign and Diaspora Affairs", "cabinet_secretary": "Dr. Musalia Mudavadi E.G.H.", "appointed": "2022" } }
/ministries/search?q=
Search ministries by ministry name or cabinet secretary name. Minimum 2 characters required.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| q | string | query | yes | Search term (min 2 chars) — searches ministry name and cabinet secretary name |
curl -X GET "https://kenya-api.netlify.app/api/v1/ministries/search?q=health" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/ministries/search?q=health", {
method: "GET",
headers: {
"Accept": "application/json"
}
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/ministries/search?q=health"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
<?php
$url = "https://kenya-api.netlify.app/api/v1/ministries/search?q=health";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
"Accept: application/json"
]);
$response = curl_exec($ch);
curl_close($ch);
$data = json_decode($response, true);
print_r($data);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/ministries/search?q=health"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/ministries/search?q=health")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
data = JSON.parse(response.body)
puts data
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/ministries/search?q=health"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "query": "health", "count": 1, "data": [ { "id": 5, "ministry": "Health", "cabinet_secretary": "Aden Duale E.G.H." } ] }
{ "success": true, "query": "health", "count": 1, "data": [ { "id": 5, "ministry": "Health", "cabinet_secretary": "Aden Duale E.G.H." } ] }
Postal Codes
Kenya postal codes mapped to all 47 counties and their constituencies. Sourced from Posta Kenya and PostZipCode.com.
/postal-codes
Returns postal code data for all 47 counties, including constituency-level codes and the county primary postal code range.
curl -X GET "https://kenya-api.netlify.app/api/v1/postal-codes" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/postal-codes", {
method: "GET",
headers: { "Accept": "application/json" }
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/postal-codes"
response = requests.get(url, headers={"Accept": "application/json"})
print(response.json())
<?php
$ch = curl_init("https://kenya-api.netlify.app/api/v1/postal-codes");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json"]);
print_r(json_decode(curl_exec($ch), true));
curl_close($ch);
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://kenya-api.netlify.app/api/v1/postal-codes", nil)
req.Header.Set("Accept", "application/json")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/postal-codes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
req = Net::HTTP::Get.new(url)
req["Accept"] = "application/json"
puts JSON.parse(http.request(req).body)
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/postal-codes"))
.header("Accept", "application/json")
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
Example response
{ "success": true, "count": 47, "source": "Posta Kenya / PostZipCode.com", "data": [ { "id": 1, "county_id": 1, "county_name": "Mombasa", "postal_code_range": { "from": "80100", "to": "80118" }, "primary_postal_code": "80100", "constituencies": [ "..." ] } ] }
// Click "Try It" to fetch live data from the API/postal-codes/county/:county_id
Returns postal code data for a single county by its numeric ID, including all constituency-level codes.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| county_id | integer | path | yes | County ID (1–47) |
curl -X GET "https://kenya-api.netlify.app/api/v1/postal-codes/county/47" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/postal-codes/county/47");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/postal-codes/county/47")
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/postal-codes/county/47");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/postal-codes/county/47")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
puts JSON.parse(Net::HTTP.get(URI("https://kenya-api.netlify.app/api/v1/postal-codes/county/47")))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/postal-codes/county/47"))
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
Example response (Nairobi)
{ "success": true, "data": { "county_id": 47, "county_name": "Nairobi", "primary_postal_code": "00100", "postal_code_range": { "from": "00100", "to": "00800" }, "constituencies": [ { "name": "Westlands", "postal_code": "00600" }, { "name": "Kamukunji", "postal_code": "00200" }, "..." ] } }
// Click "Try It" to fetch live data from the API/postal-codes/constituency
Looks up postal codes by constituency name. Partial, case-insensitive match. Returns county context and the county-level range.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| name | string | query | yes | Constituency name or partial name (e.g. Westlands) |
curl -X GET "https://kenya-api.netlify.app/api/v1/postal-codes/constituency?name=Westlands" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/postal-codes/constituency?name=Westlands");
const data = await response.json();
console.log(data);
import requests
response = requests.get(
"https://kenya-api.netlify.app/api/v1/postal-codes/constituency",
params={"name": "Westlands"}
)
print(response.json())
<?php
$url = "https://kenya-api.netlify.app/api/v1/postal-codes/constituency?" . http_build_query(["name" => "Westlands"]);
print_r(json_decode(file_get_contents($url), true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/postal-codes/constituency?name=Westlands")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
puts JSON.parse(Net::HTTP.get(URI("https://kenya-api.netlify.app/api/v1/postal-codes/constituency?name=Westlands")))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/postal-codes/constituency?name=Westlands"))
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
Example response
{ "success": true, "count": 1, "data": [ { "county_id": 47, "county_name": "Nairobi", "constituency": "Westlands", "postal_code": "00600", "county_postal_range": { "from": "00100", "to": "00800" } } ] }
// Click "Try It" to fetch live data from the API/postal-codes/search
Search postal codes by county name, constituency name, or code number. Returns typed results (county or constituency) in a single list.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| q | string | query | yes | Search term — county name, constituency name, or code (min 2 chars) |
curl -X GET "https://kenya-api.netlify.app/api/v1/postal-codes/search?q=00100" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/postal-codes/search?q=00100");
const data = await response.json();
console.log(data);
import requests
response = requests.get(
"https://kenya-api.netlify.app/api/v1/postal-codes/search",
params={"q": "00100"}
)
print(response.json())
<?php
$url = "https://kenya-api.netlify.app/api/v1/postal-codes/search?" . http_build_query(["q" => "00100"]);
print_r(json_decode(file_get_contents($url), true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/postal-codes/search?q=00100")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
puts JSON.parse(Net::HTTP.get(URI("https://kenya-api.netlify.app/api/v1/postal-codes/search?q=00100")))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/postal-codes/search?q=00100"))
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
Example response
{ "success": true, "query": "00100", "count": 12, "data": [ { "type": "county", "county_name": "Nairobi", "primary_postal_code": "00100" }, { "type": "constituency", "county_name": "Nairobi", "constituency": "Starehe", "postal_code": "00100" }, "..." ] }
// Click "Try It" to fetch live data from the APIWards
Kenya's 1,263 electoral wards organised by county and sub-county. Data sourced from the IEBC via an open CC0 dataset on GitHub. Covers 45 of 47 counties (Nairobi, Kericho, and Bomet are not in the upstream source).
/wards
All wards with optional filters. Paginated — default 50 per page.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| county_id | integer | query | no | Filter by county ID (1–47) |
| sub_county | string | query | no | Filter by sub-county name (partial match) |
| page | integer | query | no | Page number (default: 1) |
| limit | integer | query | no | Results per page (default: 50) |
curl -X GET "https://kenya-api.netlify.app/api/v1/wards?county_id=1&limit=50" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/wards?county_id=1&limit=50");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/wards", params={"county_id": 1, "limit": 50})
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/wards?county_id=1&limit=50");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/wards?county_id=1&limit=50")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/wards?county_id=1&limit=50")
puts JSON.parse(Net::HTTP.get(url))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/wards?county_id=1&limit=50"))
.header("Accept", "application/json")
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
Example response
{ "success": true, "total": 30, "count": 30, "page": 1, "totalPages": 1, "data": [ { "id": 1, "sub_county_id": 1, "sub_county_name": "Changamwe", "county_id": 1, "county_name": "Mombasa", "ward": "Port Reitz" } ] }
// Click "Try It" to fetch live data from the API/wards/county/:county_id
All wards in a county grouped by sub-county. Ideal for building cascading dropdowns (county → sub-county → ward).
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| county_id | integer | path | yes | County ID (1–47) |
curl -X GET "https://kenya-api.netlify.app/api/v1/wards/county/1" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/wards/county/1");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/wards/county/1")
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/wards/county/1");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/wards/county/1")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/wards/county/1")
puts JSON.parse(Net::HTTP.get(url))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/wards/county/1"))
.header("Accept", "application/json")
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
Example response
{ "success": true, "county_id": 1, "county_name": "Mombasa", "sub_counties": 6, "ward_count": 30, "data": [ { "sub_county_id": 1, "sub_county_name": "Changamwe", "wards": [ "Port Reitz", "Kipevu", "Airport", "Changamwe", "Chaani" ] } ] }
// Click "Try It" to fetch live data from the API/wards/sub-county?name=
Returns all wards for a specific sub-county by name. Partial name matches are supported.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| name | string | query | yes | Sub-county name or partial name (e.g. Changamwe) |
curl -X GET "https://kenya-api.netlify.app/api/v1/wards/sub-county?name=Changamwe" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/wards/sub-county?name=Changamwe");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/wards/sub-county", params={"name": "Changamwe"})
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/wards/sub-county?name=Changamwe");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/wards/sub-county?name=Changamwe")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/wards/sub-county?name=Changamwe")
puts JSON.parse(Net::HTTP.get(url))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/wards/sub-county?name=Changamwe"))
.header("Accept", "application/json")
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
// Click "Try It" to fetch live data from the API/wards/sub-counties/:county_id
Returns only the list of sub-counties in a county — no ward details. Lightweight endpoint for populating dropdowns.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| county_id | integer | path | yes | County ID (1–47) |
curl -X GET "https://kenya-api.netlify.app/api/v1/wards/sub-counties/1" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/wards/sub-counties/1");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/wards/sub-counties/1")
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/wards/sub-counties/1");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/wards/sub-counties/1")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/wards/sub-counties/1")
puts JSON.parse(Net::HTTP.get(url))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/wards/sub-counties/1"))
.header("Accept", "application/json")
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
Example response
{ "success": true, "county_id": 1, "county_name": "Mombasa", "count": 6, "data": [ { "sub_county_id": 1, "sub_county_name": "Changamwe", "county_id": 1, "county_name": "Mombasa" }, { "sub_county_id": 2, "sub_county_name": "Jomvu", "county_id": 1, "county_name": "Mombasa" } ] }
// Click "Try It" to fetch live data from the API/wards/search?q=
Search ward names, sub-county names, or county names. Returns all matching ward records. Minimum 2 characters.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| q | string | query | yes | Search term (min 2 chars) — matches ward, sub-county, or county name |
curl -X GET "https://kenya-api.netlify.app/api/v1/wards/search?q=karen" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/wards/search?q=karen");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/wards/search", params={"q": "karen"})
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/wards/search?q=karen");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/wards/search?q=karen")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/wards/search?q=karen")
puts JSON.parse(Net::HTTP.get(url))
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/wards/search?q=karen"))
.header("Accept", "application/json")
.GET().build();
System.out.println(client.send(request, HttpResponse.BodyHandlers.ofString()).body());
}
}
// Click "Try It" to fetch live data from the APIParks & Reserves
Kenya's 35 national parks, reserves, marine parks, and wildlife sanctuaries managed by Kenya Wildlife Service (KWS). Includes location, size, coordinates, wildlife highlights, and conservation status.
/parks
Returns all parks and reserves with optional filters by type, county, or wildlife features.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| type | string | query | no | National Park, National Reserve, Marine Park & Reserve, Wildlife Sanctuary |
| county_id | integer | query | no | Filter by county ID e.g. 32 for Nakuru |
| big_cats | boolean | query | no | true = parks with lions, leopards, or cheetahs |
| marine | boolean | query | no | true = marine parks only |
| most_visited | boolean | query | no | true = most popular parks |
curl -X GET "https://kenya-api.netlify.app/api/v1/parks" \
-H "Accept: application/json"
# Most visited parks
curl "https://kenya-api.netlify.app/api/v1/parks?most_visited=true"
# Marine parks only
curl "https://kenya-api.netlify.app/api/v1/parks?marine=true"
# Parks with big cats
curl "https://kenya-api.netlify.app/api/v1/parks?big_cats=true"
const response = await fetch("https://kenya-api.netlify.app/api/v1/parks", {
method: "GET",
headers: { "Accept": "application/json" }
});
const data = await response.json();
console.log(data);
import requests
url = "https://kenya-api.netlify.app/api/v1/parks"
headers = {"Accept": "application/json"}
response = requests.get(url, headers=headers)
print(response.json())
<?php
$url = "https://kenya-api.netlify.app/api/v1/parks";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Accept: application/json"]);
$response = curl_exec($ch);
curl_close($ch);
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
url := "https://kenya-api.netlify.app/api/v1/parks"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("Accept", "application/json")
client := &http.Client{}
resp, _ := client.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/parks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Accept"] = "application/json"
response = http.request(request)
puts JSON.parse(response.body)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/parks"))
.header("Accept", "application/json")
.GET()
.build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "count": 35, "managed_by": "Kenya Wildlife Service (KWS)", "data": [ "..." ] }
// Click "Try It" to fetch live data from the API/parks/:id
Returns a single park by its numeric ID.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| id | integer | path | yes | Park ID e.g. 2 for Amboseli |
curl -X GET "https://kenya-api.netlify.app/api/v1/parks/2" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/parks/2");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/parks/2")
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/parks/2");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/parks/2")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/parks/2")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
response = http.request(Net::HTTP::Get.new(url))
puts JSON.parse(response.body)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/parks/2"))
.GET().build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "data": { "id": 2, "name": "Amboseli National Park", "type": "National Park", "county_ids": [34], "counties": ["Kajiado"], "region": "Southern Kenya", "famous_for": "Elephants & Mount Kilimanjaro views", "description": "One of Kenya's most iconic parks...", "size_km2": 392, "managed_by": "Kenya Wildlife Service (KWS)", "big_cats": true, "marine": false, "most_visited": true, "coordinates": { "lat": -2.6527, "lng": 37.2606 } } }
// Click "Try It" to fetch live data from the API/parks/county/:county_id
Returns all parks in a given county. Parks that span multiple counties appear in each relevant county's results.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| county_id | integer | path | yes | County ID e.g. 32 for Nakuru (returns Hell's Gate, Lake Nakuru, Mt Longonot, Lake Elementaita) |
curl -X GET "https://kenya-api.netlify.app/api/v1/parks/county/32" \
-H "Accept: application/json"
const response = await fetch("https://kenya-api.netlify.app/api/v1/parks/county/32");
const data = await response.json();
console.log(data);
import requests
response = requests.get("https://kenya-api.netlify.app/api/v1/parks/county/32")
print(response.json())
<?php
$response = file_get_contents("https://kenya-api.netlify.app/api/v1/parks/county/32");
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get("https://kenya-api.netlify.app/api/v1/parks/county/32")
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/parks/county/32")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
response = http.request(Net::HTTP::Get.new(url))
puts JSON.parse(response.body)
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://kenya-api.netlify.app/api/v1/parks/county/32"))
.GET().build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "county_id": 32, "count": 4, "data": [ "..." ] }
// Click "Try It" to fetch live data from the API/parks/type/:type
Returns all parks of a specific type. URL-encode spaces and ampersands in the type parameter.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| type | string | path | yes | National Park · National Reserve · Marine Park & Reserve · Wildlife Sanctuary |
# All national parks
curl "https://kenya-api.netlify.app/api/v1/parks/type/National%20Park"
# Marine parks and reserves
curl "https://kenya-api.netlify.app/api/v1/parks/type/Marine%20Park%20%26%20Reserve"
const type = encodeURIComponent("National Park");
const response = await fetch(
`https://kenya-api.netlify.app/api/v1/parks/type/${type}`
);
const data = await response.json();
console.log(data);
import requests
from urllib.parse import quote
park_type = quote("National Park")
response = requests.get(
f"https://kenya-api.netlify.app/api/v1/parks/type/{park_type}"
)
print(response.json())
<?php
$type = urlencode("National Park");
$response = file_get_contents(
"https://kenya-api.netlify.app/api/v1/parks/type/{$type}"
);
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
"net/url"
)
func main() {
parkType := url.PathEscape("National Park")
resp, _ := http.Get(
"https://kenya-api.netlify.app/api/v1/parks/type/" + parkType,
)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
require "uri"
type = URI.encode_uri_component("National Park")
url = URI("https://kenya-api.netlify.app/api/v1/parks/type/#{type}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
response = http.request(Net::HTTP::Get.new(url))
puts JSON.parse(response.body)
import java.net.URI;
import java.net.URLEncoder;
import java.net.http.*;
import java.nio.charset.StandardCharsets;
public class Main {
public static void main(String[] args) throws Exception {
String type = URLEncoder.encode("National Park", StandardCharsets.UTF_8)
.replace("+", "%20");
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(
"https://kenya-api.netlify.app/api/v1/parks/type/" + type
))
.GET().build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "type": "National Park", "count": 22, "data": [ "..." ] }
// Click "Try It" to fetch live data from the API/parks/search?q=
Search parks by name, famous_for, description, region, or county. Minimum 2 characters.
| Name | Type | In | Required | Description |
|---|---|---|---|---|
| q | string | query | yes | Search term (min 2 characters) e.g. elephant, coral, rift |
curl "https://kenya-api.netlify.app/api/v1/parks/search?q=elephant"
const response = await fetch(
"https://kenya-api.netlify.app/api/v1/parks/search?q=elephant"
);
const data = await response.json();
console.log(data);
import requests
response = requests.get(
"https://kenya-api.netlify.app/api/v1/parks/search",
params={"q": "elephant"}
)
print(response.json())
<?php
$response = file_get_contents(
"https://kenya-api.netlify.app/api/v1/parks/search?q=elephant"
);
print_r(json_decode($response, true));
?>
package main
import (
"fmt"
"io"
"net/http"
)
func main() {
resp, _ := http.Get(
"https://kenya-api.netlify.app/api/v1/parks/search?q=elephant",
)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
fmt.Println(string(body))
}
require "net/http"
require "json"
url = URI("https://kenya-api.netlify.app/api/v1/parks/search?q=elephant")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
response = http.request(Net::HTTP::Get.new(url))
puts JSON.parse(response.body)
import java.net.URI;
import java.net.http.*;
public class Main {
public static void main(String[] args) throws Exception {
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(
"https://kenya-api.netlify.app/api/v1/parks/search?q=elephant"
))
.GET().build();
HttpResponse<String> response = client.send(
request, HttpResponse.BodyHandlers.ofString()
);
System.out.println(response.body());
}
}
Example response
{ "success": true, "query": "elephant", "count": 10, "data": [ "..." ] }
// Click "Try It" to fetch live data from the API