Layers
APIs to visualize spatial data
Layers enable you to visualize, style and interact with your spatial data.
With these APIs, you can upload data, manage layer styling, publish and refresh live data layers.
Retrieve detailed information about a specific layer including data source, styling, and configuration.
Layer
UnauthorizedError
NotFoundError
InternalServerError
GET /api/v2/maps/{map_id}/layers/{layer_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Accept: */*
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
Permanently remove a layer from a map.
This action cannot be undone. The layer and all its data will be permanently removed from the map.
The ID of the map to delete the layer from
The ID of the layer to delete
No Content
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
DELETE /api/v2/maps/{map_id}/layers/{layer_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Accept: */*
No content
Retrieve detailed information about a specific layer group including its layers and configuration.
Layer Group
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
GET /api/v2/maps/{map_id}/layer_groups/{layer_group_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Accept: */*
{
"caption": "text",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"layers": [
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
],
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layer_groups/v13k4Ae9BRjCHHdPP5Fcm6D"
},
"name": "text",
"ordering_key": 1,
"type": "layer_group",
"visibility_interaction": "default"
}
Update layer group properties including name, visibility, and organization settings.
A very interesting group
luCHyMruTQ6ozGk3gPJfEB
Controls how the layer group is displayed in the legend
My Layer Group
Deprecated: use caption
instead.
Controls how the layer group is displayed in the legend. Defaults to "default"
.
LayerGroup
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
POST /api/v2/maps/{map_id}/layer_groups/{layer_group_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 171
{
"caption": "A very interesting group",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"legend_visibility": "hide",
"name": "My Layer Group",
"ordering_key": 1,
"visibility_interaction": "default"
}
{
"caption": "text",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"layers": [
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
],
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layer_groups/v13k4Ae9BRjCHHdPP5Fcm6D"
},
"name": "text",
"ordering_key": 1,
"type": "layer_group",
"visibility_interaction": "default"
}
Permanently remove a layer group and all its contained layers from a map.
This action cannot be undone. The layer group and all its contained layers will be permanently removed from the map.
The ID of the map to delete the layer group from
The ID of the layer group to delete
No Content
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
DELETE /api/v2/maps/{map_id}/layer_groups/{layer_group_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Accept: */*
No content
Retrieve all layers from a map, including uploaded files and connected data sources.
Layers list
UnauthorizedError
NotFoundError
InternalServerError
GET /api/v2/maps/{map_id}/layers HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Accept: */*
[
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
]
Update layer properties including styling, visibility, grouping, and other configuration options.
A very interesting dataset
luCHyMruTQ6ozGk3gPJfEB
luCHyMruTQ6ozGk3gPJfEB
Controls how the layer is displayed in the legend
My Layer
Deprecated: use caption
instead.
Layer list
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
POST /api/v2/maps/{map_id}/layers HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 400
[
{
"caption": "A very interesting dataset",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"layer_group_id": "luCHyMruTQ6ozGk3gPJfEB",
"legend_visibility": "hide",
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "My Layer",
"ordering_key": 1,
"refresh_period": "15 min"
}
]
[
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
]
Retrieve all layer groups from a map to see how layers are organized.
Layers Groups
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
GET /api/v2/maps/{map_id}/layer_groups HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Accept: */*
[
{
"caption": "text",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"layers": [
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
],
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layer_groups/v13k4Ae9BRjCHHdPP5Fcm6D"
},
"name": "text",
"ordering_key": 1,
"type": "layer_group",
"visibility_interaction": "default"
}
]
Update properties for multiple layer groups in a single request for efficient bulk operations.
A very interesting group
luCHyMruTQ6ozGk3gPJfEB
Controls how the layer group is displayed in the legend
My Layer Group
Deprecated: use caption
instead.
Controls how the layer group is displayed in the legend. Defaults to "default"
.
LayerGroup list
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
POST /api/v2/maps/{map_id}/layer_groups HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 173
[
{
"caption": "A very interesting group",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"legend_visibility": "hide",
"name": "My Layer Group",
"ordering_key": 1,
"visibility_interaction": "default"
}
]
[
{
"caption": "text",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"layers": [
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
],
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layer_groups/v13k4Ae9BRjCHHdPP5Fcm6D"
},
"name": "text",
"ordering_key": 1,
"type": "layer_group",
"visibility_interaction": "default"
}
]
Update the visual styling properties of a layer including colors, symbols, and rendering options.
The ID of the map where the layer is located
The ID of the layer to update the style of
The new layer style, specified in Felt Style Language format
Layer
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
POST /api/v2/maps/{map_id}/layers/{layer_id}/update_style HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 12
{
"style": {}
}
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
Copy layers or layer groups to other maps, preserving styling and configuration.
Duplicate Layers Response
UnauthorizedError
UnauthorizedError
NotFoundError
Unprocessable Entity
Unprocessable Entity
InternalServerError
POST /api/v2/duplicate_layers HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 92
[
{
"destination_map_id": "luCHyMruTQ6ozGk3gPJfEB",
"source_layer_id": "luCHyMruTQ6ozGk3gPJfEB"
}
]
{
"layer_groups": [
{
"caption": "text",
"id": "luCHyMruTQ6ozGk3gPJfEB",
"layers": [
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
],
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layer_groups/v13k4Ae9BRjCHHdPP5Fcm6D"
},
"name": "text",
"ordering_key": 1,
"type": "layer_group",
"visibility_interaction": "default"
}
],
"layers": [
{
"caption": "text",
"geometry_type": "Line",
"hide_from_legend": true,
"id": "luCHyMruTQ6ozGk3gPJfEB",
"is_spreadsheet": true,
"legend_visibility": "hide",
"links": {
"self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA"
},
"metadata": {
"attribution_text": "text",
"attribution_url": "text",
"description": "text",
"license": "text",
"source_abbreviation": "text",
"source_name": "text",
"source_url": "text",
"updated_at": "2025-03-24"
},
"name": "text",
"ordering_key": 1,
"progress": 1,
"refresh_period": "15 min",
"status": "uploading",
"style": {},
"tile_url": "text",
"type": "layer"
}
]
}
Was this helpful?