A Nominatim 5.1 gateway for address and POI search. This page covers the public endpoints, the token, rate limits, and a recipe for the nearest object — something the API itself does not rank by distance.
Updated 14 Nov 2026 · software version 5.1.0 · sublicence “IMETROLL Laboratory of Technology”
Base URL: https://geoloc.imetroll.com. The service exposes a Nominatim 5.1-compatible API: /search, /reverse, /lookup, /details and /status. Results come from OpenStreetMap (ODbL). It is the default gateway for the Delphi TNominatimSearchProvider component and for Parcel reports.
This documentation is static and does not contain a real token. Examples use the placeholder YOUR_TOKEN only.
All methods are GET (or HEAD). Every request — including /status — must include token=YOUR_TOKEN. Without a token the server returns 401 (“Brak tokena – dodaj &token=…”).
Free-text or structured search. Results are ranked by Nominatim importance, not by distance. A large viewbox with a small limit can drop the object that is actually nearest.
| Parameter | Description |
|---|---|
q | Free-text query. Many Polish category names and operators such as [railway=station] work (see special phrases). |
street, city, county, state, country, postalcode | Structured search (instead of q). |
format | json (recommended); also jsonv2, geojson, xml. |
limit | Number of results. For a “nearest” search use a generous limit (e.g. 20), not 1. |
viewbox | lon1,lat1,lon2,lat2. Preferred area. |
bounded | 1 = only inside the viewbox. |
countrycodes | e.g. pl. |
accept-language | e.g. pl or en. |
addressdetails, namedetails, extratags | Nominatim 0/1 flags. extratags=1 is accepted but tags are not returned — the import style has no extratags (see below). |
layer / featureType | Nominatim 5 layer filters where supported (address, poi, railway, …). |
dedupe, exclude_place_ids, polygon_geojson | As in Nominatim 5.1. |
token | Required secret. Never paste a real token into documentation, URL logs, or public browser JS. |
GET https://geoloc.imetroll.com/search?q=…&format=json&limit=20&namedetails=0&accept-language=pl&viewbox=W,N,E,S&bounded=1&countrycodes=pl&token=YOUR_TOKEN
Address for a point: lat, lon. Optional zoom, format, addressdetails, accept-language, token.
GET https://geoloc.imetroll.com/reverse?lat=52.46412&lon=20.88074&format=json&zoom=18&accept-language=en&token=YOUR_TOKEN
Objects by OSM ids: osm_ids=W123,R456,N789 (W/R/N prefix), plus format, addressdetails, token.
Details for one place: place_id=… or osmtype=W&osmid=…, plus Nominatim 5.1 detail options.
Liveness probe. Also requires a token (otherwise HTTP 401). With a valid token it returns, among other fields, software_version (5.1.0) and the sublicence “IMETROLL Laboratory of Technology”. Cache the probe on the client (in the Delphi component: StatusCacheSeconds).
token=***), as the Delphi RedactedURL method does. If the token is bound to a Referer/Origin, use the values given when the key was issued.
401 (pekNoToken).403 (pekInvalidToken).MinRequestIntervalMs = 1000). Expect 429 if you go faster, then back off (RateLimitBackoffMs). A queue is better than a parallel burst.404 bad URL, 502/503 server down, 504 timeout.There is no dedicated “give me the nearest X” endpoint. /search ranks by importance. To get the nearest POI (school, railway station, shop…):
viewbox around the point and set bounded=1.limit (around 20). A tiny limit plus a large viewbox drops nearby, less “important” objects.[railway=station] and [railway=halt] (or stacja kolejowa and przystanek kolejowy). “stacja kolejowa” alone does not return halts (e.g. Chotomów).stacja kolejowa near Skrzeszew with bounded=1 can return 0 hits — “near” + bounded is not a substitute for tiers + haversine.Parcel reports implement this recipe in the family-POI module (every POI within 10 km; if none, the single nearest beyond 10 km, up to 50 km).
On geoloc.imetroll.com, special phrases are imported: Polish category names and bracket operators work. On the local Nominatim at 127.0.0.1:8110 (Poland extract) special phrases are not imported — rely on tags / Overpass there.
| Category (EN) | Category (PL) | OSM tags / class+type | Example q= (special phrases) |
|---|---|---|---|
| nursery | żłobek | amenity=childcare | żłobek, nursery |
| kindergarten | przedszkole | amenity=kindergarten | przedszkole, kindergarten |
| primary school | szkoła podstawowa | amenity=school + isced:level=1 / nazwa | szkoła podstawowa, szkoła |
| secondary school | liceum/technikum | amenity=school + liceum/technikum / isced 2–3 | liceum, technikum, szkoła średnia |
| grocery | sklep spożywczy | shop=convenience|greengrocer|butcher|deli|general|grocery|kiosk | sklep spożywczy, sklep |
| supermarket | market | shop=supermarket|hypermarket|wholesale | supermarket, Biedronka, Lidl, market |
| bakery | piekarnia | shop=bakery | piekarnia, bakery |
| pharmacy | apteka | amenity=pharmacy | apteka, pharmacy |
| post office | poczta | amenity=post_office | poczta, urząd pocztowy |
| parcel locker | Paczkomat/InPost | amenity=parcel_locker, brand=InPost | InPost, Paczkomat |
| fuel station | stacja paliw | amenity=fuel | Orlen, stacja paliw, Circle K, Shell, BP |
| primary clinic | przychodnia POZ | amenity=clinic / healthcare=clinic | przychodnia, ośrodek zdrowia, POZ |
| doctor | lekarz | amenity=doctors / healthcare=doctor | lekarz, gabinet lekarski |
| dentist | dentysta | amenity=dentist | dentysta, stomatolog |
| hospital / ER | szpital/SOR | amenity=hospital | szpital, SOR, hospital |
| pitch / Orlik | boisko/Orlik | leisure=pitch | Orlik, boisko |
| swimming pool | pływalnia | leisure=swimming_pool (pomiń access=private) | pływalnia, basen |
| sports hall | hala sportowa | leisure=sports_hall|sports_centre | hala sportowa |
| gym | siłownia | leisure=fitness_centre / amenity=gym | siłownia, fitness, gym |
| playground | plac zabaw | leisure=playground | plac zabaw, playground |
| park | park | leisure=park|garden | park, skwer |
| library | biblioteka | amenity=library | biblioteka, library |
| community centre | dom kultury | amenity=community_centre|arts_centre | dom kultury, GOK |
| cinema | kino | amenity=cinema | kino, cinema |
| church | kościół | amenity=place_of_worship | kościół, parafia, church |
| bus stop | przystanek | highway=bus_stop / amenity=bus_station | przystanek autobusowy, bus stop |
| railway station / halt | stacja kolejowa / przystanek PKP | railway=station oraz railway=halt | stacja kolejowa, przystanek kolejowy, [railway=station], [railway=halt] |
| fire station | OSP | amenity=fire_station | OSP, straż pożarna, remiza |
| police | policja | amenity=police (nie straż miejska) | policja, komisariat |
| ATM | bankomat | amenity=atm | bankomat, ATM |
Mapping must use OSM tags, not just the name (e.g. a grocery is a specific shop=*, not every hit for the word “shop”). Railway stations and halts are two classes.
extratags=1 parameter does not return an OSM tag dictionary. For tags (isced:level, access, healthcare, brand, wikidata, …) use Overpass. Preferred public instances, in this order: https://overpass.openstreetmap.fr/api/interpreter, then overpass-api.de, overpass.kumi.systems, overpass.private.coffee. An HTTP 200 with a non-date timestamp_osm_base (seen on overpass.osm.ch) must be rejected — that can be an empty or bad database, not a success.
Test point: a plot at Familijna 16a, Skrzeszew (gmina Wieliszew), centroid about lon=20.88074, lat=52.46412. Measurements from 14 November 2026; the token in URLs is a placeholder. Distances are haversine from the centroid, not “/search order”.
GET https://geoloc.imetroll.com/search?q=przystanek+kolejowy&format=json&limit=20&namedetails=0&accept-language=pl&viewbox=20.75,52.56,21.01,52.37&bounded=1&countrycodes=pl&token=YOUR_TOKEN
Result (short): halt Chotomów, about 5.4 km (5,391 m). q=[railway=halt] does the same. q=[railway=station] or q=stacja kolejowa returns stations only, not halts — Chotomów is then missing.
GET https://geoloc.imetroll.com/search?q=stacja+kolejowa+near+Skrzeszew&format=json&bounded=1&viewbox=20.75,52.56,21.01,52.37&countrycodes=pl&token=YOUR_TOKEN
Result: 0 hits. That does not mean there is no station nearby. Use the tiered + haversine recipe, and query station and halt separately.
A “stacja kolejowa” query alone would omit Chotomów and the other halts.
Names and distances come from geoloc + local Nominatim + Overpass combined; geoloc alone does not guarantee that the first array element is the nearest.
| geoloc.imetroll.com | Local Nominatim (127.0.0.1:8110) | |
|---|---|---|
| Software | Nominatim 5.1.0 (gateway) | Nominatim 5.1 (mediagis container, Poland PBF) |
| Special phrases | yes (PL names and operators) | no |
| extratags | not enabled | different import style — still use Overpass when you need the full tag set |
| Token | required (YOUR_TOKEN) | local service, no public token |
| Role | shared gateway (Parcel, Delphi components, other apps) | complement / fallback on the application server |
In practice, good results come from composing: geoloc first (phrases), then local Nominatim, then Overpass by tags, with coordinate deduplication and a nearest-distance pick.
Wikipedia and Wikidata are not a search source for the nearest POI — they do not replace OSM tags or distance tiers. A name or description supplement only makes sense once the object has already been found and Overpass has a wikidata / wikipedia tag. Do not add a live Wikipedia API to the search path.
Map data: © OpenStreetMap contributors, ODbL licence. Applications must show “© OpenStreetMap contributors”. Nominatim is open-source software; the geoloc.imetroll.com gateway is operated by IMETROLL Laboratory of Technology.
The public nominatim.openstreetmap.org instance has its own, stricter rules (including 1 req/s and no autocomplete) — this documentation covers geoloc.imetroll.com only.