Bring your own data
Private overlays live under your account prefix on R2. They participate in the map as a customer layer on top of Canada and industry catalogs. This is not generic GIS hosting: there is no search, identify, or indexing over files you send us.
Limits
| Cap | Value |
|---|---|
| Overlays per account | 10 |
| Size per overlay | 5 MB |
| Formats | GeoJSON (FeatureCollection, Feature, or a geometry) and PMTiles |
| Auth | API key on /byod, session cookie on /account/byod |
A larger file or an 11th overlay is 400 bad_request. Keys without an accountId (founder /
integration) are isolated per key. Checkout is not wired for a BYOD add-on; 0.1 is
key-authenticated and quota-gated.
Upload, list, delete
curl -X POST "https://api.unmap.dev/byod?name=leases" \
-H "Authorization: Bearer $UNMAP_API_KEY" \
-H "Content-Type: application/geo+json" \
--data-binary @leases.geojson{
"id": "ovl_aabbccddeeff",
"name": "leases",
"kind": "geojson",
"bytes": 1284,
"createdAt": "2026-09-11T18:00:00.000Z",
"url": "https://api.unmap.dev/byod/ovl_aabbccddeeff/data",
"overlay": "byod:ovl_aabbccddeeff"
}GET /byod lists your overlays and repeats the limits. DELETE /byod/{id} removes the object.
GET /byod/{id}/data is the file itself (same key). Multipart file + optional name is also
accepted. The dashboard data tab does the same over the account session.
Objects are stored at byod/{accountId}/{id}. Another account cannot list, read, or delete
yours: the answer is 404, not a confirmation that the id exists.
Paint it on a style
GeoJSON overlays compose through the existing overlays= hook:
GET /styles/muted.json?overlays=byod:ovl_aabbccddeeff,municipalities
unmap adds a GeoJSON source pointing at /byod/{id}/data?key= and palette-only circle and line
layers above roads and below labels. Customer data stays visually dominant. A missing id is a
400. PMTiles is stored and served at /byod/{id}/{z}/{x}/{y} so you can add a vector source
yourself; style composition does not guess the archive's source-layer, so overlays=byod:
on a PMTiles id is a 400.
const map = new Unmap({
key,
style: "muted",
overlays: ["byod:ovl_aabbccddeeff", "municipalities"],
});What this is not
- A tenant PostGIS, tile indexer, or identify engine.
- Search over your attributes.
- A billed add-on with a Stripe price. Usage is metered as
byod. - A replacement for the public layer catalog.
Next steps
- Layers for the catalog overlays you get without uploading anything.
- Maps API for how an overlay composes onto a style.
- Plans & Limits for the size and retention this sits under.