HummingDeck Room Labels API

The Room Labels API from HummingDeck — 2 operation(s) for room labels.

Operations 4

GET /room-labels List room labels #
POST /room-labels Create a room label #
PATCH /room-labels/{labelId} Update a room label #
DELETE /room-labels/{labelId} Delete a room label #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hummingdeck:hummingdeck-room-labels-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hummingdeck-room-labels-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: HummingDeck Room Labels API
  version: 1.12.0
  description: 'The HummingDeck API. Provides document search, upload and replacement, room creation and structure (tabs, documents, links, embeds, sections), room archive and restore, document and room share link management, company/contact find-or-create operations, view and decision events, and webhooks for the Zapier integration.


    Two credential types are accepted, and they are not interchangeable:


    **Workspace API key** (`Authorization: Bearer hd_api_...`): issued by a workspace owner or admin in Workspace settings, Integrations, HummingDeck API. REST API access is available by request on Business and is enabled per workspace after review. A workspace can have multiple named keys, each with an explicit set of scopes and independent revocation. Each write scope includes the matching read scope; read scopes do not grant write access. The raw key is shown once at creation and is not retrievable afterwards; it expires one year after creation. Every key is bound permanently to its workspace, so a request cannot select or override its workspace. Webhook subscription endpoints are not available to this credential.


    **Zapier OAuth** (`Authorization: Bearer {access_token}`): issued through the OAuth authorization flow when a workspace connects the Zapier integration. Access tokens expire after 30 days; the 90-day refresh token obtains a new one. This is the only credential that can create or delete webhook subscriptions.


    Each operation documents its primary always-required workspace-key capability in `x-required-api-key-scope`. Additional always-required capabilities appear in `x-additional-required-api-key-scopes`; body-dependent capabilities appear in `x-conditional-api-key-scopes`, keyed by scope with the exact trigger as its value. `GET /me` requires no scope. A valid key that lacks a required capability receives `403 INSUFFICIENT_SCOPE`; the response names `requiredScope`.


    Manual keys and Zapier OAuth connections are limited per credential to 600 reads per 5 minutes, 120 writes per minute, 60 room-view reads per minute, and 20 uploads per hour. Shared workspace ceilings are twice those values across all credentials. Failed bearer authentication and invalid OAuth client authentication are each limited per trusted client IP to 60 attempts per 5 minutes. Requests may receive `429 RATE_LIMITED`; use the delta seconds in `Retry-After` before retrying. Rooms API JSON bodies are limited to 262,144 bytes; company, contact, share, and webhook JSON bodies are limited to 32,768 bytes; and document-upload and replacement multipart requests are limited to 32,505,856 bytes, including at most a 30 MiB file. Oversized bodies return `413 PAYLOAD_TOO_LARGE` before structured parsing.


    A request is rejected with 401 when the token is unknown or malformed, has expired, has been switched off, belongs to a workspace whose API access was turned off, or was issued by someone who is no longer an owner or admin of that workspace.'
  contact:
    name: HummingDeck Support
    url: https://hummingdeck.com
    email: support@hummingdeck.com
servers:
- url: https://app.hummingdeck.com/api/v1
  description: Production
security:
- apiToken: []
- oauth2: []
tags:
- name: Room Labels
paths:
  /room-labels:
    get:
      summary: List room labels
      description: Requires a workspace API token; Zapier OAuth credentials are rejected. Labels are workspace-wide, so this is where a caller finds the IDs it needs before tagging a room. Each carries how many rooms currently use it. Results are ordered by normalized name and use keyset pagination.
      operationId: listRoomLabels
      x-required-api-key-scope: rooms:read
      security:
      - apiToken: []
      parameters:
      - name: limit
        in: query
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
      - name: cursor
        in: query
        schema:
          type: string
        description: A nextCursor from a previous page.
      responses:
        '200':
          description: The workspace's labels
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomLabelList'
        '400':
          description: Invalid page size, cursor, or unknown query field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Not authenticated
        '403':
          description: A workspace API token is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
      - Room Labels
    post:
      summary: Create a room label
      description: 'Requires a workspace API token; Zapier OAuth credentials are rejected. Names are unique per workspace, ignoring case. color is a #RRGGBB hex value.'
      operationId: createRoomLabel
      x-required-api-key-scope: rooms:write
      security:
      - apiToken: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateRoomLabelRequest'
            examples:
              enterprise:
                summary: A colour-coded label
                value:
                  name: Enterprise
                  color: '#2F6F6B'
      responses:
        '201':
          description: The new label
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomLabel'
        '400':
          description: Invalid body or an unknown field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Not authenticated
        '403':
          description: A workspace API token is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: A label with that name already exists (LABEL_NAME_CONFLICT)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
      - Room Labels
  /room-labels/{labelId}:
    patch:
      summary: Update a room label
      description: Requires a workspace API token; Zapier OAuth credentials are rejected. At least one field.
      operationId: updateRoomLabel
      x-required-api-key-scope: rooms:write
      security:
      - apiToken: []
      parameters:
      - name: labelId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateRoomLabelRequest'
      responses:
        '200':
          description: The updated label
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RoomLabel'
        '400':
          description: Invalid body, nothing to update, or an unknown field
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Not authenticated
        '403':
          description: A workspace API token is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: The label does not belong to the authenticated workspace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: A label with that name already exists (LABEL_NAME_CONFLICT)
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          $ref: '#/components/responses/PayloadTooLarge'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
      - Room Labels
    delete:
      summary: Delete a room label
      description: Requires a workspace API token; Zapier OAuth credentials are rejected. Removes the label and its assignments. The rooms that carried it are untouched, and the response says how many lost it.
      operationId: deleteRoomLabel
      x-required-api-key-scope: rooms:write
      security:
      - apiToken: []
      parameters:
      - name: labelId
        in: path
        required: true
        schema:
          type: string
          format: uuid
      responses:
        '200':
          description: How many rooms lost the label
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DeleteRoomLabelResult'
        '400':
          description: Invalid path parameter
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '401':
          description: Not authenticated
        '403':
          description: A workspace API token is required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: The label does not belong to the authenticated workspace
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/RateLimited'
        '500':
          $ref: '#/components/responses/InternalServerError'
      tags:
      - Room Labels
