Properties
| Name | Type | Description |
|---|---|---|
| attributes | array | List of the attributes on the layer |
| caption | string | |
| geometry_type | string | |
| hide_from_legend | boolean | |
| id | object | |
| is_spreadsheet | boolean | |
| last_refreshed_at | string | ISO 8601 timestamp of when the layer's data was last updated. This includes scheduled refreshes, manual refreshes, and direct feature edits. |
| legend_display | string | Controls how the layer is displayed in the legend. |
| legend_visibility | string | Controls whether or not the layer is displayed in the legend. Defaults to "show". |
| links | object | |
| metadata | object | |
| name | string | |
| next_refresh_at | string | ISO 8601 timestamp of when the next scheduled refresh will occur. Null if refresh is disabled or paused. |
| ordering_key | integer | A sort order key used for ordering layers and layer groups in the legend |
| paused_reason | string | Why the layer's refresh is paused. Null when not paused. |
| progress | number | |
| refresh_period | string | |
| refresh_status | string | Whether scheduled refresh is active, paused (due to failures), or disabled |
| status | string | |
| style | object | The Felt Style Language style for the layer |
| subtitle | string | Deprecated: use `caption` instead. |
| tile_url | string | The tile URL for this layer |
| type | string |
JSON Schema
{
"$schema": "http://json-schema.org/draft-07/schema#",
"title": "Layer",
"additionalProperties": false,
"properties": {
"attributes": {
"description": "List of the attributes on the layer",
"items": {
"properties": {
"name": {
"description": "The name of the attribute",
"type": "string"
},
"type": {
"description": "The type of the attribute",
"enum": [
"INTEGER",
"REAL",
"TEXT",
"BOOLEAN",
"DATE",
"DATETIME",
"GEOMETRY"
],
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"nullable": true,
"type": "array"
},
"caption": {
"nullable": true,
"type": "string"
},
"geometry_type": {
"enum": [
"Line",
"Point",
"Polygon",
"Raster"
],
"nullable": true,
"type": "string"
},
"hide_from_legend": {
"nullable": false,
"type": "boolean"
},
"id": {
"$ref": "#/components/schemas/FeltID"
},
"is_spreadsheet": {
"nullable": true,
"type": "boolean"
},
"last_refreshed_at": {
"description": "ISO 8601 timestamp of when the layer's data was last updated. This includes scheduled refreshes, manual refreshes, and direct feature edits.",
"format": "date-time",
"nullable": true,
"type": "string"
},
"legend_display": {
"description": "Controls how the layer is displayed in the legend.",
"enum": [
"default",
"name_only"
],
"nullable": true,
"type": "string"
},
"legend_visibility": {
"description": "Controls whether or not the layer is displayed in the legend. Defaults to \"show\".",
"enum": [
"hide",
"show"
],
"nullable": true,
"type": "string"
},
"links": {
"properties": {
"self": {
"example": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA",
"type": "string"
}
},
"type": "object"
},
"metadata": {
"$ref": "#/components/schemas/LayerMetadata"
},
"name": {
"nullable": false,
"type": "string"
},
"next_refresh_at": {
"description": "ISO 8601 timestamp of when the next scheduled refresh will occur. Null if refresh is disabled or paused.",
"format": "date-time",
"nullable": true,
"type": "string"
},
"ordering_key": {
"description": "A sort order key used for ordering layers and layer groups in the legend",
"nullable": true,
"type": "integer"
},
"paused_reason": {
"description": "Why the layer's refresh is paused. Null when not paused.",
"enum": [
"consecutive_failures"
],
"nullable": true,
"type": "string"
},
"progress": {
"format": "float",
"nullable": false,
"type": "number"
},
"refresh_period": {
"enum": [
"15 min",
"30 min",
"hour",
"3 hours",
"6 hours",
"12 hours",
"day",
"week",
"month",
"disabled"
],
"type": "string"
},
"refresh_status": {
"description": "Whether scheduled refresh is active, paused (due to failures), or disabled",
"enum": [
"active",
"paused",
"disabled"
],
"type": "string"
},
"status": {
"enum": [
"uploading",
"processing",
"failed",
"completed"
],
"nullable": false,
"type": "string"
},
"style": {
"description": "The Felt Style Language style for the layer",
"type": "object"
},
"subtitle": {
"deprecated": true,
"description": "Deprecated: use `caption` instead.",
"nullable": true,
"type": "string"
},
"tile_url": {
"description": "The tile URL for this layer",
"nullable": true,
"type": "string"
},
"type": {
"enum": [
"layer"
],
"type": "string"
}
},
"required": [
"id",
"type",
"hide_from_legend",
"status",
"caption",
"name",
"progress",
"geometry_type",
"style",
"refresh_period",
"refresh_status"
],
"type": "object"
}
Work with this as data
Every JSON Schema here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for schemas
4 MCP tools reach this
find_json_schemasBrowse and filter every JSON Schema in the catalog.apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.resolveTurn a domain, URL or GitHub org into the provider it belongs to.find_cohortsEvery scored population of providers in the catalog.
Call it yourself
curl for this page
This JSON Schema
curl "https://apis.io/api/v1/json-schemas/felt-layer"
All schemas
curl "https://apis.io/api/v1/json-schemas?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.
A second provider on the same verified email joins the account you already have.