{"components":{"responses":{},"schemas":{"User":{"properties":{"email":{"type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"}},"title":"User","type":"object"},"LayerComponent":{"anyOf":[{"additionalProperties":false,"description":"Summarizes the layer into a single statistic, such as a feature count or an attribute average.","properties":{"config":{"additionalProperties":false,"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"required":["reactive","viewport_mode"],"type":"object"},"data":{"anyOf":[{"additionalProperties":false,"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."}},"required":["aggregate"],"title":"Feature count","type":"object"},{"additionalProperties":false,"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."}},"required":["aggregate","aggregate_by"],"title":"Aggregate","type":"object"}]},"id":{"description":"Server-assigned component id.","type":"string"},"layer_id":{"description":"The layer this component is bound to.","type":"string"},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["statistic"],"type":"string"}},"required":["type","data","config","id","layer_id"],"title":"Statistic","type":"object"},{"additionalProperties":false,"description":"Shows the distribution of a numeric attribute's values across bins.","properties":{"config":{"additionalProperties":false,"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"required":["reactive","viewport_mode"],"type":"object"},"data":{"anyOf":[{"additionalProperties":false,"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Numeric attribute to bin into the distribution.","type":"string"},"grouping":{"additionalProperties":false,"description":"How the attribute's values are binned.","properties":{"steps":{"additionalProperties":false,"properties":{"count":{"description":"Number of equal-width bins across the attribute's range.","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["equal-intervals"],"type":"string"}},"required":["type","count"],"type":"object"},"type":{"enum":["numeric"],"type":"string"}},"required":["type","steps"],"type":"object"}},"required":["aggregate","group_by","grouping"],"title":"Feature count","type":"object"},{"additionalProperties":false,"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Numeric attribute to bin into the distribution.","type":"string"},"grouping":{"additionalProperties":false,"description":"How the attribute's values are binned.","properties":{"steps":{"additionalProperties":false,"properties":{"count":{"description":"Number of equal-width bins across the attribute's range.","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["equal-intervals"],"type":"string"}},"required":["type","count"],"type":"object"},"type":{"enum":["numeric"],"type":"string"}},"required":["type","steps"],"type":"object"}},"required":["aggregate","aggregate_by","group_by","grouping"],"title":"Aggregate","type":"object"}]},"id":{"description":"Server-assigned component id.","type":"string"},"layer_id":{"description":"The layer this component is bound to.","type":"string"},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["histogram"],"type":"string"}},"required":["type","data","config","id","layer_id"],"title":"Histogram","type":"object"},{"additionalProperties":false,"description":"Shows the categories of an attribute as a bar chart.","properties":{"config":{"additionalProperties":false,"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"required":["reactive","viewport_mode"],"type":"object"},"data":{"anyOf":[{"additionalProperties":false,"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Attribute whose values become the categories.","type":"string"}},"required":["aggregate","group_by"],"title":"Feature count","type":"object"},{"additionalProperties":false,"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Attribute whose values become the categories.","type":"string"}},"required":["aggregate","aggregate_by","group_by"],"title":"Aggregate","type":"object"}]},"id":{"description":"Server-assigned component id.","type":"string"},"layer_id":{"description":"The layer this component is bound to.","type":"string"},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["bar_chart"],"type":"string"}},"required":["type","data","config","id","layer_id"],"title":"Bar chart","type":"object"},{"additionalProperties":false,"description":"Charts a statistic over time buckets of a date attribute.","properties":{"config":{"additionalProperties":false,"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"required":["reactive","viewport_mode"],"type":"object"},"data":{"anyOf":[{"additionalProperties":false,"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Date or datetime attribute which drives the time axis.","type":"string"},"grouping":{"additionalProperties":false,"description":"Time bucket per data point.","properties":{"interval":{"enum":["hour","day","week","month","year"],"type":"string"},"type":{"enum":["time-interval"],"type":"string"}},"required":["type","interval"],"type":"object"}},"required":["aggregate","group_by","grouping"],"title":"Feature count","type":"object"},{"additionalProperties":false,"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Date or datetime attribute which drives the time axis.","type":"string"},"grouping":{"additionalProperties":false,"description":"Time bucket per data point.","properties":{"interval":{"enum":["hour","day","week","month","year"],"type":"string"},"type":{"enum":["time-interval"],"type":"string"}},"required":["type","interval"],"type":"object"}},"required":["aggregate","aggregate_by","group_by","grouping"],"title":"Aggregate","type":"object"}]},"id":{"description":"Server-assigned component id.","type":"string"},"layer_id":{"description":"The layer this component is bound to.","type":"string"},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["time_series"],"type":"string"}},"required":["type","data","config","id","layer_id"],"title":"Time series","type":"object"},{"additionalProperties":false,"description":"An interactive dropdown or slider for filtering the layer by an attribute's values.","properties":{"config":{"additionalProperties":false,"default":{"control_type":"dropdown"},"description":"Component configuration.","properties":{"control_type":{"default":"dropdown","description":"The type of rendered interactive component. `slider` only works with numeric attributes.","enum":["dropdown","slider"],"type":"string"},"plurality":{"description":"Whether the `dropdown` allows filtering on multiple values or just one.","enum":["single","multiple"],"type":"string"},"selection":{"description":"Selected values of `data.filter_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"sorting":{"description":"The rendered order of `dropdown` options.","enum":["Alphabetically","By feature count"],"type":"string"}},"required":["control_type"],"type":"object"},"data":{"additionalProperties":false,"properties":{"filter_by":{"description":"Attribute to filter values from.","type":"string"}},"required":["filter_by"],"type":"object"},"id":{"description":"Server-assigned component id.","type":"string"},"layer_id":{"description":"The layer this component is bound to.","type":"string"},"title":{"description":"Display title. Defaults to the attribute name.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["filter"],"type":"string"}},"required":["type","data","config","id","layer_id"],"title":"Filter","type":"object"}],"title":"LayerComponent"},"SourcePermissions":{"oneOf":[{"additionalProperties":false,"properties":{"type":{"enum":["workspace_editors"],"type":"string"}},"required":["type"],"title":"SourcePermissions-WorkspaceEditors","type":"object"},{"additionalProperties":false,"properties":{"type":{"enum":["source_owner"],"type":"string"}},"required":["type"],"title":"SourcePermissions-SourceOwner","type":"object"},{"additionalProperties":false,"properties":{"project_ids":{"items":{"$ref":"#/components/schemas/FeltID"},"type":"array"},"type":{"enum":["project_editors"],"type":"string"}},"required":["type","project_ids"],"title":"SourcePermissions-ProjectEditors","type":"object"}],"title":"SourcePermissions"},"SourceCredential-CustomHeaders":{"additionalProperties":false,"description":"Authenticate to an API using headers","properties":{"headers":{"items":{"properties":{"name":{"description":"The header name","type":"string"},"sensitive":{"description":"Whether or not the header is sensitive. If it is marked as sensitive, then `felt:redacted` will be returned when viewing this header","type":"boolean"},"value":{"description":"The header value","type":"string"}},"required":["name","value","sensitive"],"type":"object"},"type":"array"},"type":{"enum":["custom_headers"],"type":"string"}},"required":["type","headers"],"title":"SourceCredential-CustomHeaders","type":"object"},"LayerGroupParams":{"additionalProperties":false,"properties":{"caption":{"example":"A very interesting group","type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"legend_visibility":{"description":"Controls how the layer group is displayed in the legend","enum":["hide","show"],"type":"string"},"name":{"example":"My Layer Group","type":"string"},"ordering_key":{"type":"integer"},"subtitle":{"deprecated":true,"description":"Deprecated: use `caption` instead.","type":"string"},"visibility_interaction":{"description":"Controls how the layer group is displayed in the legend. Defaults to `\"default\"`.","enum":["default","slider","select","multi_select"],"nullable":true,"type":"string"}},"required":["name"],"title":"LayerGroupParams","type":"object"},"ElementGroupParamsList":{"items":{"$ref":"#/components/schemas/ElementGroupParams"},"title":"ElementGroupParamsList","type":"array"},"SourceConnection-Databricks":{"additionalProperties":false,"properties":{"catalog":{"nullable":true,"type":"string"},"credentials":{"items":{"properties":{"created_at":{"nullable":true,"type":"integer"},"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-OAuthM2M"},{"$ref":"#/components/schemas/SourceCredential-DatabricksPAT"}],"type":"object"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"updated_at":{"nullable":true,"type":"integer"},"use_case":{"enum":["source_authentication"],"type":"string"}},"type":"object"},"type":"array"},"http_path":{"type":"string"},"schema":{"nullable":true,"type":"string"},"server_hostname":{"type":"string"},"type":{"enum":["databricks"],"type":"string"}},"title":"SourceConnection-Databricks","type":"object"},"UploadLayerParams":{"properties":{"hints":{"description":"A list of hints for interpreting the data in the upload.","items":{"$ref":"#/components/schemas/UploadInterpretationHint"},"type":"array"},"import_url":{"description":"A public URL containing geodata to import, in place of uploading a file.","type":"string"},"lat":{"description":"(Image uploads only) The latitude of the image center.","type":"number"},"lng":{"description":"(Image uploads only) The longitude of the image center.","type":"number"},"metadata":{"$ref":"#/components/schemas/LayerMetadata"},"name":{"description":"The display name for the new layer.","type":"string"},"zoom":{"description":"(Image uploads only) The zoom level of the image.","type":"number"}},"required":["name"],"title":"UploadLayerParams","type":"object"},"ExportLink":{"additionalProperties":false,"properties":{"export_link":{"nullable":false,"type":"string"}},"required":["export_link"],"title":"ExportLink","type":"object"},"Map":{"additionalProperties":false,"properties":{"basemap":{"type":"string"},"created_at":{"example":"2024-05-25T15:51:34","format":"date_time","type":"string"},"element_groups":{"items":{"properties":{"elements":{"$ref":"#/components/schemas/GeoJSON"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"nullable":true,"type":"string"}},"type":"object"},"type":"array"},"elements":{"$ref":"#/components/schemas/GeoJSON"},"folder_id":{"nullable":true,"type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"layer_groups":{"items":{"$ref":"#/components/schemas/LayerGroup"},"type":"array"},"layers":{"items":{"$ref":"#/components/schemas/Layer"},"type":"array"},"links":{"properties":{"self":{"example":"https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC","type":"string"}},"type":"object"},"project_id":{"nullable":false,"type":"string"},"public_access":{"enum":["private","view_only","view_and_comment","view_comment_and_edit"],"type":"string"},"table_settings":{"$ref":"#/components/schemas/MapTableSettings"},"thumbnail_url":{"description":"A static thumbnail image of the map","nullable":true,"type":"string"},"title":{"type":"string"},"type":{"enum":["map"],"type":"string"},"url":{"type":"string"},"viewer_permissions":{"$ref":"#/components/schemas/MapViewerPermissions"},"visited_at":{"format":"date_time","nullable":true,"type":"string"}},"required":["id","type","url","title","thumbnail_url","created_at","visited_at","layers","layer_groups","elements","element_groups","project_id","public_access"],"title":"Map","type":"object"},"LayerList":{"items":{"$ref":"#/components/schemas/Layer"},"title":"LayerList","type":"array"},"SourceCredential-GcpServiceAccountJson":{"additionalProperties":false,"properties":{"service_account_filename":{"type":"string"},"service_account_json":{"oneOf":[{"type":"object"},{"type":"string"}]},"type":{"enum":["gcp_service_account_json"],"type":"string"}},"required":["type","service_account_filename","service_account_json"],"title":"SourceCredential-GcpServiceAccountJson","type":"object"},"DuplicateLayersParams":{"items":{"oneOf":[{"properties":{"destination_map_id":{"$ref":"#/components/schemas/FeltID"},"source_layer_id":{"$ref":"#/components/schemas/FeltID"}},"required":["source_layer_id","destination_map_id"],"title":"DuplicateLayersParams-Layer","type":"object"},{"properties":{"destination_map_id":{"$ref":"#/components/schemas/FeltID"},"source_layer_group_id":{"$ref":"#/components/schemas/FeltID"}},"required":["source_layer_group_id","destination_map_id"],"title":"DuplicateLayersParams-LayerGroup","type":"object"}]},"title":"DuplicateLayersParams","type":"array"},"ProjectReferenceList":{"items":{"$ref":"#/components/schemas/ProjectReference"},"title":"ProjectReferenceList","type":"array"},"MapMoveParams":{"oneOf":[{"properties":{"project_id":{"$ref":"#/components/schemas/FeltID"}},"required":["project_id"],"title":"MoveMapProjectParams","type":"object"},{"properties":{"folder_id":{"$ref":"#/components/schemas/FeltID"}},"required":["folder_id"],"title":"MoveMapFolderParams","type":"object"}],"title":"MapMoveParams","type":"object"},"LayerGroupList":{"items":{"$ref":"#/components/schemas/LayerGroup"},"title":"LayerGroupList","type":"array"},"LayerComponentList":{"items":{"$ref":"#/components/schemas/LayerComponent"},"title":"LayerComponentList","type":"array"},"LayerLibrary":{"properties":{"layer_groups":{"items":{"$ref":"#/components/schemas/LayerGroup"},"type":"array"},"layers":{"items":{"$ref":"#/components/schemas/Layer"},"type":"array"},"type":{"enum":["layer_library"],"type":"string"}},"required":["type","layers","layer_groups"],"title":"LayerLibrary","type":"object"},"LayerGroup":{"additionalProperties":false,"properties":{"caption":{"nullable":true,"type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"layers":{"items":{"$ref":"#/components/schemas/Layer"},"type":"array"},"legend_visibility":{"description":"Controls how the layer group 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/layer_groups/v13k4Ae9BRjCHHdPP5Fcm6D","type":"string"}},"type":"object"},"name":{"nullable":false,"type":"string"},"ordering_key":{"description":"A sort order key used for ordering layers and layer groups in the legend","nullable":false,"type":"integer"},"subtitle":{"deprecated":true,"description":"Deprecated: use `caption` instead.","nullable":true,"type":"string"},"type":{"enum":["layer_group"],"type":"string"},"visibility_interaction":{"description":"Controls how the layer group is displayed in the legend. Defaults to `\"default\"`.","enum":["default","slider","select","multi_select"],"nullable":false,"type":"string"}},"required":["id","type","name","caption","visibility_interaction","layers"],"title":"LayerGroup","type":"object"},"MapCreateParams":{"additionalProperties":false,"properties":{"basemap":{"description":"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.","type":"string"},"description":{"description":"A description to display in the map legend","type":"string"},"lat":{"description":"If no data has been uploaded to the map, the initial latitude to center the map display on.","type":"number"},"layer_urls":{"description":"An array of urls to use to create layers in the map. Only tile URLs for raster layers are supported at the moment.","items":{"type":"string"},"type":"array"},"lon":{"description":"If no data has been uploaded to the map, the initial longitude to center the map display on.","type":"number"},"public_access":{"description":"The level of access to grant to the map. Defaults to \"view_only\".","enum":["private","view_only","view_and_comment","view_comment_and_edit"],"type":"string"},"title":{"description":"The title to be used for the map. Defaults to \"Untitled Map\"","type":"string"},"workspace_id":{"description":"The workspace to create the map in. Defaults to the latest used workspace","type":"string"},"zoom":{"description":"If no data has been uploaded to the map, the initial zoom level for the map to display.","type":"number"}},"title":"MapCreateParams","type":"object"},"SourceConnection-Microsoft-SQL":{"additionalProperties":false,"properties":{"database":{"type":"string"},"host":{"type":"string"},"port":{"nullable":true,"type":"integer"},"type":{"enum":["mssql"],"type":"string"},"user":{"type":"string"}},"title":"SourceConnection-Microsoft-SQL","type":"object"},"LayerComponentUpdateParams":{"anyOf":[{"description":"Summarizes the layer into a single statistic, such as a feature count or an attribute average.","properties":{"config":{"description":"Component configuration. Provided keys are updated; omitted keys keep their current value.","properties":{"reactive":{"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"viewport_mode":{"description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."}},"required":["aggregate"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."}},"required":["aggregate","aggregate_by"],"title":"Aggregate","type":"object"}],"description":"Change how the component computes its result. `data` replaces as a unit when provided. Partial updates are not supported."},"title":{"description":"Display title.","type":"string"}},"title":"Statistic","type":"object"},{"description":"Shows the distribution of a numeric attribute's values across bins.","properties":{"config":{"description":"Component configuration. Provided keys are updated; omitted keys keep their current value.","properties":{"reactive":{"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block). Pass `null` to clear the selection."},"viewport_mode":{"description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Numeric attribute to bin into the distribution.","type":"string"},"grouping":{"description":"A suggestion on how the attribute's values are binned. The result may be different to better fit an attribute's range.","properties":{"steps":{"properties":{"count":{"description":"Number of equal-width bins across the attribute's range.","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["equal-intervals"],"type":"string"}},"required":["type","count"],"type":"object"},"type":{"enum":["numeric"],"type":"string"}},"required":["type","steps"],"type":"object"}},"required":["aggregate","group_by"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Numeric attribute to bin into the distribution.","type":"string"},"grouping":{"description":"A suggestion on how the attribute's values are binned. The result may be different to better fit an attribute's range.","properties":{"steps":{"properties":{"count":{"description":"Number of equal-width bins across the attribute's range.","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["equal-intervals"],"type":"string"}},"required":["type","count"],"type":"object"},"type":{"enum":["numeric"],"type":"string"}},"required":["type","steps"],"type":"object"}},"required":["aggregate","aggregate_by","group_by"],"title":"Aggregate","type":"object"}],"description":"Change how the component computes its result. `data` replaces as a unit when provided. Partial updates are not supported."},"title":{"description":"Display title.","type":"string"}},"title":"Histogram","type":"object"},{"description":"Shows the categories of an attribute as a bar chart.","properties":{"config":{"description":"Component configuration. Provided keys are updated; omitted keys keep their current value.","properties":{"reactive":{"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block). Pass `null` to clear the selection."},"viewport_mode":{"description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Attribute whose values become the categories.","type":"string"}},"required":["aggregate","group_by"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Attribute whose values become the categories.","type":"string"}},"required":["aggregate","aggregate_by","group_by"],"title":"Aggregate","type":"object"}],"description":"Change how the component computes its result. `data` replaces as a unit when provided. Partial updates are not supported."},"title":{"description":"Display title.","type":"string"}},"title":"Bar chart","type":"object"},{"description":"Charts a statistic over time buckets of a date attribute.","properties":{"config":{"description":"Component configuration. Provided keys are updated; omitted keys keep their current value.","properties":{"reactive":{"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block). Pass `null` to clear the selection."},"viewport_mode":{"description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Date or datetime attribute which drives the time axis.","type":"string"},"grouping":{"description":"Time bucket per data point.","properties":{"interval":{"enum":["hour","day","week","month","year"],"type":"string"},"type":{"enum":["time-interval"],"type":"string"}},"required":["type","interval"],"type":"object"}},"required":["aggregate","group_by"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Date or datetime attribute which drives the time axis.","type":"string"},"grouping":{"description":"Time bucket per data point.","properties":{"interval":{"enum":["hour","day","week","month","year"],"type":"string"},"type":{"enum":["time-interval"],"type":"string"}},"required":["type","interval"],"type":"object"}},"required":["aggregate","aggregate_by","group_by"],"title":"Aggregate","type":"object"}],"description":"Change how the component computes its result. `data` replaces as a unit when provided. Partial updates are not supported."},"title":{"description":"Display title.","type":"string"}},"title":"Time series","type":"object"},{"description":"An interactive dropdown or slider for filtering the layer by an attribute's values.","properties":{"config":{"description":"Component configuration. Provided keys are updated; omitted keys keep their current value.","properties":{"control_type":{"description":"The type of rendered interactive component. `slider` only works with numeric attributes.","enum":["dropdown","slider"],"type":"string"},"plurality":{"description":"Whether the `dropdown` allows filtering on multiple values or just one.","enum":["single","multiple"],"type":"string"},"selection":{"description":"Selected values of `data.filter_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block). Pass `null` to clear the selection."},"sorting":{"description":"The rendered order of `dropdown` options.","enum":["Alphabetically","By feature count"],"type":"string"}},"type":"object"},"data":{"description":"Change how the component computes its result. `data` replaces as a unit when provided. Partial updates are not supported.","properties":{"filter_by":{"description":"Attribute to filter values from.","type":"string"}},"required":["filter_by"],"type":"object"},"title":{"description":"Display title.","type":"string"}},"title":"Filter","type":"object"}],"title":"LayerComponentUpdateParams"},"SourceCredentialUpdate-GcpServiceAccountJson":{"additionalProperties":false,"properties":{"service_account_filename":{"type":"string"},"service_account_json":{"oneOf":[{"type":"object"},{"type":"string"}]},"type":{"enum":["gcp_service_account_json"],"type":"string"}},"required":["type"],"title":"SourceCredentialUpdate-GcpServiceAccountJson","type":"object"},"SourceConnection-Google-BigQuery":{"additionalProperties":false,"properties":{"dataset":{"description":"BigQuery dataset to index. If omitted all datasets will be indexed","nullable":true,"type":"string"},"project":{"description":"BigQuery project to index","type":"string"},"type":{"enum":["bigquery"],"type":"string"}},"title":"SourceConnection-Google-BigQuery","type":"object"},"SourceUpdateConnectionParams":{"oneOf":[{"additionalProperties":false,"properties":{"blob_storage_url":{"description":"ABS blob storage URL","type":"string"},"type":{"enum":["abs_bucket"],"type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-ABS","type":"object"},{"additionalProperties":false,"properties":{"base64_encoded_service_account":{"description":"BigQuery credentials - Base 64 encoded Service account JSON","nullable":true,"type":"string"},"dataset":{"description":"BigQuery dataset","nullable":true,"type":"string"},"project":{"description":"BigQuery project","type":"string"},"type":{"enum":["bigquery"],"type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-GoogleBigQuery","type":"object"},{"additionalProperties":false,"properties":{"catalog":{"description":"Databricks catalog","nullable":true,"type":"string"},"http_path":{"description":"Databricks server HTTP path","type":"string"},"schema":{"description":"Databricks schema","nullable":true,"type":"string"},"server_hostname":{"description":"Databricks server hostname","type":"string"},"type":{"enum":["databricks"],"type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-Databricks","type":"object"},{"additionalProperties":false,"properties":{"token":{"description":"ESRI server token","nullable":true,"type":"string"},"type":{"enum":["feature_server"],"type":"string"},"url":{"description":"ESRI FeatureServer, MapServer, or ImageServer URL","type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-ESRIFeatureServer","type":"object"},{"additionalProperties":false,"properties":{"gs_uri":{"description":"GCS URI","type":"string"},"type":{"enum":["gcs_bucket"],"type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-GCS","type":"object"},{"additionalProperties":false,"properties":{"database":{"description":"MSSQL database name","type":"string"},"host":{"description":"MSSQL host","type":"string"},"password":{"description":"MSSQL password","type":"string"},"port":{"description":"MSSQL port","nullable":true,"type":"integer"},"type":{"enum":["mssql"],"type":"string"},"user":{"description":"MSSQL user name","type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-MicrosoftSQL","type":"object"},{"additionalProperties":false,"description":"Postgres / PostGIS","properties":{"database":{"description":"Postgres database name","type":"string"},"host":{"description":"Postgres host","type":"string"},"password":{"description":"Postgres password","type":"string"},"port":{"description":"Postgres port","nullable":true,"type":"integer"},"schema":{"description":"Postgres schema","type":"string"},"type":{"enum":["postgresql"],"type":"string"},"user":{"description":"Postgres user name","type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-Postgres","type":"object"},{"additionalProperties":false,"properties":{"database":{"description":"Redshift database name","type":"string"},"host":{"description":"Redshift host","type":"string"},"password":{"description":"Redshift password","type":"string"},"port":{"description":"Redshift port","nullable":true,"type":"integer"},"type":{"enum":["redshift"],"type":"string"},"user":{"description":"Redshift user name","type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-AmazonRedshift","type":"object"},{"additionalProperties":false,"properties":{"s3_uri":{"description":"S3 URI","type":"string"},"type":{"enum":["s3_bucket"],"type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-S3","type":"object"},{"additionalProperties":false,"properties":{"account_id":{"description":"Snowflake account ID","type":"string"},"database":{"description":"Snowflake database name","type":"string"},"password":{"description":"Snowflake password","type":"string"},"role":{"description":"Snowflake role","nullable":true,"type":"string"},"schema":{"description":"Snowflake database schema","nullable":true,"type":"string"},"type":{"enum":["snowflake"],"type":"string"},"user":{"description":"Snowflake user name","type":"string"},"warehouse":{"description":"Snowflake warehouse","nullable":true,"type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-Snowflake","type":"object"},{"additionalProperties":false,"description":"SpatioTemporal Asset Catalogs","properties":{"token":{"description":"STAC token","nullable":true,"type":"string"},"type":{"enum":["stac"],"type":"string"},"url":{"description":"STAC server / asset URL","type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-STAC","type":"object"},{"additionalProperties":false,"description":"Web Feature Server","properties":{"type":{"enum":["wfs"],"type":"string"},"url":{"description":"WFS URL","type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-WFS","type":"object"},{"additionalProperties":false,"description":"Web Map Service / Web Map Tile Service","properties":{"type":{"enum":["wms_wmts"],"type":"string"},"url":{"description":"WMS/WMTS URL","type":"string"}},"required":["type"],"title":"SourceUpdateConnectionParams-WMS-WMTS","type":"object"}],"title":"SourceUpdateConnectionParams"},"CustomExportResponse":{"additionalProperties":false,"properties":{"export_request_id":{"$ref":"#/components/schemas/FeltID"},"poll_endpoint":{"example":"http://felt.com/api/v2/maps/vAbZ5eKqRoGe4sCH8nHW8D/layers/7kF9Cfz45TUWIiuuWV8uZ7A/custom_exports/auFxn9BO4RrGGiKrGfaS7ZB","nullable":false,"type":"string"}},"required":["export_request_id","poll_endpoint"],"title":"CustomExportResponse","type":"object"},"LayerUpdateParamsList":{"items":{"$ref":"#/components/schemas/LayerUpdateParams"},"title":"LayerUpdateParamsList","type":"array"},"SourceCredential-DatabricksPAT":{"additionalProperties":false,"description":"Authenticate to Databricks using a Personal Access Token (PAT)","properties":{"token":{"type":"string"},"type":{"enum":["databricks_pat"],"type":"string"}},"required":["type","token"],"title":"SourceCredential-DatabricksPAT","type":"object"},"SourceConnection-Amazon-Redshift":{"additionalProperties":false,"properties":{"database":{"type":"string"},"host":{"type":"string"},"port":{"nullable":true,"type":"integer"},"type":{"enum":["redshift"],"type":"string"},"user":{"type":"string"}},"title":"SourceConnection-Amazon-Redshift","type":"object"},"EmbedToken":{"properties":{"expires_at":{"example":"2024-05-25T15:51:34","format":"date_time","type":"string"},"token":{"type":"string"}},"title":"EmbedToken","type":"object"},"UnauthorizedError":{"properties":{"errors":{"items":{"properties":{"detail":{"type":"string"},"source":{"properties":{"header":{"enum":["authorization"],"type":"string"}},"type":"object"},"title":{"type":"string"}},"type":"object"},"type":"array"}},"title":"UnauthorizedError","type":"object"},"LayerComponentCreateParams":{"anyOf":[{"description":"Summarizes the layer into a single statistic, such as a feature count or an attribute average.","properties":{"config":{"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."}},"required":["aggregate"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."}},"required":["aggregate","aggregate_by"],"title":"Aggregate","type":"object"}],"description":"How the statistic is computed."},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["statistic"],"type":"string"}},"required":["type","data"],"title":"Statistic","type":"object"},{"description":"Shows the distribution of a numeric attribute's values across bins.","properties":{"config":{"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Numeric attribute to bin into the distribution.","type":"string"},"grouping":{"description":"A suggestion on how the attribute's values are binned. The result may be different to better fit an attribute's range.","properties":{"steps":{"properties":{"count":{"description":"Number of equal-width bins across the attribute's range.","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["equal-intervals"],"type":"string"}},"required":["type","count"],"type":"object"},"type":{"enum":["numeric"],"type":"string"}},"required":["type","steps"],"type":"object"}},"required":["aggregate","group_by"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Numeric attribute to bin into the distribution.","type":"string"},"grouping":{"description":"A suggestion on how the attribute's values are binned. The result may be different to better fit an attribute's range.","properties":{"steps":{"properties":{"count":{"description":"Number of equal-width bins across the attribute's range.","exclusiveMinimum":true,"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["equal-intervals"],"type":"string"}},"required":["type","count"],"type":"object"},"type":{"enum":["numeric"],"type":"string"}},"required":["type","steps"],"type":"object"}},"required":["aggregate","aggregate_by","group_by"],"title":"Aggregate","type":"object"}],"description":"How to compute the histogram distribution."},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["histogram"],"type":"string"}},"required":["type","data"],"title":"Histogram","type":"object"},{"description":"Shows the categories of an attribute as a bar chart.","properties":{"config":{"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Attribute whose values become the categories.","type":"string"}},"required":["aggregate","group_by"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Attribute whose values become the categories.","type":"string"}},"required":["aggregate","aggregate_by","group_by"],"title":"Aggregate","type":"object"}],"description":"How to compute the resulting categories."},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["bar_chart"],"type":"string"}},"required":["type","data"],"title":"Bar chart","type":"object"},{"description":"Charts a statistic over time buckets of a date attribute.","properties":{"config":{"default":{"reactive":true,"viewport_mode":"global"},"description":"Component configuration.","properties":{"reactive":{"default":true,"description":"Whether this component reacts to other components' selections, filtering its result to match.","type":"boolean"},"selection":{"description":"Selected values of `data.group_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"viewport_mode":{"default":"global","description":"Compute over the whole layer (`global`) or only the features in the current viewport (`viewport`).","enum":["global","viewport"],"type":"string"}},"type":"object"},"data":{"anyOf":[{"properties":{"aggregate":{"description":"Count features.","enum":["count"],"type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Date or datetime attribute which drives the time axis.","type":"string"},"grouping":{"description":"Time bucket per data point.","properties":{"interval":{"enum":["hour","day","week","month","year"],"type":"string"},"type":{"enum":["time-interval"],"type":"string"}},"required":["type","interval"],"type":"object"}},"required":["aggregate","group_by"],"title":"Feature count","type":"object"},{"properties":{"aggregate":{"description":"The statistic to compute over `aggregate_by`: sum, average, min, max, median, or count of distinct values.","enum":["sum","avg","min","max","median","count_distinct"],"type":"string"},"aggregate_by":{"description":"Attribute to aggregate.","type":"string"},"format":{"description":"numbrojs format object. See the [numbrojs format documentation](https://numbrojs.com/format.html)."},"group_by":{"description":"Date or datetime attribute which drives the time axis.","type":"string"},"grouping":{"description":"Time bucket per data point.","properties":{"interval":{"enum":["hour","day","week","month","year"],"type":"string"},"type":{"enum":["time-interval"],"type":"string"}},"required":["type","interval"],"type":"object"}},"required":["aggregate","aggregate_by","group_by"],"title":"Aggregate","type":"object"}],"description":"How to aggregate the chosen attribute into a time series."},"title":{"description":"Display title.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["time_series"],"type":"string"}},"required":["type","data"],"title":"Time series","type":"object"},{"description":"An interactive dropdown or slider for filtering the layer by an attribute's values.","properties":{"config":{"default":{"control_type":"dropdown"},"description":"Component configuration.","properties":{"control_type":{"default":"dropdown","description":"The type of rendered interactive component. `slider` only works with numeric attributes.","enum":["dropdown","slider"],"type":"string"},"plurality":{"description":"Whether the `dropdown` allows filtering on multiple values or just one.","enum":["single","multiple"],"type":"string"},"selection":{"description":"Selected values of `data.filter_by`. The visualized map layer and other components are filtered to match. Uses the same format as the [FSL filters block](https://developers.felt.com/felt-style-language/style-definition-blocks/the-filters-block)."},"sorting":{"description":"The rendered order of `dropdown` options.","enum":["Alphabetically","By feature count"],"type":"string"}},"type":"object"},"data":{"description":"The attribute which the interactive component filters on.","properties":{"filter_by":{"description":"Attribute to filter values from.","type":"string"}},"required":["filter_by"],"type":"object"},"title":{"description":"Display title. Defaults to the attribute name.","type":"string"},"type":{"description":"The component type. Immutable after creation.","enum":["filter"],"type":"string"}},"required":["type","data"],"title":"Filter","type":"object"}],"title":"LayerComponentCreateParams"},"LayerUpdateParams":{"additionalProperties":false,"properties":{"caption":{"example":"A very interesting dataset","type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"layer_group_id":{"example":"luCHyMruTQ6ozGk3gPJfEB","format":"felt_id","nullable":true,"type":"string"},"legend_display":{"description":"Controls how the layer is displayed in the legend.","enum":["default","name_only"],"type":"string"},"legend_visibility":{"description":"Controls whether or not the layer is displayed in the legend.","enum":["hide","show"],"type":"string"},"metadata":{"$ref":"#/components/schemas/LayerMetadata"},"name":{"example":"My Layer","type":"string"},"ordering_key":{"type":"integer"},"refresh_period":{"enum":["15 min","30 min","hour","3 hours","6 hours","12 hours","day","week","month","disabled"],"type":"string"},"subtitle":{"deprecated":true,"description":"Deprecated: use `caption` instead.","type":"string"}},"required":["id"],"title":"LayerUpdateParams","type":"object"},"LayerMetadata":{"additionalProperties":false,"properties":{"attribution_text":{"nullable":true,"type":"string"},"attribution_url":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"license":{"nullable":true,"type":"string"},"source_abbreviation":{"nullable":true,"type":"string"},"source_name":{"nullable":true,"type":"string"},"source_url":{"nullable":true,"type":"string"},"updated_at":{"example":"2025-03-24","format":"date","nullable":true,"type":"string"}},"title":"LayerMetadata","type":"object"},"SourceCreateParams":{"additionalProperties":false,"properties":{"connection":{"$ref":"#/components/schemas/SourceCreateConnectionParams"},"name":{"type":"string"},"permissions":{"$ref":"#/components/schemas/SourcePermissions"}},"required":["name","connection"],"title":"SourceCreateParams","type":"object"},"SourceCredential":{"additionalProperties":false,"properties":{"created_at":{"nullable":true,"type":"integer"},"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-AwsAssumeRole"},{"$ref":"#/components/schemas/SourceCredential-AzureStorageString"},{"$ref":"#/components/schemas/SourceCredential-CustomHeaders"},{"$ref":"#/components/schemas/SourceCredential-GcpServiceAccountJson"},{"$ref":"#/components/schemas/SourceCredential-KeyPair"},{"$ref":"#/components/schemas/SourceCredential-SnowflakePAT"}],"type":"object"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"updated_at":{"nullable":true,"type":"integer"},"use_case":{"enum":["stac_api_authentication","stac_asset_fetching","source_authentication"],"type":"string"}},"required":["id","source_id","name","use_case","created_at","updated_at","credential"],"title":"SourceCredential","type":"object"},"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":{"components":{"example":"https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA/components","type":"string"},"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"],"title":"Layer","type":"object"},"ProjectReference":{"additionalProperties":false,"properties":{"id":{"$ref":"#/components/schemas/FeltID"},"links":{"properties":{"self":{"example":"https://felt.com/api/v2/projects/V0dnOMOuTd9B9BOsL9C0UjmqC","type":"string"}},"type":"object"},"max_inherited_permission":{"description":"The maximum permission level workspace members inherit on team-visible projects.","enum":["view_only","view_and_contribute","view_and_edit"],"example":"view_only","nullable":false,"type":"string"},"name":{"type":"string"},"type":{"enum":["project_reference"],"type":"string"},"visibility":{"enum":["workspace","private"],"type":"string"}},"required":["id","type","name","visibility","max_inherited_permission"],"title":"ProjectReference","type":"object"},"JsonErrorResponse":{"properties":{"errors":{"items":{"properties":{"detail":{"example":"null value where string expected","type":"string"},"source":{"properties":{"pointer":{"example":"/data/attributes/petName","type":"string"}},"required":["pointer"],"type":"object"},"title":{"example":"Invalid value","type":"string"}},"required":["title","source","detail"],"type":"object"},"type":"array"}},"required":["errors"],"title":"JsonErrorResponse","type":"object"},"SourceCredential-AzureStorageString":{"additionalProperties":false,"description":"Authenticate to Azure Blob Storage","properties":{"connection_string":{"type":"string"},"type":{"enum":["azure_storage_connection_string"],"type":"string"}},"required":["type","connection_string"],"title":"SourceCredential-AzureStorageString","type":"object"},"SourceConnection-S3Bucket":{"additionalProperties":false,"description":"AWS S3","properties":{"credentials":{"items":{"properties":{"created_at":{"nullable":true,"type":"integer"},"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-AwsAssumeRole"}],"type":"object"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"updated_at":{"nullable":true,"type":"integer"},"use_case":{"enum":["source_authentication"],"type":"string"}},"type":"object"},"type":"array"},"s3_uri":{"type":"string"},"type":{"enum":["s3_bucket"],"type":"string"}},"title":"SourceConnection-S3Bucket","type":"object"},"ProjectCreateParams":{"additionalProperties":false,"properties":{"max_inherited_permission":{"description":"The maximum permission level workspace members inherit on team-visible projects. Only applicable when visibility is \"workspace\".","enum":["view_only","view_and_contribute","view_and_edit"],"example":"view_only","nullable":false,"type":"string"},"name":{"description":"The name to be used for the Project","type":"string"},"visibility":{"description":"Either viewable by all members of the workspace, or private to users who are invited.","enum":["workspace","private"],"type":"string"}},"required":["name","visibility"],"title":"ProjectCreateParams","type":"object"},"SourceCredentialUpdate-KeyPair":{"additionalProperties":false,"description":"Authenticate using key pair authentication","properties":{"private_key":{"type":"string"},"private_key_name":{"type":"string"},"private_key_passphrase":{"type":"string"},"type":{"enum":["key_pair"],"type":"string"}},"required":["type"],"title":"SourceCredentialUpdate-KeyPair","type":"object"},"GeoJSON":{"properties":{"features":{"items":{"properties":{"geometry":{"properties":{"felt:id":{"$ref":"#/components/schemas/FeltID"},"felt:parentId":{"example":"luCHyMruTQ6ozGk3gPJfEB","format":"felt_id","nullable":true,"type":"string"}},"type":"object"},"properties":{"type":"object"},"type":{"enum":["Feature"],"type":"string"}},"type":"object"},"type":"array"},"type":{"enum":["FeatureCollection"],"type":"string"}},"required":["type","features"],"title":"GeoJSON","type":"object"},"ElementGroupParams":{"additionalProperties":false,"properties":{"color":{"default":"#C93535","type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"example":"My Element Group","type":"string"},"symbol":{"default":"dot","type":"string"}},"required":["name"],"title":"ElementGroupParams","type":"object"},"SourceCredentialUpdateParams":{"additionalProperties":false,"properties":{"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredentialUpdate-AwsAssumeRole"},{"$ref":"#/components/schemas/SourceCredentialUpdate-AzureStorageString"},{"$ref":"#/components/schemas/SourceCredentialUpdate-CustomHeaders"},{"$ref":"#/components/schemas/SourceCredentialUpdate-GcpServiceAccountJson"},{"$ref":"#/components/schemas/SourceCredentialUpdate-KeyPair"},{"$ref":"#/components/schemas/SourceCredentialUpdate-SnowflakePAT"}],"type":"object"},"name":{"type":"string"},"use_case":{"enum":["stac_api_authentication","stac_asset_fetching","source_authentication"],"type":"string"}},"title":"SourceCredentialUpdateParams","type":"object"},"DuplicateLayersResponse":{"properties":{"layer_groups":{"items":{"$ref":"#/components/schemas/LayerGroup"},"type":"array"},"layers":{"items":{"$ref":"#/components/schemas/Layer"},"type":"array"}},"required":["layers","layer_groups"],"title":"DuplicateLayersResponse","type":"object"},"SourceConnection-Postgres":{"additionalProperties":false,"description":"Postgres / PostGIS","properties":{"database":{"type":"string"},"host":{"type":"string"},"port":{"nullable":true,"type":"integer"},"schema":{"nullable":true,"type":"string"},"type":{"enum":["postgresql"],"type":"string"},"user":{"type":"string"}},"title":"SourceConnection-Postgres","type":"object"},"InternalServerError":{"properties":{"errors":{"items":{"properties":{"detail":{"type":"string"},"source":{"properties":{"parameter":{"type":"string"}},"type":"object"},"title":{"type":"string"}},"type":"object"},"type":"array"}},"title":"InternalServerError","type":"object"},"MapViewerPermissions":{"additionalProperties":false,"properties":{"can_duplicate_map":{"description":"Whether viewers can duplicate the map and data","type":"boolean"},"can_export_data":{"description":"Whether viewers can export map data","type":"boolean"},"can_see_map_presence":{"description":"Whether viewers can see who else is viewing the map","type":"boolean"}},"title":"MapViewerPermissions","type":"object"},"FeltID":{"example":"luCHyMruTQ6ozGk3gPJfEB","format":"felt_id","nullable":false,"title":"FeltID","type":"string"},"SourceCredential-KeyPair":{"additionalProperties":false,"description":"Authenticate using key pair authentication","properties":{"private_key":{"type":"string"},"private_key_name":{"type":"string"},"private_key_passphrase":{"type":"string"},"type":{"enum":["key_pair"],"type":"string"}},"required":["type","private_key","private_key_name"],"title":"SourceCredential-KeyPair","type":"object"},"SourceConnection-GCSBucket":{"additionalProperties":false,"description":"Google Cloud Storage","properties":{"credentials":{"items":{"properties":{"created_at":{"nullable":true,"type":"integer"},"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-GcpServiceAccountJson"}],"type":"object"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"updated_at":{"nullable":true,"type":"integer"},"use_case":{"enum":["source_authentication"],"type":"string"}},"type":"object"},"type":"array"},"gs_uri":{"type":"string"},"type":{"enum":["gcs_bucket"],"type":"string"}},"title":"SourceConnection-GCSBucket","type":"object"},"CustomExportRequestStatus":{"additionalProperties":false,"properties":{"download_url":{"example":"https://us1.data-pipeline.felt.com/fcdfd96c-06fa-40b9-9ae9-ad034b5a66df/Felt-Export.zip","nullable":true,"type":"string"},"export_id":{"example":"FZWQjWZJSZWvW3yn9BeV9AyA","nullable":false,"type":"string"},"filters":{"items":{},"nullable":false,"type":"array"},"status":{"enum":["completed","failed","in_progress"],"example":"completed","nullable":false,"type":"string"}},"required":["export_id","status","download_url","filters"],"title":"CustomExportRequestStatus","type":"object"},"AddSourceLayerAccepted":{"additionalProperties":false,"properties":{"links":{"additionalProperties":false,"properties":{"layer_group":{"example":"https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layer_groups/KFFhKAbvS4anD3wxtwNEpD","type":"string"},"self":{"example":"https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC","type":"string"}},"type":"object"},"status":{"enum":["accepted"],"type":"string"}},"title":"AddSourceLayerAccepted","type":"object"},"ElementGroup":{"additionalProperties":false,"properties":{"color":{"description":"The color of the element group symbol.","nullable":false,"type":"string"},"elements":{"$ref":"#/components/schemas/GeoJSON"},"id":{"description":"The ID of the element group.","type":"string"},"name":{"description":"The name of the element group.","nullable":true,"type":"string"},"symbol":{"description":"The symbol used to represent the element group.","nullable":true,"type":"string"}},"required":["id","color","name","symbol","elements"],"title":"ElementGroup","type":"object"},"SourceConnection-ESRI-FeatureServer":{"additionalProperties":false,"properties":{"type":{"enum":["feature_server"],"type":"string"},"url":{"type":"string"}},"title":"SourceConnection-ESRI-FeatureServer","type":"object"},"SourceConnection-Snowflake":{"additionalProperties":false,"properties":{"account_id":{"type":"string"},"credentials":{"items":{"properties":{"created_at":{"nullable":true,"type":"integer"},"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-SnowflakePAT"},{"$ref":"#/components/schemas/SourceCredential-KeyPair"}],"type":"object"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"updated_at":{"nullable":true,"type":"integer"},"use_case":{"enum":["source_authentication"],"type":"string"}},"type":"object"},"type":"array"},"database":{"type":"string"},"role":{"nullable":true,"type":"string"},"schema":{"nullable":true,"type":"string"},"type":{"enum":["snowflake"],"type":"string"},"user":{"type":"string"},"warehouse":{"nullable":true,"type":"string"}},"title":"SourceConnection-Snowflake","type":"object"},"SourceCreateConnectionParams":{"oneOf":[{"additionalProperties":false,"properties":{"blob_storage_url":{"description":"ABS blob storage URL","type":"string"},"credentials":{"items":{"properties":{"credential":{"$ref":"#/components/schemas/SourceCredential-AzureStorageString"},"name":{"type":"string"},"use_case":{"enum":["source_authentication"],"type":"string"}},"required":["credential","use_case","name"],"type":"object"},"maxItems":1,"type":"array"},"type":{"enum":["abs_bucket"],"type":"string"}},"required":["type","blob_storage_url"],"title":"SourceCreateConnectionParams-ABS","type":"object"},{"additionalProperties":false,"properties":{"base64_encoded_service_account":{"description":"BigQuery credentials - Base 64 encoded Service account JSON","nullable":true,"type":"string"},"dataset":{"description":"BigQuery dataset","nullable":true,"type":"string"},"project":{"description":"BigQuery project","type":"string"},"type":{"enum":["bigquery"],"type":"string"}},"required":["type","project"],"title":"SourceCreateConnectionParams-GoogleBigQuery","type":"object"},{"additionalProperties":false,"properties":{"catalog":{"description":"Databricks catalog","nullable":true,"type":"string"},"credentials":{"items":{"properties":{"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-DatabricksPAT"},{"$ref":"#/components/schemas/SourceCredential-OAuthM2M"}],"type":"object"},"name":{"type":"string"},"use_case":{"enum":["source_authentication"],"type":"string"}},"required":["credential","use_case","name"],"type":"object"},"maxItems":1,"type":"array"},"http_path":{"description":"Databricks server HTTP path","type":"string"},"schema":{"description":"Databricks schema","nullable":true,"type":"string"},"server_hostname":{"description":"Databricks server hostname","type":"string"},"type":{"enum":["databricks"],"type":"string"}},"required":["type","server_hostname","http_path"],"title":"SourceCreateConnectionParams-Databricks","type":"object"},{"additionalProperties":false,"properties":{"token":{"description":"ESRI server token","nullable":true,"type":"string"},"type":{"enum":["feature_server"],"type":"string"},"url":{"description":"ESRI FeatureServer, MapServer, or ImageServer URL","type":"string"}},"required":["type","url"],"title":"SourceCreateConnectionParams-ESRIFeatureServer","type":"object"},{"additionalProperties":false,"properties":{"credentials":{"items":{"properties":{"credential":{"$ref":"#/components/schemas/SourceCredential-GcpServiceAccountJson"},"name":{"type":"string"},"use_case":{"enum":["source_authentication"],"type":"string"}},"required":["credential","use_case","name"],"type":"object"},"maxItems":1,"type":"array"},"gs_uri":{"description":"GCS URI","type":"string"},"type":{"enum":["gcs_bucket"],"type":"string"}},"required":["type","gs_uri"],"title":"SourceCreateConnectionParams-GCS","type":"object"},{"additionalProperties":false,"properties":{"database":{"description":"MSSQL database name","type":"string"},"host":{"description":"MSSQL host","type":"string"},"password":{"description":"MSSQL password","type":"string"},"port":{"description":"MSSQL port","nullable":true,"type":"integer"},"type":{"enum":["mssql"],"type":"string"},"user":{"description":"MSSQL user name","type":"string"}},"required":["type","host","database","user","password"],"title":"SourceCreateConnectionParams-MicrosoftSQL","type":"object"},{"additionalProperties":false,"description":"Postgres / PostGIS","properties":{"database":{"description":"Postgres database name","type":"string"},"host":{"description":"Postgres host","type":"string"},"password":{"description":"Postgres password","type":"string"},"port":{"description":"Postgres port","nullable":true,"type":"integer"},"schema":{"description":"Postgres schema","type":"string"},"type":{"enum":["postgresql"],"type":"string"},"user":{"description":"Postgres user name","type":"string"}},"required":["type","host","database","user","password"],"title":"SourceCreateConnectionParams-Postgres","type":"object"},{"additionalProperties":false,"properties":{"database":{"description":"Redshift database name","type":"string"},"host":{"description":"Redshift host","type":"string"},"password":{"description":"Redshift password","type":"string"},"port":{"description":"Redshift port","nullable":true,"type":"integer"},"type":{"enum":["redshift"],"type":"string"},"user":{"description":"Redshift user name","type":"string"}},"required":["type","host","database","user","password"],"title":"SourceCreateConnectionParams-AmazonRedshift","type":"object"},{"additionalProperties":false,"properties":{"credentials":{"items":{"properties":{"credential":{"$ref":"#/components/schemas/SourceCredential-AwsAssumeRole"},"name":{"type":"string"},"use_case":{"enum":["source_authentication"],"type":"string"}},"required":["credential","use_case","name"],"type":"object"},"maxItems":1,"type":"array"},"s3_uri":{"description":"S3 URI","type":"string"},"type":{"enum":["s3_bucket"],"type":"string"}},"required":["type","s3_uri"],"title":"SourceCreateConnectionParams-S3","type":"object"},{"additionalProperties":false,"properties":{"account_id":{"description":"Snowflake account ID","type":"string"},"credentials":{"items":{"properties":{"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-KeyPair"},{"$ref":"#/components/schemas/SourceCredential-SnowflakePAT"}],"type":"object"},"name":{"type":"string"},"use_case":{"enum":["source_authentication"],"type":"string"}},"required":["credential","use_case","name"],"type":"object"},"maxItems":1,"type":"array"},"database":{"description":"Snowflake database name","type":"string"},"password":{"description":"Snowflake password","type":"string"},"role":{"description":"Snowflake role","nullable":true,"type":"string"},"schema":{"description":"Snowflake database schema","nullable":true,"type":"string"},"type":{"enum":["snowflake"],"type":"string"},"user":{"description":"Snowflake user name","type":"string"},"warehouse":{"description":"Snowflake warehouse","nullable":true,"type":"string"}},"required":["type","database","account_id","user"],"title":"SourceCreateConnectionParams-Snowflake","type":"object"},{"additionalProperties":false,"description":"SpatioTemporal Asset Catalogs","properties":{"credentials":{"items":{"properties":{"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-AwsAssumeRole"},{"$ref":"#/components/schemas/SourceCredential-AzureStorageString"},{"$ref":"#/components/schemas/SourceCredential-GcpServiceAccountJson"},{"$ref":"#/components/schemas/SourceCredential-CustomHeaders"}],"type":"object"},"name":{"type":"string"},"use_case":{"enum":["stac_api_authentication","stac_asset_fetching"],"type":"string"}},"required":["name","use_case","credential"],"type":"object"},"type":"array"},"token":{"description":"STAC token","nullable":true,"type":"string"},"type":{"enum":["stac"],"type":"string"},"url":{"description":"STAC server / asset URL","type":"string"}},"required":["type","url"],"title":"SourceCreateConnectionParams-STAC","type":"object"},{"additionalProperties":false,"description":"Web Feature Server","properties":{"type":{"enum":["wfs"],"type":"string"},"url":{"description":"WFS URL","type":"string"}},"required":["type","url"],"title":"SourceCreateConnectionParams-WFS","type":"object"},{"additionalProperties":false,"description":"Web Map Service / Web Map Tile Service","properties":{"type":{"enum":["wms_wmts"],"type":"string"},"url":{"description":"WMS/WMTS URL","type":"string"}},"required":["type","url"],"title":"SourceCreateConnectionParams-WMSWMTS","type":"object"}],"title":"SourceCreateConnectionParams"},"SourceUpdateParams":{"additionalProperties":false,"properties":{"connection":{"$ref":"#/components/schemas/SourceUpdateConnectionParams"},"name":{"type":"string"},"permissions":{"$ref":"#/components/schemas/SourcePermissions"}},"title":"SourceUpdateParams","type":"object"},"UploadResponse":{"properties":{"layer_group_id":{"$ref":"#/components/schemas/FeltID"},"layer_id":{"description":"The ID of the layer created by this upload. If multiple layers are included in the upload, this is the ID of the first layer in the layer group.","example":"luCHyMruTQ6ozGk3gPJfEB","format":"felt_id","nullable":false,"type":"string"},"presigned_attributes":{"description":"If provided, the presigned attributes to attach to the post request","nullable":true,"type":"object"},"type":{"enum":["upload_response"],"type":"string"},"url":{"description":"If provided, the URL to post the file to","nullable":true,"type":"string"}},"title":"UploadResponse","type":"object"},"CustomExportParams":{"additionalProperties":false,"properties":{"email_on_completion":{"description":"Send an email to the requesting user when the export completes. Defaults to `true`","type":"boolean"},"filters":{"description":"Filters for the layer in Felt Style Language filter format","items":{},"type":"array"},"output_format":{"enum":["csv","gpkg","geojson","geotiff","pmtiles","shapefile","kml","geoparquet"],"example":"csv","nullable":false,"type":"string"}},"required":["output_format"],"title":"CustomExportParams","type":"object"},"ElementGroupList":{"items":{"$ref":"#/components/schemas/ElementGroup"},"title":"ElementGroupList","type":"array"},"SourceConnection-STAC":{"additionalProperties":false,"description":"SpatioTemporal Asset Catalogs","properties":{"credentials":{"items":{"properties":{"created_at":{"nullable":true,"type":"integer"},"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-GcpServiceAccountJson"},{"$ref":"#/components/schemas/SourceCredential-AzureStorageString"},{"$ref":"#/components/schemas/SourceCredential-AwsAssumeRole"},{"$ref":"#/components/schemas/SourceCredential-CustomHeaders"}],"type":"object"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"updated_at":{"nullable":true,"type":"integer"},"use_case":{"enum":["stac_api_authentication","stac_asset_fetching"],"type":"string"}},"type":"object"},"type":"array"},"type":{"enum":["stac"],"type":"string"},"url":{"type":"string"}},"title":"SourceConnection-STAC","type":"object"},"AddSourceLayerParams":{"oneOf":[{"properties":{"dataset_id":{"$ref":"#/components/schemas/FeltID"},"from":{"enum":["dataset"],"type":"string"}},"required":["from","dataset_id"],"title":"AddSourceLayer-Dataset-Params","type":"object"},{"properties":{"from":{"enum":["sql"],"type":"string"},"query":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"}},"required":["from","source_id","query"],"title":"AddSourceLayer-SQL-Params","type":"object"},{"properties":{"from":{"enum":["stac"],"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"stac_asset_url":{"type":"string"}},"required":["from","source_id","stac_asset_url"],"title":"AddSourceLayer-STAC-Params","type":"object"}],"title":"AddSourceLayerParams","type":"object"},"PublishLayerGroupParams":{"additionalProperties":false,"properties":{"feltServerId":{"description":"The Felt Server to publish into. Defaults to the workspace's default Felt Server.","example":"8f9a2b1c-3d4e-5f60-7a8b-9c0d1e2f3a4b","format":"uuid","type":"string"},"name":{"description":"The name to publish the layer group under","example":"My Layer","type":"string"}},"title":"PublishLayerGroupParams","type":"object"},"SourceCredentialUpdate-SnowflakePAT":{"additionalProperties":false,"description":"Authenticate to Snowflake with a programmatic access token (PAT)","properties":{"token":{"type":"string"},"type":{"enum":["snowflake_pat"],"type":"string"}},"required":["type"],"title":"SourceCredentialUpdate-SnowflakePAT","type":"object"},"SourceConnection-WMS-WMTS":{"additionalProperties":false,"description":"Web Map Service / Web Map Tile Service","properties":{"type":{"enum":["wms_wmts"],"type":"string"},"url":{"type":"string"}},"title":"SourceConnection-WMS-WMTS","type":"object"},"SourceCredentialUpdate-AzureStorageString":{"additionalProperties":false,"description":"Authenticate to Azure Blob Storage","properties":{"connection_string":{"type":"string"},"type":{"enum":["azure_storage_connection_string"],"type":"string"}},"required":["type"],"title":"SourceCredentialUpdate-AzureStorageString","type":"object"},"Project":{"additionalProperties":false,"properties":{"id":{"$ref":"#/components/schemas/FeltID"},"maps":{"items":{"$ref":"#/components/schemas/MapReference"},"type":"array"},"max_inherited_permission":{"description":"The maximum permission level workspace members inherit on team-visible projects.","enum":["view_only","view_and_contribute","view_and_edit"],"example":"view_only","nullable":false,"type":"string"},"name":{"type":"string"},"type":{"enum":["project"],"type":"string"},"visibility":{"enum":["workspace","private"],"type":"string"}},"required":["id","type","name","visibility","max_inherited_permission","maps"],"title":"Project","type":"object"},"SourceCredentialCreateParams":{"additionalProperties":false,"properties":{"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-AwsAssumeRole"},{"$ref":"#/components/schemas/SourceCredential-AzureStorageString"},{"$ref":"#/components/schemas/SourceCredential-CustomHeaders"},{"$ref":"#/components/schemas/SourceCredential-GcpServiceAccountJson"},{"$ref":"#/components/schemas/SourceCredential-KeyPair"},{"$ref":"#/components/schemas/SourceCredential-SnowflakePAT"}],"type":"object"},"name":{"type":"string"},"use_case":{"enum":["stac_api_authentication","stac_asset_fetching","source_authentication"],"type":"string"}},"required":["name","use_case","credential"],"title":"SourceCredentialCreateParams","type":"object"},"LayerGroupUpdateParams":{"additionalProperties":false,"properties":{"caption":{"example":"A very interesting group","type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"legend_visibility":{"description":"Controls how the layer group is displayed in the legend","enum":["hide","show"],"type":"string"},"name":{"example":"My Layer Group","type":"string"},"ordering_key":{"type":"integer"},"subtitle":{"deprecated":true,"description":"Deprecated: use `caption` instead.","type":"string"},"visibility_interaction":{"description":"Controls how the layer group is displayed in the legend. Defaults to `\"default\"`.","enum":["default","slider","select","multi_select"],"nullable":true,"type":"string"}},"title":"LayerGroupUpdateParams","type":"object"},"MapTableSettings":{"additionalProperties":false,"properties":{"default_table_layer_id":{"example":"luCHyMruTQ6ozGk3gPJfEB","format":"felt_id","nullable":true,"type":"string"},"viewers_can_open_table":{"description":"Whether viewers can open the data table","type":"boolean"}},"title":"MapTableSettings","type":"object"},"CommentExport":{"items":{"description":"Comment Thread"},"title":"CommentExport","type":"array"},"NotFoundError":{"properties":{"errors":{"items":{"properties":{"detail":{"type":"string"},"source":{"properties":{"parameter":{"type":"string"}},"type":"object"},"title":{"type":"string"}},"type":"object"},"type":"array"}},"title":"NotFoundError","type":"object"},"SourceDataset":{"additionalProperties":false,"description":"A Dataset found when inspecting a Source, e.g. a database table.","properties":{"created_at":{"type":"integer"},"description":{"nullable":true,"type":"string"},"geometry_type":{"enum":["polygon","line","point","raster","none"],"type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"inspection_status":{"enum":["completed","failed"],"type":"string"},"name":{"type":"string"},"type":{"enum":["dataset"],"type":"string"},"updated_at":{"type":"integer"}},"title":"SourceDataset","type":"object"},"MapUpdateParams":{"additionalProperties":false,"properties":{"basemap":{"description":"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.","type":"string"},"description":{"description":"A description to display in the map legend","type":"string"},"public_access":{"description":"The level of access to grant to the map. Defaults to \"view_only\".","enum":["private","view_only","view_and_comment","view_comment_and_edit"],"type":"string"},"table_settings":{"$ref":"#/components/schemas/MapTableSettings"},"title":{"description":"The new title for the map","type":"string"},"viewer_permissions":{"$ref":"#/components/schemas/MapViewerPermissions"}},"title":"MapUpdateParams","type":"object"},"MapReference":{"additionalProperties":false,"properties":{"created_at":{"example":"2024-05-25T15:51:34","format":"date_time","type":"string"},"folder_id":{"nullable":true,"type":"string"},"id":{"$ref":"#/components/schemas/FeltID"},"links":{"properties":{"self":{"example":"https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC","type":"string"}},"type":"object"},"project_id":{"nullable":false,"type":"string"},"public_access":{"enum":["private","view_only","view_and_comment","view_comment_and_edit"],"type":"string"},"thumbnail_url":{"description":"A static thumbnail image of the map","nullable":true,"type":"string"},"title":{"type":"string"},"type":{"enum":["map_reference"],"type":"string"},"url":{"type":"string"},"visited_at":{"format":"date_time","nullable":true,"type":"string"}},"required":["id","type","url","title","thumbnail_url","created_at","visited_at","project_id","folder_id","public_access"],"title":"MapReference","type":"object"},"MapDuplicateParams":{"additionalProperties":false,"properties":{"destination":{"oneOf":[{"additionalProperties":false,"properties":{"project_id":{"$ref":"#/components/schemas/FeltID"}},"required":["project_id"],"type":"object"},{"additionalProperties":false,"properties":{"folder_id":{"$ref":"#/components/schemas/FeltID"}},"required":["folder_id"],"type":"object"}],"type":"object"},"title":{"description":"Title for the duplicated map. If not provided, will default to '[Original Title] (copy)'","type":"string"}},"title":"MapDuplicateParams","type":"object"},"PublishLayerParams":{"additionalProperties":false,"properties":{"feltServerId":{"description":"The Felt Server to publish into. Defaults to the workspace's default Felt Server.","example":"8f9a2b1c-3d4e-5f60-7a8b-9c0d1e2f3a4b","format":"uuid","type":"string"},"name":{"description":"The name to publish the layer under","example":"My Layer","type":"string"}},"title":"PublishLayerParams","type":"object"},"SourceConnection-ABSBucket":{"additionalProperties":false,"description":"Microsoft Azure Blob Storage","properties":{"blob_storage_url":{"type":"string"},"credentials":{"items":{"properties":{"created_at":{"nullable":true,"type":"integer"},"credential":{"oneOf":[{"$ref":"#/components/schemas/SourceCredential-AzureStorageString"}],"type":"object"},"id":{"$ref":"#/components/schemas/FeltID"},"name":{"type":"string"},"source_id":{"$ref":"#/components/schemas/FeltID"},"updated_at":{"nullable":true,"type":"integer"},"use_case":{"enum":["source_authentication"],"type":"string"}},"type":"object"},"type":"array"},"type":{"enum":["abs_bucket"],"type":"string"}},"title":"SourceConnection-ABSBucket","type":"object"},"SourceConnection-WFS":{"additionalProperties":false,"description":"Web Feature Server","properties":{"type":{"enum":["wfs"],"type":"string"},"url":{"type":"string"}},"title":"SourceConnection-WFS","type":"object"},"Source":{"additionalProperties":false,"properties":{"automatic_sync":{"enum":["enabled","paused"],"type":"string"},"connection":{"nullable":true,"oneOf":[{"$ref":"#/components/schemas/SourceConnection-ABSBucket"},{"$ref":"#/components/schemas/SourceConnection-Google-BigQuery"},{"$ref":"#/components/schemas/SourceConnection-Databricks"},{"$ref":"#/components/schemas/SourceConnection-ESRI-FeatureServer"},{"$ref":"#/components/schemas/SourceConnection-GCSBucket"},{"$ref":"#/components/schemas/SourceConnection-Microsoft-SQL"},{"$ref":"#/components/schemas/SourceConnection-Postgres"},{"$ref":"#/components/schemas/SourceConnection-Amazon-Redshift"},{"$ref":"#/components/schemas/SourceConnection-S3Bucket"},{"$ref":"#/components/schemas/SourceConnection-Snowflake"},{"$ref":"#/components/schemas/SourceConnection-STAC"},{"$ref":"#/components/schemas/SourceConnection-WFS"},{"$ref":"#/components/schemas/SourceConnection-WMS-WMTS"}]},"created_at":{"nullable":true,"type":"integer"},"datasets":{"items":{"$ref":"#/components/schemas/SourceDataset"},"type":"array"},"id":{"$ref":"#/components/schemas/FeltID"},"last_synced_at":{"nullable":true,"type":"integer"},"name":{"type":"string"},"owner_id":{"$ref":"#/components/schemas/FeltID"},"permissions":{"$ref":"#/components/schemas/SourcePermissions"},"sync_status":{"enum":["syncing","completed","failed"],"type":"string"},"type":{"enum":["source"],"type":"string"},"updated_at":{"nullable":true,"type":"integer"},"workspace_id":{"$ref":"#/components/schemas/FeltID"}},"title":"Source","type":"object"},"SourceCredential-OAuthM2M":{"additionalProperties":false,"description":"Authenticate to your source using Machine-to-Machine (M2M) OAuth","properties":{"client_id":{"type":"string"},"client_secret":{"type":"string"},"type":{"enum":["oauth_m2m"],"type":"string"}},"required":["type","client_id","client_secret"],"title":"SourceCredential-OAuthM2M","type":"object"},"SourceCredentialUpdate-CustomHeaders":{"additionalProperties":false,"description":"Authenticate to an API using headers","properties":{"headers":{"items":{"properties":{"name":{"description":"The header name","type":"string"},"sensitive":{"description":"Whether or not the header is sensitive. If it is marked as sensitive, then `felt:redacted` will be returned when viewing this header","type":"boolean"},"value":{"description":"The header value","type":"string"}},"required":["name","value","sensitive"],"type":"object"},"type":"array"},"type":{"enum":["custom_headers"],"type":"string"}},"required":["type"],"title":"SourceCredentialUpdate-CustomHeaders","type":"object"},"ProjectUpdateParams":{"additionalProperties":false,"properties":{"max_inherited_permission":{"description":"The maximum permission level workspace members inherit on team-visible projects. Only applicable when visibility is \"workspace\".","enum":["view_only","view_and_contribute","view_and_edit"],"example":"view_only","nullable":false,"type":"string"},"name":{"description":"The name to be used for the Project","type":"string"},"visibility":{"description":"Either viewable by all members of the workspace, or private to users who are invited.","enum":["workspace","private"],"type":"string"}},"title":"ProjectUpdateParams","type":"object"},"UploadInterpretationHint":{"oneOf":[{"description":"A hint that the data contains Latitude and Longitude in two individual attributes.","properties":{"attributes":{"additionalProperties":false,"properties":{"lat":{"type":"string"},"lng":{"type":"string"}},"required":["lat","lng"],"type":"object"}},"required":["attributes"],"title":"UploadInterpretationHint-AttributeHint-LatitudeAndLongitude","type":"object"},{"description":"A hint that the data contains Latitude and Longitude combined in a single attribute.","properties":{"attribute":{"additionalProperties":false,"properties":{"lat_lng":{"type":"string"}},"required":["lat_lng"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-LatitudeAndLongitudeCombined","type":"object"},{"description":"A hint that the data contains a full Address contained in a single attribute.","properties":{"attribute":{"properties":{"full_address":{"type":"string"}},"required":["full_address"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-FullAddress","type":"object"},{"description":"A hint that the data contains an Address spread out over multiple attributes.","properties":{"attributes":{"additionalProperties":false,"properties":{"country":{"description":"ex: USA","type":"string"},"locality":{"description":"ex: Oakland","type":"string"},"postal_code":{"description":"ex: 94612","type":"string"},"region":{"description":"ex: California","type":"string"},"street_address":{"description":"ex: 1904 Franklin St","type":"string"}},"required":["street_address"],"type":"object"}},"required":["attributes"],"title":"UploadInterpretationHint-AttributeHint-PartialAddress","type":"object"},{"description":"A hint that the data contains a Locality spread out over multiple attributes.","properties":{"attributes":{"additionalProperties":false,"properties":{"country":{"description":"ex: USA","type":"string"},"locality":{"description":"ex: Oakland","type":"string"},"region":{"description":"ex: California","type":"string"}},"required":["locality"],"type":"object"}},"required":["attributes"],"title":"UploadInterpretationHint-AttributeHint-Locality","type":"object"},{"description":"A hint that the data contains a WKT/WKB Literal attribute","properties":{"attribute":{"additionalProperties":false,"properties":{"wkt_wkb_literal":{"type":"string"}},"required":["wkt_wkb_literal"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-WKT_WKB_Literal","type":"object"},{"description":"A hint that the data contains a US Census Tract (Census 2020) attribute. https://www.census.gov/geographies/reference-maps/2020/geo/2020pl-maps/2020-census-tract.html","properties":{"attribute":{"additionalProperties":false,"properties":{"us_census_tract_2020":{"type":"string"}},"required":["us_census_tract_2020"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-US_Census_Tract2020","type":"object"},{"description":"A hint that the data contains a US Core-based statistical area (Census 2020) attribute: https://www.census.gov/geographies/reference-maps/2020/geo/cbsa.html","properties":{"attribute":{"additionalProperties":false,"properties":{"us_cbsa_2020":{"type":"string"}},"required":["us_cbsa_2020"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-US_CBSA_2020","type":"object"},{"description":"A hint that the data contains a US State (Census 2020) attribute.","properties":{"attribute":{"properties":{"us_state_2020":{"type":"string"}},"required":["us_state_2020"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-US_State_2020","type":"object"},{"description":"A hint that the data contains a US County (Census 2020) attribute.","properties":{"attribute":{"properties":{"us_county_2020":{"type":"string"}},"required":["us_county_2020"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-US_County_2020","type":"object"},{"description":"A hint that the data contains US Zip Code (2022) attribute.","properties":{"attribute":{"properties":{"us_zip_code_2022":{"type":"string"}},"required":["us_zip_code_2022"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-US_Zip_Code_2022","type":"object"},{"description":"A hint that the data contains a Eurostat LAU (2021) attribute. https://ec.europa.eu/eurostat/web/nuts/local-administrative-units","properties":{"attribute":{"properties":{"eu_lau_2021":{"type":"string"}},"required":["eu_lau_2021"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-EuropeanUnion_LAU_2021","type":"object"},{"description":"A hint that the data contains a Eurostat NUTS Level 1 (2021) attribute. https://ec.europa.eu/eurostat/web/gisco/geodata/statistical-units/territorial-units-statistics","properties":{"attribute":{"properties":{"eu_nuts_1_2021":{"type":"string"}},"required":["eu_nuts_1_2021"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-European_Union_NUTS_1_2021","type":"object"},{"description":"A hint that the data contains a Eurostat NUTS 2 (2021) attribute. https://ec.europa.eu/eurostat/web/gisco/geodata/statistical-units/territorial-units-statistics","properties":{"attribute":{"properties":{"eu_nuts_2_2021":{"type":"string"}},"required":["eu_nuts_2_2021"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-European_Union_NUTS_2_2021","type":"object"},{"description":"A hint that the data contains a Eurostat NUTS 3 (2021) attribute. https://ec.europa.eu/eurostat/web/gisco/geodata/statistical-units/territorial-units-statistics","properties":{"attribute":{"properties":{"eu_nuts_3_2021":{"type":"string"}},"required":["eu_nuts_3_2021"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-European_Union_NUTS_3_2021","type":"object"},{"description":"A hint that the data contains a Australian ABS postal area (2021) attribute. https://www.abs.gov.au/statistics/standards/australian-statistical-geography-standard-asgs-edition-3/jul2021-jun2026/non-abs-structures/postal-areas","properties":{"attribute":{"properties":{"aus_postal_area_2021":{"type":"string"}},"required":["aus_postal_area_2021"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-Australian_ABS_Postal_Area_2021","type":"object"},{"description":"A hint that the data contains an Administrative Level 0 (Country) attribute. https://en.wikipedia.org/wiki/List_of_administrative_divisions_by_country","properties":{"attribute":{"properties":{"admin_0":{"type":"string"}},"required":["admin_0"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-Admin0","type":"object"},{"description":"A hint that the data contains an Administrative Level 1 (Region) attribute. https://en.wikipedia.org/wiki/List_of_administrative_divisions_by_country","properties":{"attribute":{"properties":{"admin_1":{"type":"string"}},"required":["admin_1"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-Admin1","type":"object"},{"description":"A hint that the data contains a Timezone attribute.","properties":{"attribute":{"properties":{"timezone":{"type":"string"}},"required":["timezone"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-Timezone","type":"object"},{"description":"A hint that the data contains H3 attribute.","properties":{"attribute":{"properties":{"h3":{"type":"string"}},"required":["h3"],"type":"object"}},"required":["attribute"],"title":"UploadInterpretationHint-AttributeHint-H3","type":"object"}],"title":"UploadInterpretationHint"},"SourceCredential-SnowflakePAT":{"additionalProperties":false,"description":"Authenticate to Snowflake with a programmatic access token (PAT)","properties":{"token":{"type":"string"},"type":{"enum":["snowflake_pat"],"type":"string"}},"required":["type","token"],"title":"SourceCredential-SnowflakePAT","type":"object"},"SourceReferenceList":{"items":{"$ref":"#/components/schemas/SourceReference"},"title":"SourceReferenceList","type":"array"},"SourceReference":{"additionalProperties":false,"properties":{"automatic_sync":{"enum":["enabled","paused"],"type":"string"},"connection_type":{"enum":["abs_bucket","bigquery","databricks","feature_server","gcs_bucket","lightning_server","mssql","postgresql","redshift","s3_bucket","snowflake","stac","wfs","wherobots","wms_wmts"],"type":"string"},"created_at":{"nullable":true,"type":"integer"},"id":{"$ref":"#/components/schemas/FeltID"},"last_synced_at":{"nullable":true,"type":"integer"},"links":{"properties":{"self":{"example":"https://felt.com/api/v2/sources/V0dnOMOuTd9B9BOsL9C0UjmqC","type":"string"}},"type":"object"},"name":{"type":"string"},"owner_id":{"$ref":"#/components/schemas/FeltID"},"permissions":{"$ref":"#/components/schemas/SourcePermissions"},"sync_status":{"enum":["syncing","completed","failed"],"type":"string"},"type":{"enum":["source_reference"],"type":"string"},"updated_at":{"nullable":true,"type":"integer"},"workspace_id":{"$ref":"#/components/schemas/FeltID"}},"title":"SourceReference","type":"object"},"CommentResolved":{"properties":{"comment_id":{"$ref":"#/components/schemas/FeltID"}},"title":"CommentResolved","type":"object"},"LayerGroupParamsList":{"items":{"$ref":"#/components/schemas/LayerGroupParams"},"title":"LayerGroupParamsList","type":"array"},"SourceCredentialUpdate-AwsAssumeRole":{"additionalProperties":false,"description":"Authenticate to AWS S3","properties":{"role_arn":{"type":"string"},"role_session_name":{"type":"string"},"type":{"enum":["aws_assume_role"],"type":"string"}},"required":["type"],"title":"SourceCredentialUpdate-AwsAssumeRole","type":"object"},"SourceCredential-AwsAssumeRole":{"additionalProperties":false,"description":"Authenticate to AWS S3","properties":{"role_arn":{"type":"string"},"role_session_name":{"type":"string"},"type":{"enum":["aws_assume_role"],"type":"string"}},"required":["type","role_arn","role_session_name"],"title":"SourceCredential-AwsAssumeRole","type":"object"},"ServiceUnavailableError":{"properties":{"errors":{"items":{"properties":{"detail":{"type":"string"},"source":{"properties":{"parameter":{"type":"string"}},"type":"object"},"title":{"type":"string"}},"type":"object"},"type":"array"}},"title":"ServiceUnavailableError","type":"object"},"LayerUpdateStyleParams":{"properties":{"style":{"description":"The new layer style, specified in Felt Style Language format","type":"object"}},"required":["style"],"title":"LayerUpdateStyleParams","type":"object"}},"securitySchemes":{"bearerAuth":{"bearerFormat":"YOUR_API_KEY","scheme":"bearer","type":"http"}}},"info":{"description":"Felt REST API v2.0","title":"Felt","version":"2.0"},"openapi":"3.0.0","paths":{"/api/v2/maps/{map_id}/layer_groups/{layer_group_id}":{"delete":{"callbacks":{},"description":"Permanently remove a layer group and all its contained layers from a map.\n\n{% hint style=\"warning\" %}\nThis action cannot be undone. The layer group and all its contained layers will be permanently removed from the map.\n{% endhint %}\n","operationId":"delete_map_layer_group","parameters":[{"description":"The ID of the map to delete the layer group from","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer group to delete","in":"path","name":"layer_group_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete map layer group","tags":["Layers"]},"get":{"callbacks":{},"description":"Retrieve detailed information about a specific layer group including its layers and configuration.","operationId":"show_map_layer_group","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"","in":"path","name":"layer_group_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerGroup"}}},"description":"Layer Group"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get map layer group","tags":["Layers"]},"post":{"callbacks":{},"description":"Update layer group properties including name, visibility, and organization settings.","operationId":"update_map_layer_group","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"","in":"path","name":"layer_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerGroupUpdateParams"}}},"description":"LayerGroup parameters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerGroup"}}},"description":"LayerGroup"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update map layer group","tags":["Layers"]}},"/api/v2/maps/{map_id}/layers/{layer_id}/publish":{"post":{"callbacks":{},"description":"Make a layer available in the workspace library for reuse by team members.","operationId":"publish_map_layer","parameters":[{"description":"The ID of the map where the layer is located","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer to publish","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishLayerParams"}}},"description":"Publish layer params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Layer"}}},"description":"Publish layer response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Publish map layer","tags":["Layer Library"]}},"/api/v2/sources/{source_id}/update":{"post":{"callbacks":{},"description":"Update data source connection settings, access permissions, or configuration details.\n\nConnecting the Source and inspecting its datasets will happen asynchronously after the API response is returned. To determine when the inspection process has completed, poll the Show Source endpoint and check for `sync_status: completed`.\n","operationId":"update_source","parameters":[{"description":"The ID of the source to update","in":"path","name":"source_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceUpdateParams"}}},"description":"Source update params","required":false},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceReference"}}},"description":"Source reference"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update source","tags":["Sources"]}},"/api/v2/maps/{map_id}/elements/{element_id}":{"delete":{"callbacks":{},"description":"Permanently delete an element from a map.\n\n{% hint style=\"warning\" %}\nThis action cannot be undone. The element will be permanently removed from the map.\n{% endhint %}\n","operationId":"delete_map_element","parameters":[{"description":"The ID of the map to delete the element from.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the element to delete.","in":"path","name":"element_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete map element","tags":["Elements"]}},"/api/v2/projects":{"get":{"callbacks":{},"description":"Retrieve all projects accessible to the authenticated user within the workspace.","operationId":"list_projects","parameters":[{"description":"Only needed when using the API as part of a plugin","in":"query","name":"workspace_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectReferenceList"}}},"description":"Projects"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List projects","tags":["Projects"]},"post":{"callbacks":{},"description":"Create a new project with specified name and visibility settings within the workspace.","operationId":"create_project","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectCreateParams"}}},"description":"Project create params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"Project"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create project","tags":["Projects"]}},"/api/v2/maps/{map_id}/comments/export":{"get":{"callbacks":{},"description":"Export all comments and replies from a map in `CSV`, `JSON`, or `GeoJSON` format.","operationId":"export_map_comments","parameters":[{"description":"The ID of the map to export comments from.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The format to export the comments in: 'csv', 'json' (default), or 'geojson'","in":"query","name":"format","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentExport"}}},"description":"Comment export response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Export map comments","tags":["Comments"]}},"/api/v2/sources":{"get":{"callbacks":{},"description":"Retrieve all data sources accessible to the authenticated user within the workspace.","operationId":"list_sources","parameters":[{"description":"Only needed when using the API as part of a plugin","in":"query","name":"workspace_id","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceReferenceList"}}},"description":"Source references"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List sources","tags":["Sources"],"x-sort-order":0},"post":{"callbacks":{},"description":"Create a new data source connection with authentication credentials and access permissions.\n\nConnecting the Source and inspecting its datasets will happen asynchronously after the API response is returned. To determine when the inspection process has completed, poll the Show Source endpoint and check for `sync_status: completed`.\n","operationId":"create_source","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCreateParams"}}},"description":"Source create params","required":false},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceReference"}}},"description":"Source reference"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create source","tags":["Sources"]}},"/api/v2/maps/{map_id}/add_source_layer":{"post":{"callbacks":{},"description":"Create a new layer from an existing data source connection (database, API, or file).","operationId":"add_map_layer_from_source","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddSourceLayerParams"}}},"description":"AddSourceLayerParams","required":false},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddSourceLayerAccepted"}}},"description":"AddSourceLayerAccepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Add layer from data source","tags":["Layer Uploads"]}},"/api/v2/sources/{source_id}/sync":{"post":{"callbacks":{},"description":"Trigger a full data synchronization from the source to update all connected layers with latest data.\n\nSyncing will happen asynchronously after the API response is returned. To determine when the inspection process has completed, poll the Show Source endpoint and check for `sync_status: completed`.\n","operationId":"sync_source","parameters":[{"description":"The ID of the source to sync","in":"path","name":"source_id","required":true,"schema":{"type":"string"}}],"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceReference"}}},"description":"Source reference"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Sync source","tags":["Sources"]}},"/api/v2/maps/{map_id}/layers/{layer_id}/refresh":{"post":{"callbacks":{},"description":"Trigger a data refresh for a layer from its original data source to pull in the latest updates.\n\nAfter uploading a file or URL, you may want to update the resulting layer with new data. The process is quite similar to the upload:\n\n* For URL uploads, simply making a single `POST` request to the refresh endpoint is enough\n* For file refreshes, the response of the initial `POST` request will include a URL and some pre-signed attributes, which will be used to upload the new file to Amazon S3.\n\n{% hint style=\"info\" %}\nWith the `felt_python` library, you can refresh a layer with a simple function call:\n{% endhint %}\n\n```python\nfrom felt_python import (refresh_file_layer, refresh_url_layer)\n\nrefresh_file_layer(map_id, layer_id, file_name=\"features.geojson\")\nrefresh_url_layer(map_id, layer_id)\n```\n","operationId":"refresh_map_layer","parameters":[{"description":"The ID of the map hosting the layer to refresh","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer to refresh","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}},"description":"Refresh response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Refresh map layer","tags":["Layer Uploads"]}},"/api/v2/sources/{source_id}":{"delete":{"callbacks":{},"description":"Permanently delete a data source connection and all its associated layers and data.\n\n{% hint style=\"warning\" %}\nAny layers created from the Source will remain after it is deleted, but they will no longer be refreshed.\n{% endhint %}\n","operationId":"delete_source","parameters":[{"description":"The ID of the source to delete","in":"path","name":"source_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete source","tags":["Sources"]},"get":{"callbacks":{},"description":"Retrieve detailed configuration and connection information for a specific data source.","operationId":"show_source","parameters":[{"description":"The ID of the source to show","in":"path","name":"source_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Source"}}},"description":"Source"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get source","tags":["Sources"]}},"/api/v2/maps/{map_id}/layers":{"get":{"callbacks":{},"description":"Retrieve all layers from a map, including uploaded files and connected data sources.","operationId":"list_map_layers","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerList"}}},"description":"Layers list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List map layers","tags":["Layers"]},"post":{"callbacks":{},"description":"Update layer properties including styling, visibility, grouping, and other configuration options.","operationId":"update_map_layer","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerUpdateParamsList"}}},"description":"Layer params list","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerList"}}},"description":"Layer list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update map layer","tags":["Layers"]}},"/api/v2/maps/{map_id}/upload":{"post":{"callbacks":{},"description":"Upload a file or import data from a URL to create a new layer on the map.\n\nThe `/upload` endpoint can be used for both URL and file uploads:\n\n* For URL uploads, simply making a single `POST` request to the upload endpoint is enough\n* For file uploads, the response of the initial `POST` request contain information you will use to upload the file to Amazon S3\n\nCheck our [Upload Anything](https://help.felt.com/upload-anything) docs to see what URLs are supported.\n\n#### **Uploading the file to Amazon S3**\n\nLayer files aren't uploaded directly to the Felt API. Instead, they are uploaded to an S3 bucket.\n\nThe response to this API request will include a URL and pre-signed params for you to use to upload your file. Only a single file may be uploaded — if you wish to upload several files at once, consider wrapping them in a zip file.\n\nTo upload the file, you must perform a multipart upload, and include the file contents in the `file` field.\n\n{% hint style=\"info\" %}\nWith the `felt_python` library, you can upload a file with a simple function call:\n{% endhint %}\n\n```python\nfrom felt_python import upload_file\n\nupload_file(map_id, file_name=\"features.geojson\", layer_name=\"My new layer\")\n```\n","operationId":"upload_map_layer","parameters":[{"description":"The ID of the map to upload the layer to.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadLayerParams"}}},"description":"Upload layer params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadResponse"}}},"description":"Upload layer response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Upload map layer","tags":["Layer Uploads"],"x-sort-order":0}},"/api/v2/maps/{map_id}/layers/{layer_id}/get_export_link":{"get":{"callbacks":{},"description":"Generate a direct download link for layer data export.\n\nGet a link to export a layer as a GeoPackage (vector layers) or GeoTIFF (raster layers).\n","operationId":"create_map_layer_export_link","parameters":[{"description":"The ID of the map where the layer is located","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer to export","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExportLink"}}},"description":"Export link"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}},"description":"ServiceUnavailableError"}},"security":[{"bearerAuth":[]}],"summary":"Create layer export link","tags":["Layer Exports"]}},"/api/v2/maps/{map_id}/layers/{layer_id}/custom_exports/{export_id}":{"get":{"callbacks":{},"description":"Check the processing status and download availability of a custom export request.\n\nIf the export is successful, the response will include a `download_url` for accessing the exported data.\n","operationId":"poll_map_layer_custom_export","parameters":[{"description":"The ID of the map where the layer is located","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer to export","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the export","in":"path","name":"export_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomExportRequestStatus"}}},"description":"Custom export request status"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Check custom export status","tags":["Layer Exports"]}},"/api/v2/maps/{map_id}/layer_groups":{"get":{"callbacks":{},"description":"Retrieve all layer groups from a map to see how layers are organized.","operationId":"list_map_layer_groups","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerGroupList"}}},"description":"Layers Groups"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List map layer groups","tags":["Layers"]},"post":{"callbacks":{},"description":"Update properties for multiple layer groups in a single request for efficient bulk operations.","operationId":"update_map_layer_groups","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerGroupParamsList"}}},"description":"LayerGroup parameters list","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerGroupList"}}},"description":"LayerGroup list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update map layer groups","tags":["Layers"]}},"/api/v2/maps/{map_id}/comments/{comment_id}/resolve":{"post":{"callbacks":{},"description":"Mark a comment thread as resolved.","operationId":"resolve_map_comment","parameters":[{"description":"The ID of the map that contains the comment.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the comment to resolve.","in":"path","name":"comment_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentResolved"}}},"description":"Comment resolved response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Resolve map comment","tags":["Comments"]}},"/api/v2/maps/{map_id}/layers/{layer_id}/update_style":{"post":{"callbacks":{},"description":"Update the visual styling properties of a layer including colors, symbols, and rendering options.","operationId":"update_map_layer_style","parameters":[{"description":"The ID of the map where the layer is located","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer to update the style of","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerUpdateStyleParams"}}},"description":"Layer style parameters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Layer"}}},"description":"Layer"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update layer style","tags":["Layers"]}},"/api/v2/sources/{source_id}/credentials":{"post":{"callbacks":{},"description":"Add authentication credentials to an existing data source for secure access.\n\nSome sources may need to be configured with additional credentials to work with Felt. Access to S3 Buckets, for example, may be protected by IAM policies. Adding a `SourceCredential-AwsAssumeRole` credential to your S3 Bucket source allows Felt to connect to a private source.\n\nSensitive fields in credentials, like `SourceCredential-KeyPair.private_key`, will be returned as `felt:redacted`.\n","operationId":"create_source_credential","parameters":[{"description":"The ID of the source to attach the credential","in":"path","name":"source_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCredentialCreateParams"}}},"description":"Source create credential params","required":false},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCredential"}}},"description":"Source credential created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create source credential","tags":["Sources"]}},"/api/v2/maps/{map_id}/layers/{layer_id}/components":{"get":{"callbacks":{},"description":"Returns all components on a layer, ordered as they appear in the app.\n","operationId":"list_layer_components","parameters":[{"description":"The ID of the map the layer belongs to.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer the components belong to.","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerComponentList"}}},"description":"Layer components list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List layer components","tags":["Layer Components"]},"post":{"callbacks":{},"description":"Creates a component on a layer.\n\n{% hint style=\"info\" %}\nThe component type is set at creation and cannot be changed later.\n{% endhint %}\n","operationId":"create_layer_component","parameters":[{"description":"The ID of the map the layer belongs to.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer the component belongs to.","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"examples":{"bar_chart":{"summary":"Bar chart","value":{"config":{"selection":["zoning","in",["residential"]]},"data":{"aggregate":"sum","aggregate_by":"area_sqm","format":{"thousandSeparated":true},"group_by":"zoning"},"title":"Total area by zoning","type":"bar_chart"}},"filter":{"summary":"Filter","value":{"config":{"plurality":"single","selection":["zoning","in",["commercial"]],"sorting":"Alphabetically"},"data":{"filter_by":"zoning"},"type":"filter"}},"histogram":{"summary":"Histogram","value":{"data":{"aggregate":"avg","aggregate_by":"perimeter_m","group_by":"area_sqm","grouping":{"steps":{"count":12,"type":"equal-intervals"},"type":"numeric"}},"title":"Perimeter by area bin","type":"histogram"}},"statistic":{"summary":"Statistic","value":{"config":{"reactive":false,"viewport_mode":"viewport"},"data":{"aggregate":"avg","aggregate_by":"area_sqm","format":{"mantissa":2,"thousandSeparated":true}},"title":"Average parcel area","type":"statistic"}},"time_series":{"summary":"Time series","value":{"data":{"aggregate":"count","group_by":"permit_date","grouping":{"interval":"month","type":"time-interval"}},"title":"Permits over time","type":"time_series"}}},"schema":{"$ref":"#/components/schemas/LayerComponentCreateParams"}}},"description":"Layer component create params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerComponent"}}},"description":"Layer component"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create layer component","tags":["Layer Components"]}},"/api/v2/maps/{map_id}/move":{"post":{"callbacks":{},"description":"Move a map to a different project or folder within the same workspace. Project IDs and Folder IDs can be found inside map settings.","operationId":"move_map","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapMoveParams"}}},"description":"Map move params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Map"}}},"description":"Map"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Move map","tags":["Maps"]}},"/api/v2/maps/{map_id}/duplicate":{"post":{"callbacks":{},"description":"Create a copy of a map with all its layers, elements, and configuration.","operationId":"duplicate_map","parameters":[{"description":"The ID of the map to duplicate","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapDuplicateParams"}}},"description":"Map duplicate params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Map"}}},"description":"Duplicated Map"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Duplicate map","tags":["Maps"]}},"/api/v2/maps":{"post":{"callbacks":{},"description":"Create a new map with optional customization options.\n\nSeveral aspects can be customized when creating a new map, including:\n\n* Title\n* Initial location (latitude, longitude and zoom level)\n* Sharing permissions (defaults to viewing and commenting for users with the map URL)\n* An array of URLs to import on map creation\n","operationId":"create_map","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapCreateParams"}}},"description":"Map create params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Map"}}},"description":"Map"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create map","tags":["Maps"],"x-sort-order":0}},"/api/v2/maps/{map_id}/elements":{"get":{"callbacks":{},"description":"Returns a GeoJSON `FeatureCollection` containing all the elements in a map that are not in an element group.","operationId":"list_map_elements","parameters":[{"description":"The ID of the map to list elements from.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSON"}}},"description":"GeoJSON"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List map elements","tags":["Elements"],"x-sort-order":0},"post":{"callbacks":{},"description":"Create new elements or update existing ones on a map using GeoJSON data.\nEach element is represented by a feature in the `POST`'ed GeoJSON Feature Collection.\nFor each feature, including an existing element `id` will result in the element being updated on the map. If no element `id` is provided (or a non-existent one), a new element will be created.\n\n{% hint style=\"info\" %}\nThe maximum payload size for any `POST` to the Felt API is 1MB. Additionally, complex element geometry may be automatically simplified. If you require large, complex geometries, consider uploading your data as a Data Layer.&#x20;\n{% endhint %}\n","operationId":"upsert_map_elements","parameters":[{"description":"The ID of the map to create the elements in","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSON"}}},"description":"Upsert element parameters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSON"}}},"description":"GeoJSON"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create or update map elements","tags":["Elements"]}},"/api/v2/maps/{map_id}/embed_token":{"post":{"callbacks":{},"description":"Creates a short-lived (15 minutes) token for authenticating a visitor to view a private embedded map view without being logged into Felt. You must provide a `user_email` to associate the token with the end user that will be viewing the map.\nEach end user should be a member of your Felt workspace with a viewer, editor, or admin role assigned.\n### Usage\n* Generate a token by making a call to this API from your server\n* Securely pass the token to your frontend client\n* Include the token as a query parameter on the Embed URL in an iframe\n\n```html\n<iframe src=\"https://felt.com/embed/map/{mapId}?token={token}\"></iframe>\n```\n\n#### Enabling Layer Export\n\nYou can allow EmbedToken based page views to export layer data.\n\n* Turn on \"Viewer permissions: Export data\" in Map settings\n","operationId":"create_map_embed_token","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"Each token must be associated with the email address of the user who will use it.","in":"query","name":"user_email","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedToken"}}},"description":"EmbedToken"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create an Embed Token","tags":["Embed Tokens"]}},"/api/v2/maps/{map_id}/update":{"post":{"callbacks":{},"description":"Update map properties including title, description, and access permissions.","operationId":"update_map","parameters":[{"description":"The ID of the map to update","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapUpdateParams"}}},"description":"Map update params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Map"}}},"description":"Map"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update map","tags":["Maps"]}},"/api/v2/maps/{map_id}/layer_groups/{layer_group_id}/publish":{"post":{"callbacks":{},"description":"Make a layer group available in the workspace library for reuse by team members.","operationId":"publish_map_layer_group","parameters":[{"description":"The ID of the map where the layer group is located","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer group to publish","in":"path","name":"layer_group_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishLayerGroupParams"}}},"description":"Publish layer group params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerGroup"}}},"description":"Publish layer group response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Publish map layer group","tags":["Layer Library"]}},"/api/v2/projects/{project_id}":{"delete":{"callbacks":{},"description":"Permanently delete a project and all its contained maps and folders.\n\n{% hint style=\"danger\" %}\nCaution: Deleting a project deletes all of the folders and maps inside!\n{% endhint %}\n","operationId":"delete_project","parameters":[{"description":"The ID of the Project to delete. Note: This will delete all Folders and Maps inside the project!","in":"path","name":"project_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete project","tags":["Projects"]},"get":{"callbacks":{},"description":"Retrieve detailed information about a specific project including metadata, permissions, and references to the maps in the project.","operationId":"show_project","parameters":[{"description":"","in":"path","name":"project_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"Project"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get project","tags":["Projects"]}},"/api/v2/maps/{map_id}/layers/{layer_id}":{"delete":{"callbacks":{},"description":"Permanently remove a layer from a map.\n\n{% hint style=\"warning\" %}\nThis action cannot be undone. The layer and all its data will be permanently removed from the map.\n{% endhint %}\n","operationId":"delete_map_layer","parameters":[{"description":"The ID of the map to delete the layer from","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer to delete","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete map layer","tags":["Layers"]},"get":{"callbacks":{},"description":"Retrieve detailed information about a specific layer including data source, styling, and configuration.","operationId":"show_map_layer","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Layer"}}},"description":"Layer"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get map layer","tags":["Layers"],"x-sort-order":0}},"/api/v2/projects/{project_id}/update":{"post":{"callbacks":{},"description":"Update project properties including name and visibility settings.","operationId":"update_project","parameters":[{"description":"The ID of the project to update","in":"path","name":"project_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProjectUpdateParams"}}},"description":"Project update params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Project"}}},"description":"Project"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update project","tags":["Projects"]}},"/api/v2/sources/{source_id}/credentials/{credential_id}/update":{"post":{"callbacks":{},"description":"Update existing authentication credentials for a data source connection.\n\nSensitive fields in credentials, like `SourceCredential-KeyPair.private_key`, will be returned as `felt:redacted`.\n","operationId":"update_source_credential","parameters":[{"description":"The ID of the source that the credential belongs to","in":"path","name":"source_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the credential","in":"path","name":"credential_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCredentialUpdateParams"}}},"description":"Source credential update params","required":false},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCredential"}}},"description":"Source credential updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update source credential","tags":["Sources"]}},"/api/v2/sources/{source_id}/credentials/{credential_id}":{"delete":{"callbacks":{},"description":"Remove authentication credentials from a data source connection.","operationId":"delete_source_credential","parameters":[{"description":"The ID of the source that the credential belongs to","in":"path","name":"source_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the credential to delete","in":"path","name":"credential_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete source credential","tags":["Sources"]}},"/api/v2/maps/{map_id}/element_groups/{group_id}":{"get":{"callbacks":{},"description":"Retrieve all elements from a specific group as GeoJSON.","operationId":"show_map_element_group","parameters":[{"description":"The ID of the map.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the element group.","in":"path","name":"group_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeoJSON"}}},"description":"GeoJSON"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get map element group","tags":["Elements"]}},"/api/v2/library":{"get":{"callbacks":{},"description":"List all layers in your workspace's library, or the felt layer library.\n\nYou can add a layer from the library to a map by using the \"Duplicate layers\" API endpoint (`POST /api/v2/duplicate_layers`) and the layer `id` provided by this endpoint.\n","operationId":"list_library_layers","parameters":[{"description":"","in":"query","name":"source","required":false,"schema":{"default":"workspace","description":"Defaults to listing library layers for your \"workspace\". Use \"felt\" to list layers from the Felt data library. Use \"all\" to list layers from both sources.","enum":["workspace","felt","all"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerLibrary"}}},"description":"LayerLibrary"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List library layers","tags":["Layer Library"]}},"/api/v2/maps/{map_id}":{"delete":{"callbacks":{},"description":"Permanently delete a map and all its associated data.\n\n{% hint style=\"warning\" %}\nThis action cannot be undone. The map and all its layers, elements, and comments will be permanently removed.\n{% endhint %}\n","operationId":"delete_map","parameters":[{"description":"The ID of the map to delete","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete map","tags":["Maps"]},"get":{"callbacks":{},"description":"Retrieve a map with its metadata including title, URL, thumbnail, and timestamps.","operationId":"show_map","parameters":[{"description":"","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Map"}}},"description":"Map"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get map","tags":["Maps"]}},"/api/v2/maps/{map_id}/element_groups":{"get":{"callbacks":{},"description":"Returns a list of GeoJSON `FeatureCollection`s, one for each element group in the map.","operationId":"list_map_element_groups","parameters":[{"description":"The ID of the map to list groups from.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElementGroupList"}}},"description":"ElementGroupList"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"List map element groups","tags":["Elements"]},"post":{"callbacks":{},"description":"Create new element groups or update existing ones.\n\nFor each Element Group, including an existing Element Group `id` will result in the Element Group being updated. If no `id` is provided, a new Element Group will be created.\n\n\n{% hint style=\"info\" %}\nThe maximum payload size for any `POST` to the Felt API is 1MB. Additionally, complex element geometry may be automatically simplified. If you require large, complex geometries, consider uploading your data as a Data Layer.&#x20;\n{% endhint %}\n","operationId":"upsert_map_element_groups","parameters":[{"description":"The ID of the map to create the group in","in":"path","name":"map_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElementGroupParamsList"}}},"description":"Upsert element groups parameters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ElementGroupList"}}},"description":"Element group list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Create or update map element groups","tags":["Elements"]}},"/api/v2/maps/{map_id}/layers/{layer_id}/custom_export":{"post":{"callbacks":{},"description":"Start a custom export with specific format and filter options for layer data.\n\nExport requests are asynchronous. A successful response will return a `poll_endpoint` to check the status of the export using the poll custom export endpoint.\n","operationId":"create_map_layer_custom_export","parameters":[{"description":"The ID of the map where the layer is located","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer to export","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomExportParams"}}},"description":"Custom export params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomExportResponse"}}},"description":"Custom export response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServiceUnavailableError"}}},"description":"ServiceUnavailableError"}},"security":[{"bearerAuth":[]}],"summary":"Create custom layer export","tags":["Layer Exports"]}},"/api/v2/maps/{map_id}/comments/{comment_id}":{"delete":{"callbacks":{},"description":"Permanently delete a comment or reply from the map.\n\n{% hint style=\"warning\" %}\nThis action cannot be undone. The comment or reply will be permanently removed from the map.\n{% endhint %}\n","operationId":"delete_map_comment","parameters":[{"description":"The ID of the map that contains the comment.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the comment to delete.","in":"path","name":"comment_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete map comment","tags":["Comments"]}},"/api/v2/user":{"get":{"callbacks":{},"description":"Retrieve profile information and settings for the authenticated user.","operationId":"show_current_user","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/User"}}},"description":"User"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get current user","tags":["Users"]}},"/api/v2/maps/{map_id}/layers/{layer_id}/components/{component_id}":{"delete":{"callbacks":{},"description":"Deletes a component from the layer.\n\n{% hint style=\"warning\" %}\nThis cannot be undone.\n{% endhint %}\n","operationId":"delete_layer_component","parameters":[{"description":"The ID of the map the layer belongs to.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer the component belongs to.","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer component.","in":"path","name":"component_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Delete layer component","tags":["Layer Components"]},"get":{"callbacks":{},"description":"Returns a single layer component. Includes all fields.\n","operationId":"show_layer_component","parameters":[{"description":"The ID of the map the layer belongs to.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer the component belongs to.","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer component.","in":"path","name":"component_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerComponent"}}},"description":"Layer component"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Get layer component","tags":["Layer Components"]},"post":{"callbacks":{},"description":"Partially update the provided fields of a component.\n\n{% hint style=\"info\" %}\nOmitted fields keep their current value. A component's type is immutable and is not part of the update body.\n{% endhint %}\n","operationId":"update_layer_component","parameters":[{"description":"The ID of the map the layer belongs to.","in":"path","name":"map_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer the component belongs to.","in":"path","name":"layer_id","required":true,"schema":{"type":"string"}},{"description":"The ID of the layer component.","in":"path","name":"component_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerComponentUpdateParams"}}},"description":"Layer component update params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LayerComponent"}}},"description":"Layer component"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Update layer component","tags":["Layer Components"]}},"/api/v2/duplicate_layers":{"post":{"callbacks":{},"description":"Copy layers or layer groups to other maps, preserving styling and configuration.","operationId":"duplicate_map_layers","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateLayersParams"}}},"description":"Duplicate Layers Params","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DuplicateLayersResponse"}}},"description":"Duplicate Layers Response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnauthorizedError"}}},"description":"UnauthorizedError"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotFoundError"}}},"description":"NotFoundError"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"429":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JsonErrorResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InternalServerError"}}},"description":"InternalServerError"}},"security":[{"bearerAuth":[]}],"summary":"Duplicate map layers","tags":["Layers"]}}},"security":[],"servers":[{"url":"https://felt.com","variables":{}}],"tags":[{"description":"Maps are the centerpiece of Felt.\n\nWith these APIs, you can create, retrieve, update, delete, move, and duplicate maps programmatically.\n","name":"Maps","x-page-description":"APIs for building maps","x-page-icon":"map-location"},{"description":"Layers enable you to visualize, style and interact with your spatial data.\n\nWith these APIs, you can upload data, manage layer styling, publish and refresh live data layers.\n","name":"Layers","x-page-description":"APIs to visualize spatial data","x-page-icon":"layer-group"},{"description":"With these APIs, you can upload your data to create new layers.\n","name":"Layer Uploads","x-page-description":"APIs to upload data","x-page-icon":"layer-group","x-parent":"Layers"},{"description":"With these APIs, you can publish your layers to your workspace library.\n","name":"Layer Library","x-page-description":"APIs to publish layers","x-page-icon":"layer-group","x-parent":"Layers"},{"description":"With these APIs, you can export data to CSV, GeoJSON, and other formats.\n","name":"Layer Exports","x-page-description":"APIs to export layer data","x-page-icon":"layer-group","x-parent":"Layers"},{"description":"With these APIs, you can create and edit a layer's components.\n","name":"Layer Components","x-page-description":"APIs to build dashboards","x-page-icon":"chart-simple","x-parent":"Layers"},{"description":"Elements enable you to annotate maps with custom shapes, text, and markers.\n\nWith these APIs, you can create, update, and delete map elements.\n","name":"Elements","x-page-description":"APIs for drawing spatially","x-page-icon":"shapes"},{"description":"Users represent the people in your workspace.\n\nWith these APIs, you can retrieve user profile information.\n","name":"Users","x-page-description":"APIs for user information","x-page-icon":"user"},{"description":"Comments bring conversations to mapping.\n\nWith these APIs, you can export, resolve, and delete map comments and collaboration threads.\n","name":"Comments","x-page-description":"APIs for programatic collaboration","x-page-icon":"comment"},{"description":"Embed tokens enable safely sharing your private maps.\n\nWith these APIs, you can generate secure tokens for embedding maps.\n","name":"Embed Tokens","x-page-description":"APIs to share maps securely","x-page-icon":"code"},{"description":"Sources connect your databases to Felt.\n\nWith these APIs, you can configure data source connections, credentials, and sync settings to create live maps.\n","name":"Sources","x-page-description":"APIs to connect your data","x-page-icon":"database"},{"description":"Projects help you organize maps and manage team permissions.\n\nWith these APIs, you can manage the projects in your workspace.\n","name":"Projects","x-page-description":"APIs to organize maps","x-page-icon":"folder"}]}