Nominatim 5.3 (Belgium + Tanzania) + Golang API gateway with SQLite API key authentication, rate limiting, and web testing UI.
# Start everything
bash scripts/start.sh
# Or manually:
cd nominatim && docker compose up -d
cd ../api-gateway && ./api-gatewayOpen http://localhost:9000 in your browser for an interactive testing interface with:
- Click-to-reverse geocode on the map
- Search with all Nominatim parameters
- Visual results display
All public endpoints require an API key via ?key= parameter or X-API-Key header.
GET /reverse?key=<key>&lat=<lat>&lon=<lon>
Nominatim parameters (all supported):
lat(required),lon(required)zoom(1-18, default: 18)format(json, jsonv2, geojson, geocodejson, xml)accept-language(comma-separated, e.g.en,fr)addressdetails(0/1)namedetails(0/1)extratags(0/1)polygon_geojson(0/1)polygon_kml(0/1)polygon_svg(0/1)polygon_text(0/1)
GET /search?key=<key>&q=<query>
Nominatim parameters (all supported):
q(required) - search querylimit(1-50, default: 10)exclude_place_ids- comma-separated OSM IDs to excludefeaturetype- country, state, city, settlement, street, etc.format(json, jsonv2, geojson, geocodejson, xml)accept-languageaddressdetails,namedetails,extratagspolygon_geojson,polygon_kml,polygon_svg,polygon_textviewbox- bounding box to restrict resultsbounded(0/1) - restrict to viewboxcountrycodes- comma-separated country codes (e.g.be,tz)dedupe(0/1) - deduplicate resultsdebug(0/1)
GET /lookup?key=<key>&osm_ids=<ids>
osm_ids- comma-separated OSM IDs (e.g.R12345,W67890)
POST /admin/keys?admin_key=<key> - Create API key
GET /admin/keys?admin_key=<key> - List keys
PUT /admin/keys/toggle?id=<id>&admin_key=<key> - Enable/disable
DELETE /admin/keys?id=<id>&admin_key=<key> - Delete
bash tests/test_api.shrequire_once 'php-integration/nominatim.php';
// Uses $gsValues['GEOCODING_API_KEY'] from your config
// Returns same format as original gc/nominatim.phpEdit api-gateway/.env:
NOMINATIM_URL=http://nominatim:8080 # Docker: use container name
SERVER_PORT=9000 # Local: use localhost
SQLITE_PATH=/app/api_keys.db # Docker path
RATE_LIMIT_RPM=1000 # Per API key
ADMIN_API_KEY=<secret> # For admin endpoints# API gateway
kill $(cat /tmp/geocoding-api-gateway.pid)
# Nominatim
cd nominatim && docker compose downFull parameter documentation: