Custom layers

Custom layers

List and read layers of zones, locations or H3 cells.

GET /v1/custom/layers lists custom layers: sets of your own data (or data we hold), served next to the built-in boundaries. A layer holds one kind of item: polygons (zone), points (location) or H3 cell sets (cell). Use layers for service territories, store lists, coverage maps and any other data you query by place.

These routes are read-only. Read the items of a layer on the zones and locations pages.

Not Geoapify-compatible. /v1/custom/ is our own API. Geoapify has no equivalent, so there is nothing to migrate from.

How it works

  1. List the layers with GET /v1/custom/layers, or read one with GET /v1/custom/layers/{layer}. Note its kind.
  2. Read the items with the route for that kind: zones for zone and cell layers, locations for location layers.
  3. Show each item's datasource.attribution wherever you display results.

Layers are stored in a database that monthly data releases never replace. Every write to a layer or its items raises its revision, which also appears in each item's datasource.raw.revision. Only enabled layers are visible: any other slug answers 404.

Quick start

curl -s "https://api.data.graphitelab.ai/v1/custom/layers?apiKey=$GRAPHITE_API_KEY"
{
  "layers": [
    {
      "slug": "dead_zones",
      "kind": "zone",
      "name": "Dead zones",
      "source_name": "Example Co",
      "enabled": true,
      "requires_attribution": true,
      "attribution": "© Example Co",
      "license": "CC BY 4.0",
      "source_backed": false,
      "revision": 3,
      "item_count": 12,
      "created_at": "2026-11-04T02:09:49.089Z",
      "updated_at": "2026-11-04T02:09:49.089Z"
    }
  ]
}

Columns that are null are left out. The list is ordered by slug and carries item_count but no bbox. Read one layer to get its extent:

curl -s "https://api.data.graphitelab.ai/v1/custom/layers/dead_zones?apiKey=$GRAPHITE_API_KEY"

You can send the key as Authorization: Bearer $GRAPHITE_API_KEY instead. See Authentication. Every request costs 1 rivet.

Endpoints

OperationPath
ListGET /v1/custom/layers
Read oneGET /v1/custom/layers/{layer}

{layer} is a slug: lowercase letters, digits and underscores, 2 to 40 characters (^[a-z0-9_]{2,40}$). Neither route takes other parameters.

Layer members

MemberNotes
slugThe layer's name in URLs.
kindzone, location or cell.
name, description, absence_noteDisplay text. absence_note says what an empty answer means for the layer, so show it to your users.
source_nameWho supplied the data. Default The Graphite Lab.
enabledAlways true for a layer you can read.
requires_attributionWhen true, you must show attribution wherever you display the layer's items.
attribution, license, usage_restriction, source_urlCopied into each item's datasource.
h3_resolution, cell_value_keys, fallback_ringsCell layers only: the H3 resolution (0 to 15), the names of the per-cell integer values (up to 8) and how many neighbouring rings to try when a point's own cell has no data (0 to 3).
revisionRaised by every write to the layer or its items.
item_countNumber of zones, locations or cell zones in the layer.
bbox[west, south, east, north] of the items. Single-layer read only; null when the layer is empty.
created_at, updated_atISO timestamps.

Every item carries the layer's datasource: sourcename (default "The Graphite Lab"), attribution (default "© The Graphite Lab"; another source_name falls back to © <source_name>), the optional license, usage_restriction and url, and raw: {layer, revision}. Surface the attribution wherever you display results.

Public layers

Two layers are maintained by The Graphite Lab and are readable by every key:

Errors and limits

StatusWhen
401Missing or invalid API key.
402Your organization is out of rivets (insufficient_rivets) or has no plan (no_plan).
403Your organization does not have data API access.
404Unknown layer.
429Over 60 requests per minute.
500, 503Unexpected gateway error, or the custom layer store is unavailable or busy. Retry.

Errors use the error shape.

Try in Playground (signed in to your Graphite Lab organization). Signed out, use the paste-your-key widget on the reference page.

On this page