mappappy

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).