Download OpenAPI specification:Download
Local-first geocoding, routing, transit, 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": "Brandenburg Gate",
- "label": "Brandenburg Gate, Berlin, Germany",
- "type": "attraction",
- "coords": {
- "lat": 52.5163,
- "lon": 13.3777
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}, - "address": {
- "house_number": "1",
- "street": "Pariser Platz",
- "city": "Berlin",
- "county": "Berlin",
- "state": "Berlin",
- "postcode": "10117",
- "country": "Germany",
- "countrycode": "de"
}, - "match_type": "rooftop",
- "confidence": null
}
], - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "mode": "forward",
- "upstream": "ok",
- "count": 1
}
}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": "trip-point-42",
- "lat": 52.5163,
- "lon": 13.3777
}, - {
- "id": "bad-point",
- "lat": "not-a-number",
- "lon": 13.4
}
], - "lang": "de"
}{- "data": [
- {
- "id": "trip-point-42",
- "coord": {
- "lat": 52.5163,
- "lon": 13.3777
}, - "here": {
- "id": "node:240109189",
- "name": "Brandenburg Gate",
- "label": "Brandenburg Gate, Berlin, Germany",
- "type": "attraction",
- "coords": {
- "lat": 52.5163,
- "lon": 13.3777
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}, - "address": {
- "house_number": "1",
- "street": "Pariser Platz",
- "city": "Berlin",
- "county": "Berlin",
- "state": "Berlin",
- "postcode": "10117",
- "country": "Germany",
- "countrycode": "de"
}, - "match_type": "rooftop",
- "confidence": null
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}
}, - {
- "id": "bad-point",
- "coord": {
- "raw_lat": "not-a-number",
- "raw_lon": 13.4
}, - "error": "lat must be numeric"
}
], - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "count": 2,
- "cache_hits": 1,
- "cache_misses": 1,
- "upstream_errors": 1,
- "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": "Brandenburg Gate",
- "label": "Brandenburg Gate, Berlin, Germany",
- "type": "attraction",
- "coords": {
- "lat": 52.5163,
- "lon": 13.3777
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}, - "address": {
- "house_number": "1",
- "street": "Pariser Platz",
- "city": "Berlin",
- "county": "Berlin",
- "state": "Berlin",
- "postcode": "10117",
- "country": "Germany",
- "countrycode": "de"
}, - "match_type": "rooftop",
- "confidence": null
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}
}, - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "upstream": "ok"
}
}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": "Brandenburg Gate",
- "label": "Brandenburg Gate, Berlin, Germany",
- "type": "attraction",
- "coords": {
- "lat": 52.5163,
- "lon": 13.3777
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}, - "address": {
- "house_number": "1",
- "street": "Pariser Platz",
- "city": "Berlin",
- "county": "Berlin",
- "state": "Berlin",
- "postcode": "10117",
- "country": "Germany",
- "countrycode": "de"
}, - "match_type": "rooftop",
- "confidence": null
}
], - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "upstream": "ok",
- "count": 1
}
}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": {
- "length": 2.4,
- "time": 312
}, - "legs": [
- {
- "shape": "_ajccB_{zpX_pR_pR",
- "summary": {
- "length": 2.4,
- "time": 312
}, - "maneuvers": [
- {
- "type": 1,
- "instruction": "Drive east",
- "length": 2.4,
- "time": 312,
- "begin_shape_index": 0,
- "end_shape_index": 1
}
]
}
], - "shape_format": "valhalla_encoded_polyline6"
}, - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "mode": "auto",
- "options": {
- "avoid_tolls": true,
- "avoid_highways": true,
- "avoid_ferries": false
}
}
}Returns every matched segment and one correlation result per input point. Supply timestamps and accuracy when available. GeoJSON uses a MultiLineString when the trace contains discontinuities. Directions are optional because they require a second Valhalla request.
required | Array of objects >= 2 items |
| mode | string Enum: "auto" "bicycle" "pedestrian" |
| shape_match | string Enum: "map_snap" "walk_or_snap" "edge_walk" |
| format | string Enum: "polyline6" "geojson" |
| include_directions | boolean Default: false Include narrative paths using an additional trace_route request. |
| search_radius | number |
| gps_accuracy | number |
| breakage_distance | number |
{- "shape": [
- {
- "lat": 52.5,
- "lon": 13.4,
- "time": 1714032000,
- "accuracy": 8
}, - {
- "lat": 52.51,
- "lon": 13.41,
- "time": 1714032030,
- "accuracy": 6
}
], - "mode": "auto",
- "shape_match": "map_snap",
- "format": "polyline6",
- "include_directions": false,
- "search_radius": 35,
- "gps_accuracy": 5,
- "breakage_distance": 2000
}{- "data": {
- "summary": {
- "length": 2.5,
- "time": 300
}, - "legs": [
- {
- "shape": "_ajccB_{zpX_pR_pR",
- "summary": {
- "length": 2.5,
- "time": 300
}
}
], - "matched_points": [
- {
- "input_index": 0,
- "lat": 52.5001,
- "lon": 13.4001,
- "type": "matched",
- "edge_index": 0,
- "distance_from_trace_point": 7.2
}, - {
- "input_index": 1,
- "lat": 52.5099,
- "lon": 13.4099,
- "type": "interpolated",
- "edge_index": 4,
- "distance_from_trace_point": 5.6
}
], - "stats": {
- "matched": 1,
- "interpolated": 1,
- "unmatched": 0,
- "segments": 1,
- "mean_distance_from_trace_point": 6.4,
- "p95_distance_from_trace_point": 7.2,
- "max_distance_from_trace_point": 7.2,
- "confidence_score": 1
}, - "shape_format": "valhalla_encoded_polyline6"
}, - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "mode": "auto",
- "shape_match": "map_snap",
- "format": "polyline6",
- "include_directions": false,
- "points": 2,
- "max_points": 10000
}
}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": {
- "id": "node:240109189",
- "name": "Brandenburg Gate",
- "label": "Brandenburg Gate, Berlin, Germany",
- "type": "attraction",
- "coords": {
- "lat": 52.5163,
- "lon": 13.3777
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}, - "address": {
- "house_number": "1",
- "street": "Pariser Platz",
- "city": "Berlin",
- "county": "Berlin",
- "state": "Berlin",
- "postcode": "10117",
- "country": "Germany",
- "countrycode": "de"
}, - "match_type": "rooftop",
- "confidence": null
}, - "admin": {
- "country": "Germany",
- "state": "Berlin",
- "county": "Berlin",
- "city": "Berlin",
- "postcode": "10117"
}, - "nearby": [
- {
- "id": "node/123",
- "coords": {
- "lat": 52.5164,
- "lon": 13.3779
}, - "tags": {
- "amenity": "cafe",
- "name": "Gate Café"
}
}
]
}, - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "radius": 200,
- "upstream": "ok"
}
}| bbox required | string Example: bbox=52.50,13.36,52.54,13.42 south,west,north,east |
| types | string Example: types=cafe,restaurant |
| q | string Example: q=breakfast |
| limit | integer [ 1 .. 1000 ] Example: limit=100 |
| lang | string Example: lang=en |
{- "data": {
- "features": [
- {
- "id": "node/123",
- "coords": {
- "lat": 52.52,
- "lon": 13.405
}, - "name": "Café Berlin",
- "category": "cafe",
- "tags": {
- "name": "Café Berlin",
- "amenity": "cafe",
- "addr:street": "Karl-Liebknecht-Straße",
- "addr:housenumber": "8",
- "addr:postcode": "10178",
- "addr:city": "Berlin",
- "addr:country": "Germany"
}
}
]
}, - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "types": [
- "cafe",
- "restaurant"
], - "bbox": [
- 52.5,
- 13.36,
- 52.54,
- 13.42
], - "q": "breakfast"
}
}{- "data": {
- "sections": [
- {
- "id": "food",
- "label": "Food & drink",
- "icon": "utensils",
- "icon_svg": "<svg viewBox=\"0 0 24 24\">…</svg>",
- "items": [
- {
- "id": "cafe",
- "label": "Café",
- "icon": "coffee",
- "icon_svg": "<svg viewBox=\"0 0 24 24\">…</svg>",
- "pinned": true
}
]
}
]
}
}Uses the selected transit engine (MOTIS by default, or OpenTripPlanner). The normalized Atlas response has the same shape for both engines.
| from required | string Example: from=52.4884,13.4703 Origin as lat,lon |
| to required | string Example: to=52.5073,13.3324 Destination as lat,lon |
| time | string <date-time> Example: time=2026-09-07T08:00:00Z ISO 8601 departure or arrival time |
| modes | string Example: modes=TRANSIT,WALK |
| num | integer [ 1 .. 6 ] Example: num=3 |
| arrive_by | boolean |
{- "data": {
- "from": {
- "name": "Treptower Park",
- "lat": 52.4884,
- "lon": 13.4703
}, - "to": {
- "name": "Zoologischer Garten",
- "lat": 52.5073,
- "lon": 13.3324
}, - "itineraries": [
- {
- "start_time": "2026-09-07T08:02:00Z",
- "end_time": "2026-09-07T08:45:00Z",
- "duration": 2580,
- "walk_distance": 1042,
- "transfers": 1,
- "legs": [
- {
- "mode": "WALK",
- "route_name": null,
- "headsign": null,
- "agency_name": null,
- "start_time": "2026-09-07T08:02:00Z",
- "end_time": "2026-09-07T08:16:00Z",
- "duration": 840,
- "distance": 949,
- "from": {
- "name": "Treptower Park",
- "lat": 52.4884,
- "lon": 13.4703
}, - "to": {
- "name": "S Treptower Park",
- "lat": 52.4936,
- "lon": 13.4618
}, - "shape": "}psbcBakduXcH|H",
- "shape_format": "google_polyline6"
}, - {
- "mode": "SUBURBAN",
- "route_name": "S85",
- "headsign": "S Frohnau",
- "agency_name": "S-Bahn Berlin GmbH",
- "start_time": "2026-09-07T08:16:00Z",
- "end_time": "2026-09-07T08:18:00Z",
- "duration": 120,
- "distance": 1860,
- "from": {
- "name": "S Treptower Park",
- "lat": 52.4936,
- "lon": 13.4618
}, - "to": {
- "name": "S Ostkreuz",
- "lat": 52.5033,
- "lon": 13.4696
}, - "shape": "yr}bcBktstX`L~a@",
- "shape_format": "google_polyline6"
}
]
}
]
}, - "meta": {
- "timestamp": "2026-09-06T20:53:10Z",
- "time": "2026-09-07T08:00:00Z",
- "modes": "TRANSIT",
- "WALK": null
}
}Compatibility endpoint. Query parameters are forwarded to Photon unchanged.
{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "properties": {
- "osm_type": "N",
- "osm_id": "240109189",
- "osm_key": "tourism",
- "osm_value": "attraction",
- "name": "Brandenburg Gate",
- "city": "Berlin",
- "state": "Berlin",
- "country": "Germany",
- "countrycode": "de",
- "postcode": "10117"
}, - "geometry": {
- "type": "Point",
- "coordinates": [
- 13.3777,
- 52.5163
]
}
}
]
}{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "properties": {
- "osm_type": "N",
- "osm_id": "240109189",
- "osm_key": "tourism",
- "osm_value": "attraction",
- "name": "Brandenburg Gate",
- "city": "Berlin",
- "state": "Berlin",
- "country": "Germany",
- "countrycode": "de",
- "postcode": "10117"
}, - "geometry": {
- "type": "Point",
- "coordinates": [
- 13.3777,
- 52.5163
]
}
}
]
}{- "type": "FeatureCollection",
- "features": [
- {
- "type": "Feature",
- "properties": {
- "osm_type": "N",
- "osm_id": "240109189",
- "osm_key": "tourism",
- "osm_value": "attraction",
- "name": "Brandenburg Gate",
- "city": "Berlin",
- "state": "Berlin",
- "country": "Germany",
- "countrycode": "de",
- "postcode": "10117"
}, - "geometry": {
- "type": "Point",
- "coordinates": [
- 13.3777,
- 52.5163
]
}
}
]
}