components:
  schemas:
    CreateRoomLabelRequest:
      type: object
      additionalProperties: false
      required:
      - name
      - color
      properties:
        name:
          type: string
          maxLength: 40
        color:
          type: string
          pattern: ^#[0-9A-Fa-f]{6}$
        description:
          type:
          - string
          - 'null'
          maxLength: 160
    RoomLabelList:
      type: object
      properties:
        data:
          type: array
          items:
            $ref: '#/components/schemas/RoomLabelWithUsage'
        nextCursor:
          type:
          - string
          - 'null'
          description: Pass as cursor to get the next page. Null on the last page.
      required:
      - data
      - nextCursor
    RoomLabelWithUsage:
      allOf:
      - $ref: '#/components/schemas/RoomLabel'
      - type: object
        properties:
          roomCount:
            type: integer
        required:
        - roomCount
    DeleteRoomLabelResult:
      type: object
      properties:
        affectedRoomCount:
          type: integer
      required:
      - affectedRoomCount
    RoomLabel:
      type: object
      properties:
        id:
          type: string
          format: uuid
        name:
          type: string
          maxLength: 40
        description:
          type:
          - string
          - 'null'
        color:
          type: string
          pattern: ^#[0-9A-Fa-f]{6}$
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
      required:
      - id
      - name
      - description
      - color
      - createdAt
      - updatedAt
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable error message
        code:
          type: string
          description: Machine-readable code, present on some errors
          enum:
          - PLAN_LIMIT_REACHED
          - VALIDATION_ERROR
          - NOT_FOUND
          - ROOM_NOT_ACTIVE
          - ACCOUNT_CONFLICT
          - CREDENTIAL_NOT_ALLOWED
          - INSUFFICIENT_SCOPE
          - RATE_LIMITED
          - PAYLOAD_TOO_LARGE
          - INVALID_FORMAT
          - TYPE_MISMATCH
          - FILE_READ_ERROR
          - FILE_TOO_LARGE
          - FEATURE_NOT_AVAILABLE
          - PROPOSAL_LOCKED
          - REPLACEMENT_CONFLICT
          - TAB_TYPE_CONFLICT
          - LAST_TAB
          - TAB_NOT_EMPTY
          - TASK_BLOCKED
          - TASK_HIERARCHY_CYCLE
          - LEGACY_MAPPING_UNSUPPORTED
          - LABEL_NAME_CONFLICT
          - EMBED_PROVIDER_NOT_SUPPORTED
        kind:
          type: string
          enum:
          - room
          - docPerRoom
          - linksPerRoom
          - htmlBundle
          description: 'With PLAN_LIMIT_REACHED: the room limit or HTML bundle preview entitlement that blocked the request.'
        limit:
          type: integer
          description: 'With PLAN_LIMIT_REACHED on room endpoints: the plan''s limit.'
        feature:
          type: string
          enum:
          - restrictedAccess
          - emailCapture
          - linkExpiration
          - downloadControl
          - roomDiscussions
          description: 'With FEATURE_NOT_AVAILABLE: the plan feature the request needs.'
        requiredScope:
          type: string
          enum:
          - rooms:read
          - rooms:write
          - plan:read
          - plan:write
          - analytics:read
          - crm:read
          - crm:write
          - documents:read
          - documents:write
          description: 'With INSUFFICIENT_SCOPE: the capability the API key must be granted.'
      required:
      - error
    UpdateRoomLabelRequest:
      type: object
      additionalProperties: false
      description: At least one field.
      properties:
        name:
          type: string
          maxLength: 40
        color:
          type: string
          pattern: ^#[0-9A-Fa-f]{6}$
        description:
          type:
          - string
          - 'null'
          maxLength: 160
      minProperties: 1
  responses:
    InternalServerError:
      description: The request failed unexpectedly. The response is deliberately bounded and never includes internal error details.
      content:
        application/json:
          schema:
            type: object
            properties:
              error:
                type: string
                const: Internal server error
            required:
            - error
            additionalProperties: false
    PayloadTooLarge:
      description: Request body exceeds the byte ceiling documented for this operation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    RateLimited:
      description: Rate limit exceeded. Retry after the number of seconds in Retry-After.
      headers:
        Retry-After:
          required: true
          schema:
            type: integer
            minimum: 1
          description: Seconds until the current fixed window resets.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    apiToken:
      type: http
      scheme: bearer
      bearerFormat: hd_api_...
      description: Named workspace API key issued by a workspace owner or admin. Prefixed hd_api_, shown once at creation, valid for one year, independently scoped and revoked, and bound permanently to its workspace. Each *:write scope includes the matching *:read capability. Not accepted on webhook subscription endpoints.
    oauth2:
      type: oauth2
      description: Issued by the Zapier integration's OAuth flow. Access tokens last 30 days; refresh tokens last 90 days. The only credential accepted on webhook subscription endpoints.
      flows:
        authorizationCode:
          authorizationUrl: https://app.hummingdeck.com/api/zapier/authorize
          tokenUrl: https://app.hummingdeck.com/api/zapier/token
          scopes: {}