Maps

APIs for building maps

Maps are the centerpiece of Felt.

With these APIs, you can create, retrieve, update, delete, move, and duplicate maps programmatically.

Create map

post

Create a new map with optional customization options.

Several aspects can be customized when creating a new map, including:

  • Title

  • Initial location (latitude, longitude and zoom level)

  • Sharing permissions (defaults to viewing and commenting for users with the map URL)

  • An array of URLs to import on map creation

Authorizations
Body
basemapstringOptional

The basemap to use for the new map. Defaults to "default". Valid values are "default", "light", "dark", "satellite", a valid raster tile URL with {x}, {y}, and {z} parameters, or a hex color string like #ff0000.

descriptionstringOptional

A description to display in the map legend

latnumberOptional

If no data has been uploaded to the map, the initial latitude to center the map display on.

layer_urlsstring[]Optional

An array of urls to use to create layers in the map. Only tile URLs for raster layers are supported at the moment.

lonnumberOptional

If no data has been uploaded to the map, the initial longitude to center the map display on.

public_accessstring · enumOptional

The level of access to grant to the map. Defaults to "view_only".

Possible values:
titlestringOptional

The title to be used for the map. Defaults to "Untitled Map"

workspace_idstringOptional

The workspace to create the map in. Defaults to the latest used workspace

zoomnumberOptional

If no data has been uploaded to the map, the initial zoom level for the map to display.

Responses
200

Map

application/json
post
POST /api/v2/maps HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 149

