● API Reference v1.0

Cape Town Open Data.
Ready for APIs and AI.

Clean, structured endpoints built on City of Cape Town municipal data. Designed for dashboards, AI assistants, civic tools, and MCP-compatible workflows.

8
Endpoints
100+
Suburbs
2.5M+
Records
MCP
AI Ready
Authentication

API Key

All requests require an API key in the x-api-key header. Contact GoLook to obtain your key and usage plan.

Header
x-api-key: your-api-key-here

No key yet? Contact GoLook →

MCP Protocol

JSON-RPC 2.0 over HTTP

GoLook uses the Model Context Protocol (MCP) — a JSON-RPC 2.0 standard designed for AI tool calling. All requests are POST to a single base URL.

Base URL https://ko7resv8v7.execute-api.us-east-1.amazonaws.com/
Request Structure
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_latest_dam_levels",
    "arguments": {}
  }
}
Endpoints
MCP
get_latest_dam_levels
Latest Cape Town dam levels — % capacity, storage (ML), and status for all 13 dams.
Parameters
Example
Response
ParameterTypeRequiredDescription
dam_name string optional Filter to one dam, e.g. Theewaterskloof, Wemmershoek
JavaScript
const res = await fetch(MCP_URL, {
  method: "POST",
  headers: { "Content-Type": "application/json", "x-api-key": API_KEY },
  body: JSON.stringify({
    jsonrpc: "2.0", id: 1, method: "tools/call",
    params: { name: "get_latest_dam_levels", arguments: {} }
  })
});
JSON — Live data 2026-01-29
{
  "as_of_date": "2026-01-29",
  "summary": "13 records: 1 healthy, 8 watch, 4 low",
  "dams": [{
    "dam_name": "Theewaterskloof",
    "current_level_pct": 56.52,
    "last_year_level_pct": 81.33,
    "storage_ml": 271411.0,
    "status": "watch"
  }]
}
MCP
get_rainfall
Monthly rainfall totals (mm) per gauge station from 2000 to present. 20 stations across the Western Cape.
Parameters
Stations
Example
Response
ParameterTypeRequiredDescription
station_namestringrequiredExact station name, e.g. Wemmershoek, Constantia Nek
period_fromstringoptionalStart period YYYY-MM. Defaults to 24 months ago.
period_tostringoptionalEnd period YYYY-MM. Defaults to current month.
limitintegeroptionalMax records. Default 24, max 313.

20 active gauge stations:

WemmershoekSteenbras VoelvleiTheewaterskloof WoodheadDe Villiers NewlandsWynberg Constantia NekPlattekloof Blackheath UpperBlackheath Lower Glen GarryTygerberg FaureBrooklands AtlantisMolteno Kloof NekBerg River
JavaScript
const res = await fetch(MCP_URL, {
  method: "POST",
  headers: { "x-api-key": API_KEY },
  body: JSON.stringify({
    jsonrpc: "2.0", id: 1, method: "tools/call",
    params: {
      name: "get_rainfall",
      arguments: { station_name: "Theewaterskloof", period_from: "2023-01" }
    }
  })
});
JSON — Live data
{
  "station_name": "Theewaterskloof",
  "count": 2,
  "total_mm": 481.6,
  "avg_monthly_mm": 240.8,
  "records": [
    { "Period": "2025-12", "Rainfall-mm": "465.45" },
    { "Period": "2026-01", "Rainfall-mm": "16.1" }
  ]
}
MCP
get_water_consumption
Median monthly residential water consumption (kl/month) by Cape Town suburb.
Parameters
Response
ParameterTypeRequiredDescription
suburbstringrequiredSuburb name, case-insensitive. e.g. Constantia, Khayelitsha
period_fromstringoptionalStart period YYYY-MM
period_tostringoptionalEnd period YYYY-MM
limitintegeroptionalMax records. Default 50, max 200.
JSON — Constantia live data
{
  "found": true,
  "suburb": "CONSTANTIA",
  "count": 1,
  "avg_consumption_kl_month": 6.0,
  "records": [{
    "Suburb": "CONSTANTIA",
    "Period": "2018-04",
    "Consumption-kl-month": "6"
  }]
}
MCP
get_valuation_by_suburb
City of Cape Town general valuation roll — GV2012 through GV2022 median residential property values per suburb.
Parameters
Response
ParameterTypeRequiredDescription
suburbstringrequiredSuburb name, e.g. Sea Point, Constantia, Khayelitsha
JSON — Sea Point live data
{
  "found": true,
  "suburb": "SEA POINT",
  "num_residential_properties": 727,
  "median_land_extent_m2": 309,
  "valuations": {
    "gv2012": "R 3,485,000",
    "gv2015": "R 4,300,000",
    "gv2018": "R 7,400,000",
    "gv2022": "R 6,500,000"
  }
}
MCP
get_valuations_by_range
Find all suburbs within a property valuation range for a given GV year. Ideal for affordability and market segmentation.
Parameters
ParameterTypeRequiredDescription
gv_yearstringrequiredOne of 2012, 2015, 2018, 2022
min_valueintegeroptionalMinimum valuation in rands, e.g. 500000
max_valueintegeroptionalMaximum valuation in rands, e.g. 2000000
limitintegeroptionalMax results. Default 50, max 200.
MCP
get_healthcare_facilities
Cape Town clinics, CDCs, district and private hospitals with lat/lon coordinates for proximity analysis.
Parameters
ParameterTypeRequiredDescription
facility_classstringoptionale.g. Clinic, District Hospital, Community Day Centre
facility_typestringoptionalCITY OF CAPE TOWN, PAWC, STATE, PRIVATE
namestringoptionalPartial name match, e.g. Mediclinic, Khayelitsha
limitintegeroptionalMax results. Default 100, max 500.
MCP
get_schools
Western Cape schools dataset with optional filters by name, district, EMIS, and school type.
Parameters
ParameterTypeRequiredDescription
namestringoptionalPartial school name match
districtstringoptionale.g. METRO CENTRAL, METRO EAST
school_typestringoptionale.g. Primary School, High School
limitintegeroptionalMax results to return
MCP
get_service_requests
Cape Town municipal service request complaints aggregated by suburb, complaint type, and month. Covers 2.5 million records including electricity outages, water supply issues, sewage blockages, and more.
Parameters
Example
Response
ParameterTypeRequiredDescription
suburb string required Suburb name in UPPERCASE, e.g. HOUT BAY, KHAYELITSHA, SEA POINT
start string required Start date in YYYY-MM-DD format, e.g. 2024-01-01
end string required End date in YYYY-MM-DD format, e.g. 2024-12-31

⚡ Note: Large date ranges may take 2–5 seconds to respond. A 30-second timeout is applied.

JavaScript
const res = await fetch(MCP_URL, {
  method: "POST",
  headers: { "Content-Type": "application/json", "x-api-key": API_KEY },
  body: JSON.stringify({
    jsonrpc: "2.0", id: 1, method: "tools/call",
    params: {
      name: "get_service_requests",
      arguments: {
        suburb: "PHILIPPI",
        start: "2024-01-01",
        end: "2024-12-31"
      }
    }
  })
});
JSON — Philippi 2024 live data
{
  "found": true,
  "suburb": "PHILIPPI",
  "start": "2024-01-01",
  "end": "2024-12-31",
  "count": 48,
  "records": [
    {
      "suburb": "PHILIPPI",
      "c3_complaint_type": "Electricity",
      "month": "2024-03",
      "complaint_count": 142
    },
    {
      "suburb": "PHILIPPI",
      "c3_complaint_type": "Water",
      "month": "2024-03",
      "complaint_count": 87
    }
  ]
}