Skip to main content

Offline Maps API

Last updated: July 24, 2026 | 8 minutes read

Current version: 1.0.0 | View Release Notes

The Offline Maps API gives applications everything needed to provision and maintain offline map content. It exposes the catalog of downloadable maps — organized by map version and SDK capability — and serves the map files themselves with production-grade download semantics: resumable transfers via HTTP ranges, conditional requests via ETag and Last-Modified, and per-file integrity checksums (CRC32, MD5, SHA-256) so clients can verify every byte they store.

A typical integration follows three steps: query versions to find the map versions compatible with your SDK capability, query file_list to obtain the catalog of a chosen version (world basemap plus per-country and per-state map files), then download the files your user selects — by file path, by content id, or by country.

Authentication Required

All requests require a valid API token and its secret. Requests without a token or without the secret are rejected with 401; requests with an invalid token or a wrong secret are rejected with 403.

Version and Capability Consistency
  • The world basemap and all regional maps stored on a device must be the same map version. Mixing versions is not supported.
  • When upgrading from an earlier map version, download the new world basemap first (download=basemap), then re-download every regional map at the new version.
  • Always request the catalog with the map capability actually supported by your SDK/app version — a higher capability may list maps your SDK cannot read.
  • Although an SDK/app with a higher capability fully supports older map versions, it is recommended to always use the latest map version available for your capability (map_version=latest).

Endpoints:

  • GET /offline_maps/versions
  • GET /offline_maps/file_list
  • GET /offline_maps/download

Base URL: https://api.magiclane.net/api/v1

All endpoints support GET, HEAD, and POST (application/x-www-form-urlencoded — body fields supplement query parameters).

Migrating from offlinemaps.magiclane.com

This API supersedes the legacy offline maps service at offlinemaps.magiclane.com. Requests map one-to-one onto the new endpoints — parameters and authentication are unchanged:

Legacy requestNew endpoint
/api?capability=.../offline_maps/versions?capability=...
/api?capability=...&map_version=.../offline_maps/file_list?capability=...&map_version=...
/api?capability=...&map_version=...&download=... (or path, content_id, country_iso, country_name)/offline_maps/download with the same parameters

Authentication

Credentials can be supplied through the Authorization header or through query parameters:

MethodLocationExample
HeaderRequest header-H "Authorization: Bearer YOUR_API_TOKEN, Secret YOUR_SECRET"
Query parametersURL query string?authToken=YOUR_API_TOKEN&authSecret=YOUR_SECRET
FailureStatusBody
Token missing401Token not found in request !
Secret missing401AUTH_SECRET not found in request !
Token invalid, expired, or blacklisted403
Secret does not match the application403

Common Parameters

ParameterTypeRequiredDescription
capabilityinteger or latestYesThe map capability level of your SDK. An SDK with capability R can consume any map version whose capability is less than or equal to R. latest selects the highest capability available. A value greater than the maximum supported returns 400.
map_versionstring or latestfile_list, downloadMap version in major.minor form (for example 7.546). latest selects the newest version compatible with the resolved capability.

Versions

Lists all map versions compatible with the given capability, newest first.

Endpoint: GET /offline_maps/versions

Example Request

curl "https://api.magiclane.net/api/v1/offline_maps/versions?capability=latest" \
-H "Authorization: Bearer YOUR_API_TOKEN, Secret YOUR_SECRET"

Response

{
"capability": 15,
"compatible_maps": ["7.546", "7.545", "7.543", "7.541", "7.535"]
}
FieldDescription
capabilityThe resolved capability level.
compatible_mapsMap versions consumable at that capability, newest first.

Status Codes

CodeMeaning
200Success.
400Wrong or missing capability (including capability greater than the maximum supported).
404No compatible map versions available.

File List

Returns the downloadable content catalog of one map version: the world basemap and the individual map files with their geographic attribution and integrity checksums.

Endpoint: GET /offline_maps/file_list

Example Request

curl "https://api.magiclane.net/api/v1/offline_maps/file_list?capability=latest&map_version=7.546" \
-H "Authorization: Bearer YOUR_API_TOKEN, Secret YOUR_SECRET"

Response

{
"capability": 15,
"map_version": "7.546",
"is_patch": 0,
"basemap_url": {
"path": "basemap/WM_7_546.map",
"size": 194538761,
"crc32": "ac49b0fc",
"md5": "0f343b0931126a20f133d67c2b018a3b",
"sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
},
"map_url": [
{
"content_id": 553648134,
"continent": "Europe",
"country_name": "Netherlands",
"country_iso": "NLD",
"path": "NetherlandsOSM_7_546.cmap",
"size": 1367414149,
"crc32": "50abc957",
"md5": "8dfa4b4f0ecf9861e25e213989d7a2fa",
"sha256": "394bc3162a55b51eaeca6a2be850c3e742a8f8a7cf9ebaa55ce66e64c2536745"
}
]
}
FieldDescription
capabilityCapability level of the returned map version.
map_versionThe resolved map version.
is_patch1 when the version is distributed as a patch on top of a base version, 0 otherwise.
basemap_urlThe world basemap file: path (relative to the version), size in bytes, and integrity checksums.
map_urlArray of downloadable map files. Each entry carries content_id, geographic attribution (continent, country_name, country_iso, optional state), path, size, and checksums.

