Geocoding, reverse geocoding and driving directions for Québec, backed by government open data (RQA, 5.25M addresses) and OpenStreetMap routing.
All endpoints require an API key:
Authorization: Bearer mtg_…, X-API-Key: mtg_…
or ?key=mtg_…. Keys can be restricted to your website's
origin. Contact mochouinard@moctel.com
for access.
GET /v1/geocode?q=577 senecal montreal&near=45.50,-73.57&radius=30&limit=5
GET /v1/reverse?at=45.4361,-73.5960&radius=0.25&limit=5
GET /v1/route?from=45.50,-73.57&to=45.53,-73.61&costing=auto
POST /v1/route (full Valhalla request body)
GET /v1/style.json (MapLibre GL style, your key inlined)
GET /v1/basemap.pmtiles (vector basemap, PMTiles + Range requests)
GET /v1/tiles/{z}/{x}/{y}.png (raster tiles)
GET /v1/usage (your consumption & limits this month)
Try it live: interactive demo — MapLibre GL
vector map, geocoding, reverse and routing, no key needed.
Interactive reference & schemas: /docs
const p = new pmtiles.Protocol();
maplibregl.addProtocol("pmtiles", p.tile);
new maplibregl.Map({ container: "map",
style: "https://geo.api.moctel.com/v1/style.json?key=" + KEY,
center: [-73.5674, 45.5019], zoom: 12 });
curl -H "Authorization: Bearer $KEY" \ "https://geo.api.moctel.com/v1/geocode?q=577+sennecal+montreal"
{"query": "577 sennecal montreal",
"results": [{"lat": 45.43609, "lon": -73.59596,
"label": "577 Avenue Senécal, Montréal", "score": 0.933, …}]}
Address data: « Référentiel québécois des adresses, gouvernement du Québec » (CC-BY 4.0). Routing: © OpenStreetMap contributors.