Using mappappy
Every request carries your key in the X-Map-Key header and must come from one of the IP addresses on the key.
Call these services from your server, never from a browser: your key is a secret.
Routing — route.mappappy.com
curl -s https://route.mappappy.com/route -H "X-Map-Key: $KEY" \
--json '{"locations":[{"lat":39.77,"lon":-86.16},{"lat":39.95,"lon":-86.01}],"costing":"bicycle","costing_options":{"bicycle":{"use_hills":0.3}}}'
Valhalla API: /route, /optimized_route, /sources_to_targets, /isochrone, /trace_route, /trace_attributes, /height, /locate, /status.
Search — search.mappappy.com
curl -s "https://search.mappappy.com/search?q=Monument+Circle+Indianapolis&format=jsonv2" -H "X-Map-Key: $KEY"
Nominatim API: /search, /reverse, /lookup, /details, /status.
Lookup — lookup.mappappy.com
curl -s https://lookup.mappappy.com/api/interpreter -H "X-Map-Key: $KEY" \ --data-urlencode 'data=[out:json][timeout:25];way["highway"="cycleway"](39.7,-86.2,39.8,-86.1);out geom;'
Overpass API, same Overpass QL as overpass-api.de: /api/interpreter, /api/status.
Tiles — tiles.mappappy.com
Browsers load tiles directly, from the sites listed on your key. Your server asks for a signed URL (good for 12 hours) and hands it to the page:
curl -s -X POST https://mappappy.com/api/v1/tiles/sign -H "X-Map-Key: $KEY"
{"pmtiles_url":"https://tiles.mappappy.com/pmtiles/conus-….pmtiles?Policy=…","expires_at":"…","styles":{"light":"…"}}
In the page, MapLibre GL JS with the pmtiles protocol shows it; https://tiles.mappappy.com/js/mappappy-leaflet.js does this for Leaflet maps (a drop-in for a tile layer, with a fallback).
Errors
401 no or unknown key · 403 key not allowed (reason: service, ip, pending, suspended) · 429 over the key's rate limit (retry after a minute) · 503 the service is restarting.
Attribution
Show “© OpenStreetMap contributors” on maps and results (ODbL).