{"openapi":"3.1.0","info":{"title":"Map Tile API","version":"1.0.0","description":"The maths behind every web map. Convert between latitude/longitude, slippy-map XYZ tile coordinates (the z/x/y scheme used by OpenStreetMap, Google Maps, Mapbox and Leaflet) and Bing/Azure quadkeys, and get the exact Web Mercator (EPSG:3857) bounding box and centre of any tile. Find which tile contains a point at a given zoom, expand a tile to its geographic bounds, translate a quadkey to z/x/y and back, and list a tile's eight neighbours (with correct antimeridian wrap-around and pole clamping). Perfect for tile servers and caches, pre-fetching map tiles, drawing tile grids and debugging map layers. Pure local computation — no key, no third-party service, instant. Live, nothing stored. 5 endpoints. Distinct from coordinate-format conversion (Plus Code/MGRS/UTM), geohash and the encoded-polyline codec.","contact":{"name":"PremiumApi","url":"https://www.oanor.com/by/premiumapi"}},"servers":[{"url":"https://api.oanor.com/maptile-api","description":"oanor gateway"}],"tags":[{"name":"Tiles"},{"name":"Meta"}],"components":{"securitySchemes":{"oanorKey":{"type":"apiKey","in":"header","name":"x-oanor-key","description":"Get your key at https://www.oanor.com/developer/keys"}}},"security":[{"oanorKey":[]}],"paths":{"/v1/from-latlng":{"get":{"operationId":"get_v1_from_latlng","tags":["Tiles"],"summary":"Lat/lng to tile + quadkey","description":"","parameters":[{"name":"lat","in":"query","required":true,"description":"Latitude (±85.05)","schema":{"type":"string"},"example":"52.5163"},{"name":"lng","in":"query","required":true,"description":"Longitude","schema":{"type":"string"},"example":"13.3777"},{"name":"zoom","in":"query","required":true,"description":"Zoom 0-30","schema":{"type":"string"},"example":"12"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"x":2200,"y":1343,"lat":52.5163,"lng":13.3777,"zoom":12,"quadkey":"120210233222","tile_count_per_axis":4096},"meta":{"timestamp":"2026-06-02T16:51:49.476Z","request_id":"7bb94cda-884d-457f-84c8-f1da41b46748"},"status":"ok","message":"Lat/lng to tile + quadkey","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/neighbors":{"get":{"operationId":"get_v1_neighbors","tags":["Tiles"],"summary":"Neighbouring tiles","description":"","parameters":[{"name":"x","in":"query","required":true,"description":"Tile X","schema":{"type":"string"},"example":"2200"},{"name":"y","in":"query","required":true,"description":"Tile Y","schema":{"type":"string"},"example":"1343"},{"name":"zoom","in":"query","required":true,"description":"Zoom 0-30","schema":{"type":"string"},"example":"12"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"x":2200,"y":1343,"zoom":12,"neighbors":{"e":{"x":2201,"y":1343,"z":12,"quadkey":"120210233223"},"n":{"x":2200,"y":1342,"z":12,"quadkey":"120210233220"},"s":{"x":2200,"y":1344,"z":12,"quadkey":"120212011000"},"w":{"x":2199,"y":1343,"z":12,"quadkey":"120210232333"},"ne":{"x":2201,"y":1342,"z":12,"quadkey":"120210233221"},"nw":{"x":2199,"y":1342,"z":12,"quadkey":"120210232331"},"se":{"x":2201,"y":1344,"z":12,"quadkey":"120212011001"},"sw":{"x":2199,"y":1344,"z":12,"quadkey":"120212010111"}}},"meta":{"timestamp":"2026-06-02T16:51:49.583Z","request_id":"0a1d6901-5b12-431e-8141-8cad504c2001"},"status":"ok","message":"Neighbouring tiles","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/quadkey":{"get":{"operationId":"get_v1_quadkey","tags":["Tiles"],"summary":"Tile <-> quadkey","description":"","parameters":[{"name":"quadkey","in":"query","required":false,"description":"Quadkey (digits 0-3)","schema":{"type":"string"},"example":"120210233222"},{"name":"x","in":"query","required":false,"description":"Tile X (alt)","schema":{"type":"string"}},{"name":"y","in":"query","required":false,"description":"Tile Y (alt)","schema":{"type":"string"}},{"name":"zoom","in":"query","required":false,"description":"Zoom (alt)","schema":{"type":"string"}}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"x":2200,"y":1343,"z":12,"bbox":{"east":13.447266,"west":13.359375,"north":52.536273,"south":52.48278,"center":{"lat":52.509527,"lng":13.40332}},"quadkey":"120210233222"},"meta":{"timestamp":"2026-06-02T16:51:49.670Z","request_id":"04269951-237b-4a10-b987-3423f646239b"},"status":"ok","message":"Tile <-> quadkey","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/to-bbox":{"get":{"operationId":"get_v1_to_bbox","tags":["Tiles"],"summary":"Tile to bounding box","description":"","parameters":[{"name":"x","in":"query","required":true,"description":"Tile X","schema":{"type":"string"},"example":"2200"},{"name":"y","in":"query","required":true,"description":"Tile Y","schema":{"type":"string"},"example":"1343"},{"name":"zoom","in":"query","required":true,"description":"Zoom 0-30","schema":{"type":"string"},"example":"12"}],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"x":2200,"y":1343,"bbox":{"east":13.447266,"west":13.359375,"north":52.536273,"south":52.48278,"center":{"lat":52.509527,"lng":13.40332}},"zoom":12,"quadkey":"120210233222"},"meta":{"timestamp":"2026-06-02T16:51:49.769Z","request_id":"7140d006-a984-4b66-b72d-83cdd1be04e5"},"status":"ok","message":"Tile to bounding box","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}},"/v1/meta":{"get":{"operationId":"get_v1_meta","tags":["Meta"],"summary":"Spec","description":"","parameters":[],"security":[{"oanorKey":[]}],"responses":{"200":{"description":"OK","content":{"application/json":{"example":{"data":{"name":"Map Tile API","notes":"Latitude is limited to the Web Mercator range ±85.05112878°. Tile scheme matches OpenStreetMap / Google / Mapbox XYZ.","version":"v1","endpoints":[{"path":"/v1/from-latlng","params":{"lat":"required","lng":"required","zoom":"0-30, required"},"returns":"tile x/y/z + quadkey"},{"path":"/v1/to-bbox","params":{"x":"required","y":"required","zoom":"required"},"returns":"tile bounding box (N/S/E/W) + center + quadkey"},{"path":"/v1/quadkey","params":{"quadkey":"string of 0-3, OR","x_y_zoom":"tile coords"},"returns":"tile <-> quadkey (bidirectional)"},{"path":"/v1/neighbors","params":{"x":"required","y":"required","zoom":"required"},"returns":"8 neighbouring tiles (x wraps, poles clamped)"},{"path":"/v1/meta","params":[],"returns":"this document"}],"description":"Convert between latitude/longitude, slippy-map XYZ tiles and Bing quadkeys, and get tile bounding boxes. Web Mercator (EPSG:3857). Pure local, no key."},"meta":{"timestamp":"2026-06-02T16:51:49.867Z","request_id":"4dc8d557-59ee-44d3-b244-efdb04cee4fd"},"status":"ok","message":"Meta","success":true}}}},"401":{"description":"Missing or invalid x-oanor-key header"},"402":{"description":"Active subscription required"},"429":{"description":"Rate-limit or monthly quota reached"},"502":{"description":"Upstream did not respond"}}}}},"x-oanor-pricing":[{"slug":"free","name":"Free","price_cents_month":0,"monthly_call_quota":1040,"rps_limit":2,"hard_limit":true},{"slug":"starter","name":"Starter","price_cents_month":250,"monthly_call_quota":8900,"rps_limit":8,"hard_limit":true},{"slug":"pro","name":"Pro","price_cents_month":2180,"monthly_call_quota":139000,"rps_limit":20,"hard_limit":true},{"slug":"mega","name":"Mega","price_cents_month":5780,"monthly_call_quota":715000,"rps_limit":50,"hard_limit":true}],"x-oanor-marketplace-url":"https://www.oanor.com/api/maptile-api"}