Skip to main content

Map Tiles

Overview​

geocodeme.net serves raster and vector map tiles across Europe (rendered from OpenStreetMap data), the natural companion to the geocoding and routing APIs, so your whole map stack runs on one provider and one API key.

Raster tiles are standard 256×256 images in the XYZ scheme ({z}/{x}/{y}), served as PNG or WebP, in a light or a dark style, and compatible with every mainstream map library: Leaflet, flutter_map, MapLibre GL, OpenLayers. Vector tiles are covered further down.

GET https://tiles.geocodeme.net/{style}/{z}/{x}/{y}[@2x].{format}?api_key=YOUR_KEY
ParameterDescription
stylestreets (light, OSM Bright) or streets-dark (dark theme, ideal behind a dark UI).
z, x, yStandard XYZ tile coordinates (Web Mercator).
@2xOptional retina suffix: 512×512 rendering for high-DPI screens.
formatpng or webp. Same tile, same price: WebP is typically 30 to 60% lighter, and every modern browser and mobile framework decodes it natively. Pick webp unless you must support very old clients.
api_keyYour API key, as a query parameter or X-API-Key header.

Two ways to authenticate, drawing from the same plan limits:

  • ?api_key=: for servers and web apps that can keep a key private.
  • ?token=: a short-lived JWT signed by your backend, built for mobile apps where an embedded key could be extracted. See Signed Tile Tokens.

Tiles are rendered from the same European OpenStreetMap extract that backs the geocoding dataset, so the rendered area is Europe. The five French overseas regions have their own geocoding and routing instances, but they are not part of the tile dataset yet; tiles outside the rendered area return 404. Zoom levels up to 20 are rendered (from z14 vector data).

Quotas & rate limits​

Map tiles are metered separately from geocoding requests; a map view loads 15 to 30 tiles at once, so they never eat into your geocoding quota.

PlanTiles / monthTiles / second
Free50,00025
Startup750,000100
Growth2,500,000150
Pro7,500,000200

Only tiles that reach our servers count against your quota: responses served from the CDN edge cache are free. Exceeding a limit returns 429 with a JSON error body; an invalid or missing key returns 401.

Usage examples​

L.tileLayer(
'https://tiles.geocodeme.net/streets/{z}/{x}/{y}.png?api_key=YOUR_KEY',
{
attribution:
'&copy; <a href="https://openmaptiles.org/">OpenMapTiles</a> &copy; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors',
maxZoom: 20,
}
).addTo(map);

Every example above works unchanged with the streets-dark style and with the .webp extension; a common setup is to switch the URL template on the app's theme, streets in light mode and streets-dark in dark mode.

Vector tiles​

Alongside raster tiles, geocodeme.net serves vector tiles: Mapbox Vector Tiles (.pbf) in the OpenMapTiles schema, covering the same regions as the raster tiles:

GET https://tiles.geocodeme.net/vector/{z}/{x}/{y}.pbf?api_key=YOUR_KEY

Why go vector? Tiles are far lighter than PNGs, render crisply at any zoom or rotation, and the map is styled client-side (brand colors, dark mode, showing or hiding layers), all without a single extra server request.

Startup plan and above

Vector tiles require the Startup plan or above (the vector_tiles capability). On the Free plan, requests return 403 PLAN_UPGRADE_REQUIRED, a plan error, distinct from the 429 you get when hitting rate or quota limits, and it never consumes quota.

Authentication is identical to raster tiles: ?api_key= for servers and web apps, or a signed ?token= for mobile apps (see Signed Tile Tokens), and vector tiles draw from the same tile quotas.

Bring your own style​

The server intentionally does not host a style.json, glyphs, or sprites: you bring your own MapLibre style and point its source at the tile URL. Any style built for the OpenMapTiles schema works; just replace its sources block with:

{
"sources": {
"geocodeme": {
"type": "vector",
"tiles": [
"https://tiles.geocodeme.net/vector/{z}/{x}/{y}.pbf?api_key=YOUR_KEY"
],
"minzoom": 0,
"maxzoom": 14
}
}
}

and bundle the style's glyphs and sprites with your app. The attribution requirement below applies to vector tiles too.

Attribution (required)​

Map data is © OpenStreetMap contributors, licensed under the ODbL, rendered with the OpenMapTiles schema. Your map must display the attribution © OpenMapTiles © OpenStreetMap contributors; every library above has a built-in attribution control.

Caching​

Tiles are immutable between monthly dataset refreshes and are served with Cache-Control: public, max-age=86400. Let your HTTP client or map library cache them; it makes your map faster and stretches your quota.

Errors​

StatusMeaning
401 INVALID_API_KEYMissing, invalid, or revoked API key.
403 PLAN_UPGRADE_REQUIREDVector tiles requested on a plan that does not include them.
404 NOT_FOUNDTile outside the rendered area, unknown style, or malformed path.
429 RATE_OR_QUOTA_EXCEEDEDTile rate limit or monthly tile quota exceeded.