Zimbabwe places,
built from real trips.
Point your app’s location search at the same dataset that moves TapAndGo riders every day. Search, reverse-geocode, or mirror it whole — REST in, JSON or GeoJSON out.
curl -H "X-API-Key: $TAPANDGO_KEY" \
"https://api.tapngo.online/geo/v1/search?q=highlands"Every response carries an attribution field. Displaying it is a condition of the licence.
Not a copy of someone
else’s map
This is operational data. It grows every time a driver completes a trip, and it knows the places Zimbabweans actually name.
Confirmed by real trips
A place enters the dataset when a rider is actually driven there. Every record carries a tripCount — ask for places at least five rides have confirmed and you get a set no scraped POI dump can match.
The names people actually use
Where formal street addressing is thin, riders search for the shops, the turn-off, the clinic. Those are the strings our drivers and passengers agreed on in the field — not a survey label nobody says out loud.
GeoJSON out of the box
Add ?format=geojson to any endpoint for an RFC 7946 FeatureCollection. It drops straight into Mapbox, MapLibre, Leaflet, QGIS or PostGIS — no adapter, no field mapping.
Seven routes. That’s
the whole surface.
Shaped like every geocoder you’ve integrated before, so it slots in behind your existing interface.
GET /geo/v1/search
Forward geocode and autocomplete.
Prefix, substring and typo-tolerant matching. Pass lat and lng to bias ranking toward your user — it never filters results away.
GET /geo/v1/reverse
Coordinate to the nearest known place.
Returns found: false when nothing sits within your radius, rather than a distant guess. A confidently wrong label is worse for a rider than no label.
GET /geo/v1/nearby
Everything within a radius, nearest first.
Each result carries distanceMeters. Useful for pickup suggestions the moment a passenger opens your app.
GET /geo/v1/export
Mirror the dataset, then keep it in sync.
Keyset-paginated. Follow nextCursor until it comes back null, store the last cursor, and pass it back next time to receive only what changed.
Plus GET /geo/v1/manifest for coverage, size and freshness before you integrate, GET /geo/v1/places/:id to resolve a single stored id, and GET /geo/v1 itself — the one route that needs no key, so you can read the contract before you ask for one.
One header, one call
Authenticate with X-API-Key. Everything else is query params.
curl -H "X-API-Key: $TAPANDGO_KEY" \
"https://api.tapngo.online/geo/v1/search?q=highlands&lat=-17.82&lng=31.05"Mirroring? Honour the retractions.
Export records flagged retired: true have been withdrawn by us — a bad geocode, a duplicate, or abuse. Delete them from your copy. They appear only in /export; the search routes already hide them.
What you can count on
Zimbabwe, deepest where we drive
Coverage follows our operating cities and thickens with every trip. Call /manifest for a live coverage grid and record count before you commit to it. Coordinates outside Zimbabwe are rejected with a clear error — usually a swapped lat/lng.
Ours to license, cleanly
We only publish records we generated ourselves — real trip endpoints and entries our team curated. Nothing here is redistributed from another mapping provider, so what we license to you is genuinely ours to license.
Attribution. Show “Place data © TapAndGo (tapandgo.co.zw)” wherever these results appear. Keys are rate-limited per minute and scoped to the geo_read permission; full terms ship with your key.
Build on our map
Tell us what you’re building and we’ll issue a key. Ride hailing, delivery, logistics, research — all welcome.
