API
The region list is on the hub. Everything else is served by each region’s own site, at the same paths.
GET /v1/regions
Every active region and region group, with its MeshMapper code, slug, name, URL, bounding box [west, south, east, north], centre, default radio preset and group. No sign-in; CORS is open; cached for five minutes and sent with an ETag.
curl https://meshsonar.com/v1/regions
{ "regions": [ { "code": "XXX", "slug": "xxx", "name": "…", "status": "active",
"url": "https://xxx.meshsonar.com", "bbox": [w, s, e, n] | null,
"centroid": { "lat": 0, "lon": 0 } | null, "default_preset": { … } | null,
"group": "slug" | null } ],
"groups": [ { "code": "…", "slug": "…", "name": "…", "url": "…", "members": ["XXX"], "bbox": …, "centroid": … } ] }A region’s public endpoints
At https://<slug>.meshsonar.com/api/cmh/<name>. Errors are {error} with 400, 401, 403, 404, 409 or 429 (with Retry-After). Public endpoints are rate limited to 120 requests a minute per address.
| Endpoint | Auth | Request and response |
|---|---|---|
site-config | none | GET → {viewerGate, driverRegistration, appLinks} |
public-coverage | none | GET [?since=ISO] → {cellDeg, cells[], totals, asOf}: measured squares, drive ends trimmed, flagged drives excluded |
public-stats | none | GET → {drivers, drives, pings, heardPct, km, repeatersHeard, lastDriveAt} |
leaderboard | none | GET ?period=30d|all → {period, rows[]}: opt-in drivers, callsign only |
Uploads and account endpoints are in the drive format.