Download OpenAPI specification:Download
Local-first geocoding, routing, and POI lookup. All endpoints aggregate one or more upstream OSM-derived services (Photon, Placeholder, libpostal, Valhalla, Overpass).
Unified entrypoint that auto-routes to forward or reverse:
?q=… (with optional lat,lon for proximity bias) → forward search.?lat=&lon= only → reverse geocode.Internally calls the same orchestrators as /api/v1/search and /api/v1/reverse.
| q | string Example: q=Marienplatz |
| lat | number <double> Example: lat=48.1374 |
| lon | number <double> Example: lon=11.5755 |
| limit | integer [ 1 .. 25 ] Default: 8 |
| lang | string |
{- "data": {
- "id": "node:240109189",
- "name": "Berlin",
- "label": "Berlin, Germany",
- "type": "city",
- "coords": {
- "lat": 52.52,
- "lon": 13.405
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "string",
- "city": "Berlin",
- "postcode": "string"
}
}, - "meta": {
- "timestamp": "2019-08-24T14:15:22Z",
- "upstream": "ok",
- "count": 5
}
}Reverse-geocode many coordinates in one round trip.
id so clients can correlate.required | Array of objects <= 500 items |
| lang | string or null |
{- "coords": [
- {
- "id": "p_42",
- "lat": 52.5163,
- "lon": 13.3777
}
], - "lang": "de"
}{- "data": [
- {
- "id": "string",
- "coord": {
- "lat": 52.52,
- "lon": 13.405
}, - "here": {
- "id": "node:240109189",
- "name": "Berlin",
- "label": "Berlin, Germany",
- "type": "city",
- "coords": {
- "lat": 52.52,
- "lon": 13.405
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "string",
- "city": "Berlin",
- "postcode": "string"
}
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "string",
- "city": "Berlin",
- "postcode": "string"
}, - "error": "string"
}
], - "meta": {
- "timestamp": "2019-08-24T14:15:22Z",
- "upstream": "ok",
- "count": 5,
- "cache_hits": 184,
- "cache_misses": 16,
- "upstream_errors": 0,
- "grid_precision": 4,
- "max_coords": 500
}
}Sequential pipeline:
| lat required | number <double> Example: lat=52.5163 |
| lon required | number <double> Example: lon=13.3777 |
| lang | string Example: lang=de |
{- "data": {
- "here": {
- "id": "node:240109189",
- "name": "Berlin",
- "label": "Berlin, Germany",
- "type": "city",
- "coords": {
- "lat": 52.52,
- "lon": 13.405
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "string",
- "city": "Berlin",
- "postcode": "string"
}
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "string",
- "city": "Berlin",
- "postcode": "string"
}
}, - "meta": {
- "timestamp": "2019-08-24T14:15:22Z",
- "upstream": "ok",
- "count": 5
}
}Sequential pipeline:
Returns gracefully when Photon is down: data: [], meta.upstream: "unavailable".
| q required | string Example: q=Marienplatz |
| limit | integer [ 1 .. 25 ] Default: 8 |
| lang | string Example: lang=de |
| lat | number <double> Optional proximity bias |
| lon | number <double> |
{- "data": [
- {
- "id": "node:240109189",
- "name": "Berlin",
- "label": "Berlin, Germany",
- "type": "city",
- "coords": {
- "lat": 52.52,
- "lon": 13.405
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "string",
- "city": "Berlin",
- "postcode": "string"
}
}
], - "meta": {
- "timestamp": "2019-08-24T14:15:22Z",
- "upstream": "ok",
- "count": 5
}
}Single-source endpoint — Valhalla returns a turn-by-turn route, summary, and (optional) elevation profile.
| from required | string^-?\d+(\.\d+)?,-?\d+(\.\d+)?$ Example: from=52.5163,13.3777 lat,lon |
| to required | string^-?\d+(\.\d+)?,-?\d+(\.\d+)?$ Example: to=48.1374,11.5755 lat,lon |
| mode | string Default: "auto" Enum: "auto" "bicycle" "pedestrian" |
{- "data": {
- "summary": { },
- "legs": [
- { }
], - "shape_format": "valhalla_encoded_polyline6"
}, - "meta": {
- "timestamp": "2019-08-24T14:15:22Z",
- "upstream": "ok",
- "count": 5
}
}Combines ReverseOrchestrator (Photon reverse + Placeholder admin enrichment) with an
Overpass radius query so a single call answers “what is at and around this point”.
| lat required | number <double> Example: lat=52.5163 |
| lon required | number <double> Example: lon=13.3777 |
| radius | integer [ 10 .. 2000 ] Default: 200 |
| lang | string |
{- "data": {
- "here": { },
- "nearby": [
- { }
]
}, - "meta": {
- "timestamp": "2019-08-24T14:15:22Z",
- "upstream": "ok",
- "count": 5
}
}