{
  "basemap": "text",
  "description": "text",
  "lat": 1,
  "layer_urls": [
    "text"
  ],
  "lon": 1,
  "public_access": "private",
  "title": "text",
  "workspace_id": "text",
  "zoom": 1
}
{
  "basemap": "text",
  "created_at": "2024-05-25T15:51:34",
  "element_groups": [
    {
      "elements": {
        "features": [
          {
            "geometry": {
              "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
              "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
            },
            "properties": {},
            "type": "Feature"
          }
        ],
        "type": "FeatureCollection"
      },
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "name": "text"
    }
  ],
  "elements": {
    "features": [
      {
        "geometry": {
          "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
          "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
        },
        "properties": {},
        "type": "Feature"
      }
    ],
    "type": "FeatureCollection"
  },
  "folder_id": "text",
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "layer_groups": [
    {
      "caption": "text",
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "layers": [
        {
          "caption": "text",
          "geometry_type": "Line",
          "hide_from_legend": true,
          "id": "luCHyMruTQ6ozGk3gPJfEB",
          "is_spreadsheet": true,
          "legend_display": "default",
          "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_display": "default",
      "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"
    }
  ],
  "links": {
    "self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC"
  },
  "project_id": "text",
  "public_access": "private",
  "table_settings": {
    "default_table_layer_id": "luCHyMruTQ6ozGk3gPJfEB",
    "viewers_can_open_table": true
  },
  "thumbnail_url": "text",
  "title": "text",
  "type": "map",
  "url": "text",
  "viewer_permissions": {
    "can_duplicate_map": true,
    "can_export_data": true,
    "can_see_map_presence": true
  },
  "visited_at": "text"
}

Move map

post

Move a map to a different project or folder within the same workspace. Project IDs and Folder IDs can be found inside map settings.

Authorizations
Path parameters
map_idstringRequired
Body
one ofOptional
or
Responses
200

Map

application/json
post
POST /api/v2/maps/{map_id}/move HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 39

{
  "project_id": "luCHyMruTQ6ozGk3gPJfEB"
}
{
  "basemap": "text",
  "created_at": "2024-05-25T15:51:34",
  "element_groups": [
    {
      "elements": {
        "features": [
          {
            "geometry": {
              "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
              "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
            },
            "properties": {},
            "type": "Feature"
          }
        ],
        "type": "FeatureCollection"
      },
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "name": "text"
    }
  ],
  "elements": {
    "features": [
      {
        "geometry": {
          "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
          "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
        },
        "properties": {},
        "type": "Feature"
      }
    ],
    "type": "FeatureCollection"
  },
  "folder_id": "text",
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "layer_groups": [
    {
      "caption": "text",
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "layers": [
        {
          "caption": "text",
          "geometry_type": "Line",
          "hide_from_legend": true,
          "id": "luCHyMruTQ6ozGk3gPJfEB",
          "is_spreadsheet": true,
          "legend_display": "default",
          "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_display": "default",
      "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"
    }
  ],
  "links": {
    "self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC"
  },
  "project_id": "text",
  "public_access": "private",
  "table_settings": {
    "default_table_layer_id": "luCHyMruTQ6ozGk3gPJfEB",
    "viewers_can_open_table": true
  },
  "thumbnail_url": "text",
  "title": "text",
  "type": "map",
  "url": "text",
  "viewer_permissions": {
    "can_duplicate_map": true,
    "can_export_data": true,
    "can_see_map_presence": true
  },
  "visited_at": "text"
}

Duplicate map

post

Create a copy of a map with all its layers, elements, and configuration.

Authorizations
Path parameters
map_idstringRequired

The ID of the map to duplicate

Body
destinationone ofOptional
or
titlestringOptional

Title for the duplicated map. If not provided, will default to '[Original Title] (copy)'

Responses
200

Duplicated Map

application/json
post
POST /api/v2/maps/{map_id}/duplicate HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 70

{
  "destination": {
    "project_id": "luCHyMruTQ6ozGk3gPJfEB"
  },
  "title": "text"
}
{
  "basemap": "text",
  "created_at": "2024-05-25T15:51:34",
  "element_groups": [
    {
      "elements": {
        "features": [
          {
            "geometry": {
              "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
              "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
            },
            "properties": {},
            "type": "Feature"
          }
        ],
        "type": "FeatureCollection"
      },
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "name": "text"
    }
  ],
  "elements": {
    "features": [
      {
        "geometry": {
          "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
          "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
        },
        "properties": {},
        "type": "Feature"
      }
    ],
    "type": "FeatureCollection"
  },
  "folder_id": "text",
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "layer_groups": [
    {
      "caption": "text",
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "layers": [
        {
          "caption": "text",
          "geometry_type": "Line",
          "hide_from_legend": true,
          "id": "luCHyMruTQ6ozGk3gPJfEB",
          "is_spreadsheet": true,
          "legend_display": "default",
          "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_display": "default",
      "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"
    }
  ],
  "links": {
    "self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC"
  },
  "project_id": "text",
  "public_access": "private",
  "table_settings": {
    "default_table_layer_id": "luCHyMruTQ6ozGk3gPJfEB",
    "viewers_can_open_table": true
  },
  "thumbnail_url": "text",
  "title": "text",
  "type": "map",
  "url": "text",
  "viewer_permissions": {
    "can_duplicate_map": true,
    "can_export_data": true,
    "can_see_map_presence": true
  },
  "visited_at": "text"
}

Update map

post

Update map properties including title, description, and access permissions.

Authorizations
Path parameters
map_idstringRequired

The ID of the map to update

Body
basemapstringOptional

The basemap to use for the map. Defaults to "default". Valid values are "default", "light", "dark", "satellite", a valid raster tile URL with {x}, {y}, and {z} parameters, or a hex color string like #ff0000.

descriptionstringOptional

A description to display in the map legend

public_accessstring · enumOptional

The level of access to grant to the map. Defaults to "view_only".

Possible values:
titlestringOptional

The new title for the map

Responses
200

Map

application/json
post
POST /api/v2/maps/{map_id}/update HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Accept: */*
Content-Length: 278

{
  "basemap": "text",
  "description": "text",
  "public_access": "private",
  "table_settings": {
    "default_table_layer_id": "luCHyMruTQ6ozGk3gPJfEB",
    "viewers_can_open_table": true
  },
  "title": "text",
  "viewer_permissions": {
    "can_duplicate_map": true,
    "can_export_data": true,
    "can_see_map_presence": true
  }
}
{
  "basemap": "text",
  "created_at": "2024-05-25T15:51:34",
  "element_groups": [
    {
      "elements": {
        "features": [
          {
            "geometry": {
              "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
              "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
            },
            "properties": {},
            "type": "Feature"
          }
        ],
        "type": "FeatureCollection"
      },
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "name": "text"
    }
  ],
  "elements": {
    "features": [
      {
        "geometry": {
          "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
          "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
        },
        "properties": {},
        "type": "Feature"
      }
    ],
    "type": "FeatureCollection"
  },
  "folder_id": "text",
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "layer_groups": [
    {
      "caption": "text",
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "layers": [
        {
          "caption": "text",
          "geometry_type": "Line",
          "hide_from_legend": true,
          "id": "luCHyMruTQ6ozGk3gPJfEB",
          "is_spreadsheet": true,
          "legend_display": "default",
          "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_display": "default",
      "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"
    }
  ],
  "links": {
    "self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC"
  },
  "project_id": "text",
  "public_access": "private",
  "table_settings": {
    "default_table_layer_id": "luCHyMruTQ6ozGk3gPJfEB",
    "viewers_can_open_table": true
  },
  "thumbnail_url": "text",
  "title": "text",
  "type": "map",
  "url": "text",
  "viewer_permissions": {
    "can_duplicate_map": true,
    "can_export_data": true,
    "can_see_map_presence": true
  },
  "visited_at": "text"
}

Get map

get

Retrieve a map with its metadata including title, URL, thumbnail, and timestamps.

Authorizations
Path parameters
map_idstringRequired
Responses
200

Map

application/json
get
GET /api/v2/maps/{map_id} HTTP/1.1
Host: felt.com
Authorization: Bearer YOUR_API_KEY
Accept: */*
{
  "basemap": "text",
  "created_at": "2024-05-25T15:51:34",
  "element_groups": [
    {
      "elements": {
        "features": [
          {
            "geometry": {
              "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
              "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
            },
            "properties": {},
            "type": "Feature"
          }
        ],
        "type": "FeatureCollection"
      },
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "name": "text"
    }
  ],
  "elements": {
    "features": [
      {
        "geometry": {
          "felt:id": "luCHyMruTQ6ozGk3gPJfEB",
          "felt:parentId": "luCHyMruTQ6ozGk3gPJfEB"
        },
        "properties": {},
        "type": "Feature"
      }
    ],
    "type": "FeatureCollection"
  },
  "folder_id": "text",
  "id": "luCHyMruTQ6ozGk3gPJfEB",
  "layer_groups": [
    {
      "caption": "text",
      "id": "luCHyMruTQ6ozGk3gPJfEB",
      "layers": [
        {
          "caption": "text",
          "geometry_type": "Line",
          "hide_from_legend": true,
          "id": "luCHyMruTQ6ozGk3gPJfEB",
          "is_spreadsheet": true,
          "legend_display": "default",
          "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_display": "default",
      "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"
    }
  ],
  "links": {
    "self": "https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC"
  },
  "project_id": "text",
  "public_access": "private",
  "table_settings": {
    "default_table_layer_id": "luCHyMruTQ6ozGk3gPJfEB",
    "viewers_can_open_table": true
  },
  "thumbnail_url": "text",
  "title": "text",
  "type": "map",
  "url": "text",
  "viewer_permissions": {
    "can_duplicate_map": true,
    "can_export_data": true,
    "can_see_map_presence": true
  },
  "visited_at": "text"
}

Delete map

delete

Permanently delete a map and all its associated data.

Authorizations
Path parameters
map_idstringRequired

The ID of the map to delete

Responses
204

No Content

No content

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

No content

Was this helpful?