MocTel Geo API

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.

Endpoints

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

Maps in your page (MapLibre GL + PMTiles)

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 });

Example

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.