Entries may carry additional catalog fields beyond the ones listed (for example store_visibility); these are passed through from the map catalog unchanged and can be ignored if not needed.

Use the checksums to verify downloaded files: crc32 for a fast check, md5/sha256 for stronger verification.

Status Codes

CodeMeaning
200Success.
400Wrong or missing capability or map_version.
404The requested map version does not exist or is not compatible with the capability.

Download

Downloads one map file of a version. The file is selected by exactly one of the selectors below.

Endpoint: GET /offline_maps/download

File Selectors

ParameterDescription
downloadFile path as listed in file_list (path field), for example NetherlandsOSM_7_546.cmap. Primary selector; path and file are aliases. The special value basemap downloads the version's world basemap; an explicit basemap/<file>.map path is also accepted.
content_idNumeric content id from the file_list entry.
country_isoISO country code from the file_list entry. For countries split into states, add state — a bare country selector matching several files is rejected as ambiguous.
country_nameCountry name from the file_list entry, same rules as country_iso.
stateState name, combined with country_iso or country_name.

String selector values must be URL-encoded — paths with spaces or non-ASCII characters (for example Brazil_São Paulo... or Norway_Bouvet Island...) are decoded by the server before matching.

Example Requests

Download the world basemap:

curl -O "https://api.magiclane.net/api/v1/offline_maps/download?capability=latest&map_version=7.546&download=basemap" \
-H "Authorization: Bearer YOUR_API_TOKEN, Secret YOUR_SECRET"

Download by file path (URL-encoded):

curl -O "https://api.magiclane.net/api/v1/offline_maps/download?capability=latest&map_version=7.546&download=Brazil_S%C3%A3o%20Paulo_SA.map" \
-H "Authorization: Bearer YOUR_API_TOKEN, Secret YOUR_SECRET"

Download by country and state:

curl -O "https://api.magiclane.net/api/v1/offline_maps/download?capability=latest&map_version=7.546&country_iso=AUS&state=New%20South%20Wales" \
-H "Authorization: Bearer YOUR_API_TOKEN, Secret YOUR_SECRET"

Resume an interrupted download:

curl "https://api.magiclane.net/api/v1/offline_maps/download?capability=latest&map_version=7.546&content_id=553648134" \
-H "Authorization: Bearer YOUR_API_TOKEN, Secret YOUR_SECRET" \
-H "Range: bytes=52428800-" \
-o NetherlandsOSM_7_546.cmap.part

Response Headers

HeaderDescription
Content-Typeapplication/octet-stream
Content-Dispositionattachment; filename="<file>"
Content-LengthNumber of bytes in the response body.
ETagWeak validator for the file, for use with If-None-Match.
Last-ModifiedFile modification time (RFC 1123 date), for use with If-Modified-Since.
Accept-Rangesbytes — range requests are supported.
Content-RangePresent on 206 responses (bytes start-end/total) and on 416 responses (bytes */total).
Cache-Controlmax-age=172800, no-cache, must-revalidate, no-transform

Conditional Requests

Send the ETag returned by a previous download in If-None-Match, or the Last-Modified date in If-Modified-Since, to avoid re-downloading unchanged files — the server answers 304 Not Modified. When both headers are present, If-None-Match takes precedence.

Range Requests

Partial downloads and resume are supported through the standard Range header: bytes=start-, bytes=start-end, and the suffix form bytes=-count (last count bytes). Multiple ranges in one request are not supported. An unsatisfiable range returns 416 with a Content-Range: bytes */total header.

Status Codes

CodeMeaning
200Full content.
206Partial content (range request).
304Not modified (conditional request).
400Wrong or missing capability, map_version, or file selector — including an unknown content_id and an ambiguous or unknown country selector. Body: Bad Request. Wrong/Missing download filename.
404The requested version does not exist, or the requested file path does not exist in that version. Body: File Not Found !
416Range not satisfiable.

Custom Map Catalogs

Accounts provisioned with a custom map catalog are automatically served from that catalog by all three endpoints — no extra parameter needed. To access the standard Magic Lane catalog from such an account, pass map_type=standard with any request. Accounts without a custom catalog always receive the standard catalog.

No Mixing of Catalogs

Custom maps and standard maps cannot be mixed on a device. Provision all offline content — basemap and regional maps — from a single catalog.

For general information about authentication and API keys, see the Introduction.