For the complete documentation index, see llms.txt. This page is also available as Markdown.

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.

Get map layer group

get

Retrieve detailed information about a specific layer group including its layers and configuration.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired
layer_group_idstringRequired
Responses
200

Layer Group

application/json
captionstring · nullableRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
legend_visibilitystring · enum · nullableOptional

Controls how the layer group is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
ordering_keyintegerOptional

A sort order key used for ordering layers and layer groups in the legend

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

typestring · enumRequiredPossible values:
visibility_interactionstring · enumRequired

Controls how the layer group is displayed in the legend. Defaults to "default".

Possible values:
get/api/v2/maps/{map_id}/layer_groups/{layer_group_id}
GET /api/v2/maps/{map_id}/layer_groups/{layer_group_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "caption": "text",
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "layers": [
    {
      "attributes": [
        {
          "name": "text",
          "type": "INTEGER"
        }
      ],
      "caption": "text",
      "geometry_type": "Line",
      "hide_from_legend": true,
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "is_spreadsheet": true,
      "last_refreshed_at": "2026-01-01T00:00:00.000Z",
      "legend_display": "default",
      "legend_visibility": "hide",
      "links": {
        "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
        "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",
      "next_refresh_at": "2026-01-01T00:00:00.000Z",
      "ordering_key": 1,
      "paused_reason": "consecutive_failures",
      "progress": 1,
      "refresh_period": "15 min",
      "refresh_status": "active",
      "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 map layer group

post

Update layer group properties including name, visibility, and organization settings.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired
layer_group_idstringRequired
Body
captionstringOptionalExample: A very interesting group
idstring · felt_idOptionalExample: luCHyMruTQ6ozGk3gPJfEB
legend_visibilitystring · enumOptional

Controls how the layer group is displayed in the legend

Possible values:
namestringOptionalExample: My Layer Group
ordering_keyintegerOptional
subtitlestringOptionalDeprecated

Deprecated: use caption instead.

visibility_interactionstring · enum · nullableOptional

Controls how the layer group is displayed in the legend. Defaults to "default".

Possible values:
Responses
200

LayerGroup

application/json
captionstring · nullableRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
legend_visibilitystring · enum · nullableOptional

Controls how the layer group is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
ordering_keyintegerOptional

A sort order key used for ordering layers and layer groups in the legend

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

typestring · enumRequiredPossible values:
visibility_interactionstring · enumRequired

Controls how the layer group is displayed in the legend. Defaults to "default".

Possible values:
post/api/v2/maps/{map_id}/layer_groups/{layer_group_id}
POST /api/v2/maps/{map_id}/layer_groups/{layer_group_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
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": [
    {
      "attributes": [
        {
          "name": "text",
          "type": "INTEGER"
        }
      ],
      "caption": "text",
      "geometry_type": "Line",
      "hide_from_legend": true,
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "is_spreadsheet": true,
      "last_refreshed_at": "2026-01-01T00:00:00.000Z",
      "legend_display": "default",
      "legend_visibility": "hide",
      "links": {
        "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
        "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",
      "next_refresh_at": "2026-01-01T00:00:00.000Z",
      "ordering_key": 1,
      "paused_reason": "consecutive_failures",
      "progress": 1,
      "refresh_period": "15 min",
      "refresh_status": "active",
      "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"
}

Delete map layer group

delete

Permanently remove a layer group and all its contained layers from a map.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired

The ID of the map to delete the layer group from

layer_group_idstringRequired

The ID of the layer group to delete

Responses
204

No Content

No content

delete/api/v2/maps/{map_id}/layer_groups/{layer_group_id}
DELETE /api/v2/maps/{map_id}/layer_groups/{layer_group_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

List map layers

get

Retrieve all layers from a map, including uploaded files and connected data sources.

Every layer you have created is listed, so a layer whose upload has not finished comes back with "status": "uploading" even though the map does not show it yet — an upload that never arrives can be cleaned up by deleting the layer. Pass include_uploading=false for just the layers the map shows.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired
Query parameters
include_uploadingbooleanOptional

Set to false to leave out the layers whose upload has not finished, matching what the map shows.

Default: true
Responses
200

Layers list

application/json
captionstring · nullableRequired
geometry_typestring · enum · nullableRequiredPossible values:
hide_from_legendbooleanRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
is_spreadsheetboolean · nullableOptional
last_refreshed_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the layer's data was last updated. This includes scheduled refreshes, manual refreshes, and direct feature edits.

legend_displaystring · enum · nullableOptional

Controls how the layer is displayed in the legend.

Possible values:
legend_visibilitystring · enum · nullableOptional

Controls whether or not the layer is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
next_refresh_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the next scheduled refresh will occur. When refresh_period is faster than the workspace plan allows, layers refresh at the plan's fastest rate and this reflects that schedule. Null if refresh is disabled or paused, or the plan doesn't include live layers.

ordering_keyinteger · nullableOptional

A sort order key used for ordering layers and layer groups in the legend

paused_reasonstring · enum · nullableOptional

Why the layer's refresh is paused. Null when not paused.

Possible values:
progressnumber · floatRequired
refresh_periodstring · enumRequired

The saved refresh rate. It can be faster than the plan allows after a downgrade; see next_refresh_at.

Possible values:
refresh_statusstring · enumRequired

Whether scheduled refresh is active, paused (due to failures), or disabled

Possible values:
statusstring · enumRequiredPossible values:
styleobjectRequired

The Felt Style Language style for the layer

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

tile_urlstring · nullableOptional

The tile URL for this layer

typestring · enumRequiredPossible values:
get/api/v2/maps/{map_id}/layers
GET /api/v2/maps/{map_id}/layers HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "attributes": [
      {
        "name": "text",
        "type": "INTEGER"
      }
    ],
    "caption": "text",
    "geometry_type": "Line",
    "hide_from_legend": true,
    "id": "luCHyMruTQ6ozGk3gPJfEB",
    "is_spreadsheet": true,
    "last_refreshed_at": "2026-01-01T00:00:00.000Z",
    "legend_display": "default",
    "legend_visibility": "hide",
    "links": {
      "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
      "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",
    "next_refresh_at": "2026-01-01T00:00:00.000Z",
    "ordering_key": 1,
    "paused_reason": "consecutive_failures",
    "progress": 1,
    "refresh_period": "15 min",
    "refresh_status": "active",
    "status": "uploading",
    "style": {},
    "tile_url": "text",
    "type": "layer"
  }
]

Update map layer

post

Update layer properties including styling, visibility, grouping, and other configuration options.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired
Bodyobject · LayerUpdateParams[]
captionstringOptionalExample: A very interesting dataset
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
layer_group_idstring · felt_id · nullableOptionalExample: luCHyMruTQ6ozGk3gPJfEB
legend_displaystring · enumOptional

Controls how the layer is displayed in the legend.

Possible values:
legend_visibilitystring · enumOptional

Controls whether or not the layer is displayed in the legend.

Possible values:
namestringOptionalExample: My Layer
ordering_keyintegerOptional
refresh_periodstring · enumOptional

How often the layer refreshes. Rates faster than the workspace plan allows return a 422.

Possible values:
subtitlestringOptionalDeprecated

Deprecated: use caption instead.

Responses
200

Layer list

application/json
captionstring · nullableRequired
geometry_typestring · enum · nullableRequiredPossible values:
hide_from_legendbooleanRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
is_spreadsheetboolean · nullableOptional
last_refreshed_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the layer's data was last updated. This includes scheduled refreshes, manual refreshes, and direct feature edits.

legend_displaystring · enum · nullableOptional

Controls how the layer is displayed in the legend.

Possible values:
legend_visibilitystring · enum · nullableOptional

Controls whether or not the layer is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
next_refresh_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the next scheduled refresh will occur. When refresh_period is faster than the workspace plan allows, layers refresh at the plan's fastest rate and this reflects that schedule. Null if refresh is disabled or paused, or the plan doesn't include live layers.

ordering_keyinteger · nullableOptional

A sort order key used for ordering layers and layer groups in the legend

paused_reasonstring · enum · nullableOptional

Why the layer's refresh is paused. Null when not paused.

Possible values:
progressnumber · floatRequired
refresh_periodstring · enumRequired

The saved refresh rate. It can be faster than the plan allows after a downgrade; see next_refresh_at.

Possible values:
refresh_statusstring · enumRequired

Whether scheduled refresh is active, paused (due to failures), or disabled

Possible values:
statusstring · enumRequiredPossible values:
styleobjectRequired

The Felt Style Language style for the layer

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

tile_urlstring · nullableOptional

The tile URL for this layer

typestring · enumRequiredPossible values:
post/api/v2/maps/{map_id}/layers
POST /api/v2/maps/{map_id}/layers HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 427

[
  {
    "caption": "A very interesting dataset",
    "id": "luCHyMruTQ6ozGk3gPJfEB",
    "layer_group_id": "luCHyMruTQ6ozGk3gPJfEB",
    "legend_display": "default",
    "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"
  }
]
[
  {
    "attributes": [
      {
        "name": "text",
        "type": "INTEGER"
      }
    ],
    "caption": "text",
    "geometry_type": "Line",
    "hide_from_legend": true,
    "id": "luCHyMruTQ6ozGk3gPJfEB",
    "is_spreadsheet": true,
    "last_refreshed_at": "2026-01-01T00:00:00.000Z",
    "legend_display": "default",
    "legend_visibility": "hide",
    "links": {
      "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
      "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",
    "next_refresh_at": "2026-01-01T00:00:00.000Z",
    "ordering_key": 1,
    "paused_reason": "consecutive_failures",
    "progress": 1,
    "refresh_period": "15 min",
    "refresh_status": "active",
    "status": "uploading",
    "style": {},
    "tile_url": "text",
    "type": "layer"
  }
]

List map layer groups

get

Retrieve all layer groups from a map to see how layers are organized.

Every layer group you have created is listed, including one whose upload has not finished and which the map does not show yet. Pass include_uploading=false for just the layer groups the map shows.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired
Query parameters
include_uploadingbooleanOptional

Set to false to leave out the layer groups whose upload has not finished, matching what the map shows.

Default: true
Responses
200

Layers Groups

application/json
captionstring · nullableRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
legend_visibilitystring · enum · nullableOptional

Controls how the layer group is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
ordering_keyintegerOptional

A sort order key used for ordering layers and layer groups in the legend

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

typestring · enumRequiredPossible values:
visibility_interactionstring · enumRequired

Controls how the layer group is displayed in the legend. Defaults to "default".

Possible values:
get/api/v2/maps/{map_id}/layer_groups
GET /api/v2/maps/{map_id}/layer_groups HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
[
  {
    "caption": "text",
    "id": "luCHyMruTQ6ozGk3gPJfEB",
    "layers": [
      {
        "attributes": [
          {
            "name": "text",
            "type": "INTEGER"
          }
        ],
        "caption": "text",
        "geometry_type": "Line",
        "hide_from_legend": true,
        "id": "luCHyMruTQ6ozGk3gPJfEB",
        "is_spreadsheet": true,
        "last_refreshed_at": "2026-01-01T00:00:00.000Z",
        "legend_display": "default",
        "legend_visibility": "hide",
        "links": {
          "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
          "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",
        "next_refresh_at": "2026-01-01T00:00:00.000Z",
        "ordering_key": 1,
        "paused_reason": "consecutive_failures",
        "progress": 1,
        "refresh_period": "15 min",
        "refresh_status": "active",
        "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 map layer groups

post

Update properties for multiple layer groups in a single request for efficient bulk operations.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired
Bodyobject · LayerGroupParams[]
captionstringOptionalExample: A very interesting group
idstring · felt_idOptionalExample: luCHyMruTQ6ozGk3gPJfEB
legend_visibilitystring · enumOptional

Controls how the layer group is displayed in the legend

Possible values:
namestringRequiredExample: My Layer Group
ordering_keyintegerOptional
subtitlestringOptionalDeprecated

Deprecated: use caption instead.

visibility_interactionstring · enum · nullableOptional

Controls how the layer group is displayed in the legend. Defaults to "default".

Possible values:
Responses
200

LayerGroup list

application/json
captionstring · nullableRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
legend_visibilitystring · enum · nullableOptional

Controls how the layer group is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
ordering_keyintegerOptional

A sort order key used for ordering layers and layer groups in the legend

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

typestring · enumRequiredPossible values:
visibility_interactionstring · enumRequired

Controls how the layer group is displayed in the legend. Defaults to "default".

Possible values:
post/api/v2/maps/{map_id}/layer_groups
POST /api/v2/maps/{map_id}/layer_groups HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
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": [
      {
        "attributes": [
          {
            "name": "text",
            "type": "INTEGER"
          }
        ],
        "caption": "text",
        "geometry_type": "Line",
        "hide_from_legend": true,
        "id": "luCHyMruTQ6ozGk3gPJfEB",
        "is_spreadsheet": true,
        "last_refreshed_at": "2026-01-01T00:00:00.000Z",
        "legend_display": "default",
        "legend_visibility": "hide",
        "links": {
          "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
          "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",
        "next_refresh_at": "2026-01-01T00:00:00.000Z",
        "ordering_key": 1,
        "paused_reason": "consecutive_failures",
        "progress": 1,
        "refresh_period": "15 min",
        "refresh_status": "active",
        "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 style

post

Update the visual styling properties of a layer including colors, symbols, and rendering options.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired

The ID of the map where the layer is located

layer_idstringRequired

The ID of the layer to update the style of

Body
styleobjectRequired

The new layer style, specified in Felt Style Language format

Responses
200

Layer

application/json
captionstring · nullableRequired
geometry_typestring · enum · nullableRequiredPossible values:
hide_from_legendbooleanRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
is_spreadsheetboolean · nullableOptional
last_refreshed_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the layer's data was last updated. This includes scheduled refreshes, manual refreshes, and direct feature edits.

legend_displaystring · enum · nullableOptional

Controls how the layer is displayed in the legend.

Possible values:
legend_visibilitystring · enum · nullableOptional

Controls whether or not the layer is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
next_refresh_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the next scheduled refresh will occur. When refresh_period is faster than the workspace plan allows, layers refresh at the plan's fastest rate and this reflects that schedule. Null if refresh is disabled or paused, or the plan doesn't include live layers.

ordering_keyinteger · nullableOptional

A sort order key used for ordering layers and layer groups in the legend

paused_reasonstring · enum · nullableOptional

Why the layer's refresh is paused. Null when not paused.

Possible values:
progressnumber · floatRequired
refresh_periodstring · enumRequired

The saved refresh rate. It can be faster than the plan allows after a downgrade; see next_refresh_at.

Possible values:
refresh_statusstring · enumRequired

Whether scheduled refresh is active, paused (due to failures), or disabled

Possible values:
statusstring · enumRequiredPossible values:
styleobjectRequired

The Felt Style Language style for the layer

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

tile_urlstring · nullableOptional

The tile URL for this layer

typestring · enumRequiredPossible values:
post/api/v2/maps/{map_id}/layers/{layer_id}/update_style
POST /api/v2/maps/{map_id}/layers/{layer_id}/update_style HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 12

{
  "style": {}
}
{
  "attributes": [
    {
      "name": "text",
      "type": "INTEGER"
    }
  ],
  "caption": "text",
  "geometry_type": "Line",
  "hide_from_legend": true,
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "is_spreadsheet": true,
  "last_refreshed_at": "2026-01-01T00:00:00.000Z",
  "legend_display": "default",
  "legend_visibility": "hide",
  "links": {
    "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
    "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",
  "next_refresh_at": "2026-01-01T00:00:00.000Z",
  "ordering_key": 1,
  "paused_reason": "consecutive_failures",
  "progress": 1,
  "refresh_period": "15 min",
  "refresh_status": "active",
  "status": "uploading",
  "style": {},
  "tile_url": "text",
  "type": "layer"
}

Get map layer

get

Retrieve detailed information about a specific layer including data source, styling, and configuration.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired
layer_idstringRequired
Responses
200

Layer

application/json
captionstring · nullableRequired
geometry_typestring · enum · nullableRequiredPossible values:
hide_from_legendbooleanRequired
idstring · felt_idRequiredExample: luCHyMruTQ6ozGk3gPJfEB
is_spreadsheetboolean · nullableOptional
last_refreshed_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the layer's data was last updated. This includes scheduled refreshes, manual refreshes, and direct feature edits.

legend_displaystring · enum · nullableOptional

Controls how the layer is displayed in the legend.

Possible values:
legend_visibilitystring · enum · nullableOptional

Controls whether or not the layer is displayed in the legend. Defaults to "show".

Possible values:
namestringRequired
next_refresh_atstring · date-time · nullableOptional

ISO 8601 timestamp of when the next scheduled refresh will occur. When refresh_period is faster than the workspace plan allows, layers refresh at the plan's fastest rate and this reflects that schedule. Null if refresh is disabled or paused, or the plan doesn't include live layers.

ordering_keyinteger · nullableOptional

A sort order key used for ordering layers and layer groups in the legend

paused_reasonstring · enum · nullableOptional

Why the layer's refresh is paused. Null when not paused.

Possible values:
progressnumber · floatRequired
refresh_periodstring · enumRequired

The saved refresh rate. It can be faster than the plan allows after a downgrade; see next_refresh_at.

Possible values:
refresh_statusstring · enumRequired

Whether scheduled refresh is active, paused (due to failures), or disabled

Possible values:
statusstring · enumRequiredPossible values:
styleobjectRequired

The Felt Style Language style for the layer

subtitlestring · nullableOptionalDeprecated

Deprecated: use caption instead.

tile_urlstring · nullableOptional

The tile URL for this layer

typestring · enumRequiredPossible values:
get/api/v2/maps/{map_id}/layers/{layer_id}
GET /api/v2/maps/{map_id}/layers/{layer_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*
{
  "attributes": [
    {
      "name": "text",
      "type": "INTEGER"
    }
  ],
  "caption": "text",
  "geometry_type": "Line",
  "hide_from_legend": true,
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "is_spreadsheet": true,
  "last_refreshed_at": "2026-01-01T00:00:00.000Z",
  "legend_display": "default",
  "legend_visibility": "hide",
  "links": {
    "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
    "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",
  "next_refresh_at": "2026-01-01T00:00:00.000Z",
  "ordering_key": 1,
  "paused_reason": "consecutive_failures",
  "progress": 1,
  "refresh_period": "15 min",
  "refresh_status": "active",
  "status": "uploading",
  "style": {},
  "tile_url": "text",
  "type": "layer"
}

Delete map layer

delete

Permanently remove a layer from a map.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Path parameters
map_idstringRequired

The ID of the map to delete the layer from

layer_idstringRequired

The ID of the layer to delete

Responses
204

No Content

No content

delete/api/v2/maps/{map_id}/layers/{layer_id}
DELETE /api/v2/maps/{map_id}/layers/{layer_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Accept: */*

No content

Duplicate map layers

post

Copy layers or layer groups to other maps, preserving styling and configuration.

Authorizations
AuthorizationstringRequired
Bearer authentication header of the form Bearer <token>.
Bodyone of[]
or
Responses
200

Duplicate Layers Response

application/json
post/api/v2/duplicate_layers
POST /api/v2/duplicate_layers HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_SECRET_TOKEN
Content-Type: application/json
Accept: */*
Content-Length: 92

[
  {
    "destination_map_id": "luCHyMruTQ6ozGk3gPJfEB",
    "source_layer_id": "luCHyMruTQ6ozGk3gPJfEB"
  }
]
{
  "layer_groups": [
    {
      "caption": "text",
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "layers": [
        {
          "attributes": [
            {
              "name": "text",
              "type": "INTEGER"
            }
          ],
          "caption": "text",
          "geometry_type": "Line",
          "hide_from_legend": true,
          "id": "luCHyMruTQ6ozGk3gPJfEB",
          "is_spreadsheet": true,
          "last_refreshed_at": "2026-01-01T00:00:00.000Z",
          "legend_display": "default",
          "legend_visibility": "hide",
          "links": {
            "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
            "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",
          "next_refresh_at": "2026-01-01T00:00:00.000Z",
          "ordering_key": 1,
          "paused_reason": "consecutive_failures",
          "progress": 1,
          "refresh_period": "15 min",
          "refresh_status": "active",
          "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": [
    {
      "attributes": [
        {
          "name": "text",
          "type": "INTEGER"
        }
      ],
      "caption": "text",
      "geometry_type": "Line",
      "hide_from_legend": true,
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "is_spreadsheet": true,
      "last_refreshed_at": "2026-01-01T00:00:00.000Z",
      "legend_display": "default",
      "legend_visibility": "hide",
      "links": {
        "components": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components",
        "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",
      "next_refresh_at": "2026-01-01T00:00:00.000Z",
      "ordering_key": 1,
      "paused_reason": "consecutive_failures",
      "progress": 1,
      "refresh_period": "15 min",
      "refresh_status": "active",
      "status": "uploading",
      "style": {},
      "tile_url": "text",
      "type": "layer"
    }
  ]
}

Last updated

Was this helpful?