Kumospace API

The Kumospace REST API, published as an OpenAPI 3.0 description behind a public Swagger UI at api.kumospace.com. It covers 132 operations across 23 resource areas — spaces, rooms, zones, walls, furniture, flooring, room and zone templates, users and user roles, invitations, chat channels and messages, calendar events and calendar resources, recordings, transcription and summaries, music tracks, analytics, integrations (Google Calendar, Microsoft Outlook, Microsoft Teams status, Zoom status) and payments. Requests are authenticated with a Firebase-issued bearer JWT; list endpoints use cursor pagination via `limit` and a `next` cursor.

OpenAPI Specification

kumospace-api-openapi.json Raw ↑
{
  "components": {
    "examples": {},
    "headers": {},
    "parameters": {},
    "requestBodies": {},
    "responses": {},
    "schemas": {
      "ApiCustomKumoToken": {
        "properties": {
          "idToken": {
            "type": "string"
          }
        },
        "required": [
          "idToken"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiCreateCustomTokenRequest": {
        "properties": {
          "idToken": {
            "type": "string",
            "description": "Third-party id token.  It must contain an \"iss\" field and we must have an\nassociated public key in our firestore issuers table."
          }
        },
        "required": [
          "idToken"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiIntegrationToken": {
        "properties": {
          "stateToken": {
            "type": "string"
          }
        },
        "required": [
          "stateToken"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "Integration": {
        "enum": [
          "microsoft-teams-status",
          "zoom-status",
          "google-calendar",
          "microsoft-outlook"
        ],
        "type": "string"
      },
      "ApiResetPasswordRequest": {
        "properties": {
          "email": {
            "type": "string"
          }
        },
        "required": [
          "email"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "HostAnalyticsRoomStat": {
        "properties": {
          "duration": {
            "type": "number",
            "format": "double"
          },
          "userEmail": {
            "type": "string"
          },
          "userDisplayName": {
            "type": "string"
          },
          "userId": {
            "type": "string"
          },
          "roomDisplayName": {
            "type": "string"
          },
          "roomId": {
            "type": "string"
          }
        },
        "required": [
          "duration",
          "userId",
          "roomId"
        ],
        "type": "object"
      },
      "PaginatedResponse_HostAnalyticsRoomStat_": {
        "description": "A page of items.  Useful for breaking up a large dataset into smaller chunks.",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/HostAnalyticsRoomStat"
            },
            "type": "array",
            "description": "The page of items."
          },
          "metadata": {
            "properties": {
              "count": {
                "type": "number",
                "format": "double",
                "description": "The number of items sent."
              },
              "next": {
                "type": "string",
                "description": "A pagination cursor.  If specified, there is another page of results that\ncan be requested by appending this value as a query parameter called\n\"next\"."
              }
            },
            "required": [
              "count"
            ],
            "type": "object",
            "description": "Metadata about the page of items.  Contains a pagination cursor called\n\"next\" if there is another page of items."
          }
        },
        "required": [
          "items",
          "metadata"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "HostAnalyticsType.statusSession": {
        "enum": [
          "statusSession"
        ],
        "type": "string"
      },
      "Availability": {
        "enum": [
          "available",
          "away",
          "focusing"
        ],
        "type": "string"
      },
      "AnalyticsEvent": {
        "properties": {
          "duration": {
            "type": "number",
            "format": "double"
          },
          "endTime": {
            "type": "number",
            "format": "double"
          },
          "startTime": {
            "type": "number",
            "format": "double"
          },
          "email": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "firebaseUid": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/Availability"
          },
          "type": {
            "$ref": "#/components/schemas/HostAnalyticsType.statusSession"
          }
        },
        "required": [
          "startTime",
          "firebaseUid",
          "data",
          "type"
        ],
        "type": "object"
      },
      "PaginatedResponse_AnalyticsEvent_": {
        "description": "A page of items.  Useful for breaking up a large dataset into smaller chunks.",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/AnalyticsEvent"
            },
            "type": "array",
            "description": "The page of items."
          },
          "metadata": {
            "properties": {
              "count": {
                "type": "number",
                "format": "double",
                "description": "The number of items sent."
              },
              "next": {
                "type": "string",
                "description": "A pagination cursor.  If specified, there is another page of results that\ncan be requested by appending this value as a query parameter called\n\"next\"."
              }
            },
            "required": [
              "count"
            ],
            "type": "object",
            "description": "Metadata about the page of items.  Contains a pagination cursor called\n\"next\" if there is another page of items."
          }
        },
        "required": [
          "items",
          "metadata"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiEnableGcalIntegrationRequest": {
        "description": "A request to enable Google Calendar integration.",
        "properties": {
          "authCode": {
            "type": "string"
          }
        },
        "type": "object",
        "additionalProperties": false
      },
      "CalendarEventStatus": {
        "type": "string",
        "enum": [
          "confirmed",
          "tentative",
          "cancelled"
        ],
        "description": "These calendar statuses match the Google Calendar API."
      },
      "CalendarEventReplyStatus": {
        "description": "These calendar response statuses match the Google Calendar API.",
        "enum": [
          "accepted",
          "declined",
          "tentative",
          "needsAction"
        ],
        "type": "string"
      },
      "ApiCalendarEventAttendee": {
        "description": "An object for attendee related information for the client.",
        "properties": {
          "email": {
            "type": "string"
          },
          "firebaseUid": {
            "type": "string"
          },
          "avatarUrl": {
            "type": "string"
          },
          "displayName": {
            "type": "string"
          },
          "replyStatus": {
            "$ref": "#/components/schemas/CalendarEventReplyStatus"
          }
        },
        "required": [
          "email",
          "displayName",
          "replyStatus"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiCalendarSource": {
        "description": "Identifies the external source where this calendar was fetched from.",
        "enum": [
          "google-calendar",
          "microsoft-outlook"
        ],
        "type": "string"
      },
      "ApiCalendarEvent": {
        "description": "A Calendar Event.",
        "properties": {
          "id": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/CalendarEventStatus"
          },
          "organizerEmail": {
            "type": "string"
          },
          "htmlLink": {
            "type": "string"
          },
          "location": {
            "type": "string"
          },
          "startTime": {
            "type": "string"
          },
          "endTime": {
            "type": "string"
          },
          "attendees": {
            "items": {
              "$ref": "#/components/schemas/ApiCalendarEventAttendee"
            },
            "type": "array"
          },
          "source": {
            "$ref": "#/components/schemas/ApiCalendarSource"
          },
          "isPrivate": {
            "type": "boolean"
          },
          "shouldShowAsBusy": {
            "type": "boolean"
          },
          "isAllDayEvent": {
            "type": "boolean"
          },
          "kumoRoom": {
            "properties": {
              "zoneId": {
                "type": "string"
              },
              "roomId": {
                "type": "string"
              },
              "spaceName": {
                "type": "string"
              }
            },
            "required": [
              "zoneId",
              "roomId",
              "spaceName"
            ],
            "type": "object"
          }
        },
        "required": [
          "id",
          "summary",
          "description",
          "status",
          "organizerEmail",
          "htmlLink",
          "location",
          "startTime",
          "endTime",
          "attendees",
          "source",
          "isPrivate",
          "shouldShowAsBusy"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiUpdateCalendarEventReplyRequest": {
        "description": "A request to update event reply status",
        "properties": {
          "eventId": {
            "type": "string"
          },
          "replyStatus": {
            "$ref": "#/components/schemas/CalendarEventReplyStatus"
          }
        },
        "required": [
          "eventId",
          "replyStatus"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiUpdateConnectedCalendarsRequest": {
        "description": "A request to update the user's connected calendars preferences.",
        "properties": {
          "calendarIsConnectedUpdates": {
            "items": {
              "properties": {
                "isConnected": {
                  "type": "boolean"
                },
                "calendarId": {
                  "type": "string"
                }
              },
              "required": [
                "isConnected",
                "calendarId"
              ],
              "type": "object"
            },
            "type": "array"
          }
        },
        "required": [
          "calendarIsConnectedUpdates"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiCalendar": {
        "description": "ApiCalendar is a Calendar resource identifier, along with any state\nwe need. We persist this object as is in firestore, because we want to track the\n`isConnected` field which is toggled by the user.",
        "properties": {
          "id": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "isConnected": {
            "type": "boolean"
          },
          "source": {
            "$ref": "#/components/schemas/ApiCalendarSource"
          }
        },
        "required": [
          "id",
          "summary",
          "isConnected",
          "source"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiCreateChatChannelResponse": {
        "properties": {
          "channelUrl": {
            "type": "string"
          }
        },
        "required": [
          "channelUrl"
        ],
        "type": "object"
      },
      "ApiCreateUserChannelRequest": {
        "properties": {
          "userIds": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "description": "The user ids to create the direct_message\nchannel with."
          },
          "spaceUid": {
            "type": "string",
            "description": "The stable uid for a space"
          },
          "channelType": {
            "type": "string",
            "enum": [
              "user"
            ],
            "nullable": false,
            "description": "The type of channel to create"
          }
        },
        "required": [
          "userIds",
          "spaceUid",
          "channelType"
        ],
        "type": "object"
      },
      "ApiCreateCustomChannelRequest": {
        "properties": {
          "isPrivate": {
            "type": "boolean",
            "description": "Whether the channel is private or not. Public channels contain all space members,\nand whenever a member is added to the space, they are added to public channels. Private\nchannels' members are added manually."
          },
          "name": {
            "type": "string",
            "description": "Name of the new channel"
          },
          "spaceUid": {
            "type": "string",
            "description": "The stable uid for a space"
          },
          "channelType": {
            "type": "string",
            "enum": [
              "custom"
            ],
            "nullable": false,
            "description": "The type of channel to create"
          }
        },
        "required": [
          "name",
          "spaceUid",
          "channelType"
        ],
        "type": "object"
      },
      "ApiCreateGroupDmsChannelRequest": {
        "properties": {
          "userIds": {
            "items": {
              "type": "string"
            },
            "type": "array",
            "description": "The user ids to create the group_dms\nchannel with"
          },
          "spaceUid": {
            "type": "string",
            "description": "The stable uid for a space"
          },
          "channelType": {
            "type": "string",
            "enum": [
              "group_dms"
            ],
            "nullable": false,
            "description": "The type of channel to create"
          }
        },
        "required": [
          "userIds",
          "spaceUid",
          "channelType"
        ],
        "type": "object"
      },
      "ApiCreateChatChannelRequest": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/ApiCreateUserChannelRequest"
          },
          {
            "$ref": "#/components/schemas/ApiCreateCustomChannelRequest"
          },
          {
            "$ref": "#/components/schemas/ApiCreateGroupDmsChannelRequest"
          }
        ]
      },
      "ApiSetChannelPrefencesRequest": {
        "properties": {
          "isMuted": {
            "type": "boolean"
          },
          "isHidden": {
            "type": "boolean"
          }
        },
        "required": [
          "isMuted"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiUpdateCustomChannelRequest": {
        "properties": {
          "newName": {
            "type": "string",
            "description": "New name for the channel"
          }
        },
        "required": [
          "newName"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "Record_string.unknown_": {
        "properties": {},
        "type": "object",
        "description": "Construct a type with a set of properties K of type T"
      },
      "Range.custom": {
        "enum": [
          "custom"
        ],
        "type": "string"
      },
      "Range.room": {
        "enum": [
          "room"
        ],
        "type": "string"
      },
      "Range.space": {
        "enum": [
          "space"
        ],
        "type": "string"
      },
      "Range.user": {
        "enum": [
          "user"
        ],
        "type": "string"
      },
      "ChatMessageBaseRange": {
        "anyOf": [
          {
            "$ref": "#/components/schemas/Range.custom"
          },
          {
            "$ref": "#/components/schemas/Range.room"
          },
          {
            "$ref": "#/components/schemas/Range.space"
          },
          {
            "$ref": "#/components/schemas/Range.user"
          }
        ]
      },
      "MessageLinkInfo": {
        "properties": {
          "url": {
            "type": "string"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "previewImageUrl": {
            "type": "string"
          }
        },
        "required": [
          "url",
          "title",
          "description"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "UserInfo": {
        "properties": {
          "firebaseUid": {
            "type": "string"
          },
          "nickname": {
            "type": "string"
          }
        },
        "required": [
          "firebaseUid",
          "nickname"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "MessageReactionInfo": {
        "properties": {
          "key": {
            "type": "string"
          },
          "updatedAt": {
            "type": "number",
            "format": "double"
          },
          "users": {
            "items": {
              "$ref": "#/components/schemas/UserInfo"
            },
            "type": "array"
          },
          "imageUrl": {
            "type": "string"
          }
        },
        "required": [
          "key",
          "updatedAt",
          "users"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "MessageThreadUserInfo": {
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "profileUrl": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "name",
          "profileUrl"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "MessageThreadInfo": {
        "properties": {
          "replyCount": {
            "type": "number",
            "format": "double"
          },
          "lastRepliedAt": {
            "type": "number",
            "format": "double"
          },
          "replyUsers": {
            "items": {
              "$ref": "#/components/schemas/MessageThreadUserInfo"
            },
            "type": "array"
          }
        },
        "required": [
          "replyCount",
          "lastRepliedAt",
          "replyUsers"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ChatMessageFile": {
        "properties": {
          "fileSize": {
            "type": "number",
            "format": "double"
          },
          "fileName": {
            "type": "string"
          },
          "mimeType": {
            "type": "string"
          },
          "fileUrl": {
            "type": "string"
          }
        },
        "required": [
          "fileSize",
          "fileName",
          "mimeType",
          "fileUrl"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ChatMessageBase": {
        "properties": {
          "id": {
            "type": "string"
          },
          "parentMessageId": {
            "type": "string"
          },
          "message": {
            "type": "string"
          },
          "timestamp": {
            "type": "string",
            "format": "date-time"
          },
          "unread": {
            "type": "boolean"
          },
          "edited": {
            "type": "boolean"
          },
          "linkInfo": {
            "$ref": "#/components/schemas/MessageLinkInfo"
          },
          "reactions": {
            "items": {
              "$ref": "#/components/schemas/MessageReactionInfo"
            },
            "type": "array"
          },
          "threadInfo": {
            "allOf": [
              {
                "$ref": "#/components/schemas/MessageThreadInfo"
              }
            ],
            "nullable": true
          },
          "files": {
            "items": {
              "$ref": "#/components/schemas/ChatMessageFile"
            },
            "type": "array"
          },
          "type": {
            "type": "string",
            "enum": [
              "chat"
            ],
            "nullable": false
          },
          "customType": {
            "type": "string"
          },
          "data": {
            "$ref": "#/components/schemas/Record_string.unknown_"
          },
          "isAdmin": {
            "type": "boolean"
          },
          "senderName": {
            "type": "string"
          },
          "sendbirdProfileUrl": {
            "type": "string"
          },
          "range": {
            "$ref": "#/components/schemas/ChatMessageBaseRange"
          },
          "senderId": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "timestamp",
          "unread",
          "type",
          "senderName",
          "range",
          "senderId"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "UpdateChannelMembersRequest": {
        "properties": {
          "memberIdsToRemove": {
            "items": {
              "type": "string"
            },
            "type": "array"
          },
          "memberIdsToAdd": {
            "items": {
              "type": "string"
            },
            "type": "array"
          }
        },
        "required": [
          "memberIdsToRemove",
          "memberIdsToAdd"
        ],
        "type": "object"
      },
      "Record_string.never_": {
        "properties": {},
        "type": "object",
        "description": "Construct a type with a set of properties K of type T"
      },
      "ApiSearchChannel": {
        "properties": {
          "url": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "metadata": {
            "$ref": "#/components/schemas/Record_string.never_"
          }
        },
        "required": [
          "url",
          "name",
          "metadata"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiSearchMessagesResponse": {
        "properties": {
          "message": {
            "$ref": "#/components/schemas/ChatMessageBase"
          },
          "channel": {
            "$ref": "#/components/schemas/ApiSearchChannel"
          }
        },
        "required": [
          "message",
          "channel"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "PaginatedResponse_ApiSearchMessagesResponse_": {
        "description": "A page of items.  Useful for breaking up a large dataset into smaller chunks.",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ApiSearchMessagesResponse"
            },
            "type": "array",
            "description": "The page of items."
          },
          "metadata": {
            "properties": {
              "count": {
                "type": "number",
                "format": "double",
                "description": "The number of items sent."
              },
              "next": {
                "type": "string",
                "description": "A pagination cursor.  If specified, there is another page of results that\ncan be requested by appending this value as a query parameter called\n\"next\"."
              }
            },
            "required": [
              "count"
            ],
            "type": "object",
            "description": "Metadata about the page of items.  Contains a pagination cursor called\n\"next\" if there is another page of items."
          }
        },
        "required": [
          "items",
          "metadata"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiCreateDemoSpaceResponse": {
        "properties": {
          "spaceName": {
            "type": "string"
          },
          "uid": {
            "type": "string"
          }
        },
        "required": [
          "spaceName",
          "uid"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "UseCase": {
        "description": "How the user plans to use the space.",
        "enum": [
          "culture",
          "productivity",
          "communication",
          "visibility",
          "engagement",
          "other",
          "events",
          "education",
          "friends"
        ],
        "type": "string"
      },
      "ApiCreateDemoSpaceRequest": {
        "description": "A request to create a new space.",
        "properties": {
          "useCase": {
            "$ref": "#/components/schemas/UseCase",
            "description": "The main purpose of this space."
          },
          "roomTemplateId": {
            "type": "string",
            "description": "The template to use for the default room.  Defaults to a template\nmatching the request's useCase property."
          },
          "isDryRun": {
            "type": "boolean",
            "description": "If true, perform all validation, but don't actually create the space."
          }
        },
        "type": "object",
        "additionalProperties": false
      },
      "ApiClaimDemoSpaceRequest": {
        "description": "A request for a user to claim a demo space",
        "properties": {
          "spaceName": {
            "type": "string",
            "description": "The name of the space to claim",
            "example": "demo-space-1"
          },
          "newSpaceName": {
            "type": "string"
          },
          "newDisplayName": {
            "type": "string"
          },
          "newUseCase": {
            "$ref": "#/components/schemas/UseCase"
          }
        },
        "required": [
          "spaceName",
          "newSpaceName",
          "newDisplayName",
          "newUseCase"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "BackgroundType.singleTile": {
        "enum": [
          "singleTile"
        ],
        "type": "string"
      },
      "SingleTileBackground": {
        "description": "A background with a single tile repeated across the room.",
        "properties": {
          "tileUrl": {
            "type": "string",
            "description": "A url with the full-size image of the tile.",
            "pattern": "^https://"
          },
          "width": {
            "type": "number",
            "format": "double",
            "description": "The width of the tile, in pixels."
          },
          "height": {
            "type": "number",
            "format": "double",
            "description": "The height of the tile, in pixels."
          }
        },
        "required": [
          "tileUrl",
          "width",
          "height"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiStockBackground": {
        "allOf": [
          {
            "properties": {
              "thumbnailUrl": {
                "type": "string",
                "description": "A url with a 200x200 thumbnail of this background."
              },
              "description": {
                "type": "string",
                "description": "The description of this background."
              },
              "title": {
                "type": "string",
                "description": "A short title."
              },
              "id": {
                "type": "string",
                "description": "The unique id of this background."
              }
            },
            "required": [
              "thumbnailUrl",
              "description",
              "title",
              "id"
            ],
            "type": "object"
          },
          {
            "properties": {
              "data": {
                "$ref": "#/components/schemas/SingleTileBackground",
                "description": "Data associated with the background type."
              },
              "type": {
                "$ref": "#/components/schemas/BackgroundType.singleTile",
                "description": "The background type."
              }
            },
            "required": [
              "data",
              "type"
            ],
            "type": "object"
          }
        ],
        "description": "A stock background that can be used as a room background."
      },
      "PaginatedResponse_ApiStockBackground_": {
        "description": "A page of items.  Useful for breaking up a large dataset into smaller chunks.",
        "properties": {
          "items": {
            "items": {
              "$ref": "#/components/schemas/ApiStockBackground"
            },
            "type": "array",
            "description": "The page of items."
          },
          "metadata": {
            "properties": {
              "count": {
                "type": "number",
                "format": "double",
                "description": "The number of items sent."
              },
              "next": {
                "type": "string",
                "description": "A pagination cursor.  If specified, there is another page of results that\ncan be requested by appending this value as a query parameter called\n\"next\"."
              }
            },
            "required": [
              "count"
            ],
            "type": "object",
            "description": "Metadata about the page of items.  Contains a pagination cursor called\n\"next\" if there is another page of items."
          }
        },
        "required": [
          "items",
          "metadata"
        ],
        "type": "object",
        "additionalProperties": false
      },
      "ApiCreateStockBackgroundRequest": {
        "allOf": [
          {
            "properties": {
              "thumbnailUrl": {
                "type": "string",
                "description": "A url with a 200x200 thumbnail of this background.",
                "pattern": "^https://"
              },
              "description": {
                "type": "string",
                "description": "The description of this background.",
                "minLength": 1
              },
              "title": {
                "type": "string",
                "description": "A short title.",
                "minLength": 1
              }
            },
            "required": [
              "thumbnailUrl",
              "description",
              "title"
            ],
            "type": "object"
          },
          {
            "properties": {
              "data": {
                "$ref": "#/components/schemas/SingleTileBackground",
                "description": "Data associated with the background type."
              },
              "type": {
                "$ref": "#/components/schemas/BackgroundType.singleTile",
                "description": "The background type."
              }
            },
            "required": [
              "data",
              "type"
            ],
            "type": "object"
          }
        ],
        "description": "A request to create a new room background."
      },
      "FurnitureRotation": {
        "type": "number",
        "enum": [
          0,
          90,
          180,
          270
        ],
        "description": "Rotation in clockwise-degrees."
      },
      "ApiCreateFurnitureRequest": {
        "properties": {
          "rotation": {
            "$ref": "#/components/schemas/FurnitureRotation",
            "description": "The rotation of this furniture.  Defaults to '0\u00b0'."
          },
          "elevation": {
            "type": "number",
            "format": "double",
            "description": "The elevation of the furniture.  Defaults to stock funiture's value.",
            "minimum": 0,
            "maximum": 10
          },
          "y": {
            "type": "number",
            "format": "double",
            "description": "The y-position of the center of the furniture.  (0,0) is the top left of the room."
          },
          "x": {
            "type": "numbe

# --- truncated at 32 KB (342 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/kumospace/refs/heads/main/openapi/kumospace-api-openapi.json