Custom layers

Get one custom layer

GET
/custom/layers/{layer}

Returns the layer with its item_count and bbox (the extent of its items, null when it is empty). An unknown layer is 404.

This is our own API, not Geoapify-compatible. Every request costs 1 rivet.

Authorization

queryapiKey<token>

Your API key from the dashboard, sent as ?apiKey=<key>.

Path Parameters

layer*string

Layer slug: lowercase letters, digits and underscores, 2 to 40 characters (^[a-z0-9_]{2,40}$).

Match^[a-z0-9_]{2,40}$

Response Body

The layer.

application/json
  1. response

A custom layer. Columns that are null are omitted from the output.

slug*string
Match^[a-z][a-z0-9_]{1,39}$
kind*string

zone holds polygons, location holds points, cell holds H3 cell sets. Immutable.

Value in"zone""location""cell"
name*string
Lengthlength <= 200
description?string
Lengthlength <= 2000
source_name*string

Default "The Graphite Lab".

Lengthlength <= 200
enabled*boolean

Always true here: disabled layers are not visible.

requires_attribution*boolean
attribution?string
Lengthlength <= 500
license?string
Lengthlength <= 200
usage_restriction?string
Lengthlength <= 500
source_url?string
absence_note?string
Lengthlength <= 1000
source_backed*boolean
tile_minzoom*integer
Range0 <= value <= 22
tile_maxzoom*integer
Range0 <= value <= 22
raw_minzoom*integer
Range0 <= value <= 22
overviews*string

Always off for a cell layer.

Value in"auto""off"
metric_keys?array<string>
Itemsitems <= 50
weight_key?string
h3_resolution?integer

Cell layers only. Immutable.

Range0 <= value <= 15
cells_compacted?boolean

Cell layers only. 0 to 3. When the point's own cell has no zone, rings 1..N are tried and the nearest ring with a hit wins.

cell_value_keys?array<string>

Cell layers only. Names of the per-cell integer values.

Itemsitems <= 8
fallback_rings?integer

Cell layers only.

Range0 <= value <= 3
revision*integer

Bumped by every write to the layer or its items.

item_count*integer
overviews_status*
bbox?array<number>|

[west, south, east, north] of the items. Only on GET /custom/layers/{layer}; null when the layer is empty.

Items4 <= items <= 4
created_at*string
Formatdate-time
updated_at*string
Formatdate-time
Example Request
curl -X GET 'https://api.data.graphitelab.ai/v1/custom/layers/dead_zones'
Example Response
{  "slug": "zz_docs_layer",  "kind": "zone",  "name": "Docs demo layer",  "description": "A demo zone layer created by the docs check.",  "source_name": "Example Co",  "enabled": false,  "requires_attribution": true,  "attribution": "© Example Co",  "license": "CC BY 4.0",  "source_backed": false,  "tile_minzoom": 0,  "tile_maxzoom": 16,  "raw_minzoom": 12,  "overviews": "auto",  "fallback_rings": 0,  "revision": 1,  "item_count": 0,  "overviews_status": {    "status": "none",    "built_at": null  },  "created_at": "2026-11-04T02:37:47.628Z",  "updated_at": "2026-11-04T02:37:47.628Z"}