API
A small JSON API for mesh updaters and other tools. Everything except uploading works without an account.
Base URL
https://mqmesh.com/api/v1
Public calls are limited to 60 a minute per IP address. For uploads, create a token under Settings, API tokens and send it as Authorization: Bearer <token>.
Endpoints
GET/manifest
Every zone's Site files: names, sizes, MD5 and SHA-256 hashes and download links. Send the ETag back in If-None-Match and you get 304 Not Modified when nothing changed. Add ?since=2026-01-01T00:00:00Z for only the zones changed since then, and ?include=community to list each zone's approved community versions (with uploader and notes) as well.
Public
GET/expansions
Expansion codes, names, release years and zone counts, in release order.
Public
GET/zones
Zones with the same filters as the zone browser: q, exp[]=kunark, doors=1, community=1, updated=30d|90d|year, sort, dir, per_page (up to 500).
Public
GET/zones/{short_name}
One zone with its Site files and every approved community version.
Public
GET/files/{id}/download
Download one file, named the way MQ2Nav expects.
Public
GET/zip?zones=a,b,c
A zip of those zones' Site meshes, built as it downloads. Add with=doors for doors files, or pass the /zones filters instead of zones=.
Public, 6 per minute
GET/updater
The newest MQMesh Updater build for each platform (windows, linux): version, file name, size, SHA-256 and download link. Handy for self-update checks.
Public
GET/updater/windows/download
Download the newest Windows build of the updater (zip).
Public
GET/updater/linux/download
Download the newest Linux build of the updater (tar.gz).
Public
POST/zones/{short_name}/versions
Upload a community version. Multipart fields: type (mesh or doors), file, notes. Returns 201 with the new version, 409 if the same file already exists, 422 if it is not a valid file.
Token with upload
Checking for updates
# First run: save the ETag
curl -si https://mqmesh.com/api/v1/manifest | grep -i etag
# Later runs: only download the manifest when something changed
curl -s -H 'If-None-Match: "<etag>"' -o manifest.json -w '%{http_code}' https://mqmesh.com/api/v1/manifest
Compare each zone's md5 with your local file and download only the ones that differ.
Example zone
{
"short_name": "poknowledge",
"name": "The Plane of Knowledge",
"eq_zone_id": 202,
"expansion": "pop",
"updated_at": "2026-08-13T21:04:11+00:00",
"url": "https://mqmesh.com/zones/poknowledge",
"files": {
"mesh": {
"id": 412, "type": "mesh", "version": 3, "site_file": true,
"file_name": "poknowledge.navmesh", "size": 8700850,
"md5": "…", "sha256": "…",
"created_at": "2026-08-13T21:04:11+00:00",
"download_url": "https://mqmesh.com/api/v1/files/412/download"
}
}
}
Old updater files
zones.json, updater.json and meshdb.json are still published in their original formats and kept current with the Site files, so existing updaters keep working.