Felt Layer Library API

With these APIs, you can publish your layers to your workspace library.

OpenAPI Specification

felt-layer-library-api-openapi.yml Raw ↑
openapi: 3.0.0
info:
  description: Felt REST API v2.0
  title: Felt Comments Layer Library API
  version: '2.0'
servers:
- url: https://felt.com
  variables: {}
security: []
tags:
- description: 'With these APIs, you can publish your layers to your workspace library.

    '
  name: Layer Library
  x-page-description: APIs to publish layers
  x-page-icon: layer-group
  x-parent: Layers
paths:
  /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/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/library:
    get:
      callbacks: {}
      description: 'List all layers in your workspace''s library, or the felt layer library.


        You 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.

        '
      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
components:
  schemas:
    PublishLayerGroupParams:
      additionalProperties: false
      properties:
        name:
          description: The name to publish the layer group under
          example: My Layer
          type: string
      title: PublishLayerGroupParams
      type: object
    FeltID:
      example: luCHyMruTQ6ozGk3gPJfEB
      format: felt_id
      nullable: false
      title: FeltID
      type: string
    PublishLayerParams:
      additionalProperties: false
      properties:
        name:
          description: The name to publish the layer under
          example: My Layer
          type: string
      title: PublishLayerParams
      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
    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
    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
    Layer:
      additionalProperties: false
      properties:
        attributes:
          description: List of the attributes on the layer
          items:
            properties:
              name:
                description: The name of the attribute
                type: string
              type:
                description: The type of the attribute
                enum:
                - INTEGER
                - REAL
                - TEXT
                - BOOLEAN
                - DATE
                - DATETIME
                - GEOMETRY
                type: string
            required:
            - name
            type: object
          nullable: true
          type: array
        caption:
          nullable: true
          type: string
        geometry_type:
          enum:
          - Line
          - Point
          - Polygon
          - Raster
          nullable: true
          type: string
        hide_from_legend:
          nullable: false
          type: boolean
        id:
          $ref: '#/components/schemas/FeltID'
        is_spreadsheet:
          nullable: true
          type: boolean
        last_refreshed_at:
          description: ISO 8601 timestamp of when the layer's data was last updated. This includes scheduled refreshes, manual refreshes, and direct feature edits.
          format: date-time
          nullable: true
          type: string
        legend_display:
          description: Controls how the layer is displayed in the legend.
          enum:
          - default
          - name_only
          nullable: true
          type: string
        legend_visibility:
          description: Controls whether or not the layer is displayed in the legend. Defaults to "show".
          enum:
          - hide
          - show
          nullable: true
          type: string
        links:
          properties:
            self:
              example: https://felt.com/api/v2/maps/V0dnOMOuTd9B9BOsL9C0UjmqC/layers/k441enUxQUOnZqc1ZvNsDA
              type: string
          type: object
        metadata:
          $ref: '#/components/schemas/LayerMetadata'
        name:
          nullable: false
          type: string
        next_refresh_at:
          description: ISO 8601 timestamp of when the next scheduled refresh will occur. Null if refresh is disabled or paused.
          format: date-time
          nullable: true
          type: string
        ordering_key:
          description: A sort order key used for ordering layers and layer groups in the legend
          nullable: true
          type: integer
        paused_reason:
          description: Why the layer's refresh is paused. Null when not paused.
          enum:
          - consecutive_failures
          nullable: true
          type: string
        progress:
          format: float
          nullable: false
          type: number
        refresh_period:
          enum:
          - 15 min
          - 30 min
          - hour
          - 3 hours
          - 6 hours
          - 12 hours
          - day
          - week
          - month
          - disabled
          type: string
        refresh_status:
          description: Whether scheduled refresh is active, paused (due to failures), or disabled
          enum:
          - active
          - paused
          - disabled
          type: string
        status:
          enum:
          - uploading
          - processing
          - failed
          - completed
          nullable: false
          type: string
        style:
          description: The Felt Style Language style for the layer
          type: object
        subtitle:
          deprecated: true
          description: 'Deprecated: use `caption` instead.'
          nullable: true
          type: string
        tile_url:
          description: The tile URL for this layer
          nullable: true
          type: string
        type:
          enum:
          - layer
          type: string
      required:
      - id
      - type
      - hide_from_legend
      - status
      - caption
      - name
      - progress
      - geometry_type
      - style
      - refresh_period
      - refresh_status
      title: Layer
      type: object
    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
    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
    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
    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
  securitySchemes:
    bearerAuth:
      bearerFormat: YOUR_API_KEY
      scheme: bearer
      type: http