Skip to main content

Zones & offline resolution

Each country is partitioned into up to 10,000 zones — an adaptive grid sized by population, so central Lusaka zones are under 1 km wide while empty land is covered by zones 190 km across. Zone numbering follows a space-filling curve: numerically adjacent zones are geographically adjacent.

Zone geometry is frozen at publication and never changes — it is derived from population geometry, not administrative boundaries, so redistricting never breaks an address.

Zone tables

The full zone map of a country is a single JSON file, served with an ETag and stable enough to cache aggressively:

curl https://api.adas.africa/v1/zones/ZM
{
"spec": "adas-zones/0.1",
"country": "ZM",
"zones": [
{ "z": "2992", "bbox": [28.245, -15.436, 28.301, -15.38], "centroid": [28.273, -15.408] }
]
}
CountryZonesSize (gzip)
UG9,154~110 KB
ZM5,059~65 KB
NG5,536~70 KB

The offline pattern

Ship the zone table inside your app. Then, with zero connectivity:

  1. Validate any code's check digit locally.
  2. Look up its zone → bbox and centroid, good enough to route a courier to the right neighbourhood.
  3. Sync the exact pin from GET /v1/addresses/{code} when signal returns.

This is how the ADAS mobile apps work, and the pattern is open to yours.

Draft tables

Current zone tables are drafts ("frozen": false) — zone numbers may still change before each country's launch freeze. Don't print codes until the country you operate in is frozen.