Skip to content
Cloudtifact docs

Rooms API

Rooms: the shared doc, chat, people, sources and builds.

All paths are relative to the API origin. Send Authorization: Bearer <token> unless a route says otherwise; see the API overview for tokens and errors.

GET /v1/rooms

Rooms you can view; ?workspace=<slug>

Query

FieldTypeRequiredNotes
workspacestringno

Response

FieldTypeRequiredNotes
roomsobject[]yes

POST /v1/rooms

Workspace member; plan room limit (403 past it)

Body

FieldTypeRequiredNotes
workspacestringyes
namestringno
promptstringno
templatestringno
invitesobject[]no (default [])

Response

FieldTypeRequiredNotes
idstringyes
namestringyes
iconstring | nullyes
descriptionstring | nullyes
templatestring | nullyes
workspaceobjectyes
role"owner" | "editor" | "commenter" | "viewer"yes
capsobjectyes
linkAccess"none" | "viewer" | "commenter" | "editor"yes
aiSuggestbooleanyes
latestVersionintegeryes
lastActivitystring | nullyes
lastActivityAtnumber | nullyes
appCountintegeryes
pathstringyes
urlstringyes
createdAtnumberyes

GET /v1/rooms/:id

View

Response

FieldTypeRequiredNotes
idstringyes
namestringyes
iconstring | nullyes
descriptionstring | nullyes
templatestring | nullyes
workspaceobjectyes
role"owner" | "editor" | "commenter" | "viewer"yes
capsobjectyes
linkAccess"none" | "viewer" | "commenter" | "editor"yes
aiSuggestbooleanyes
latestVersionintegeryes
lastActivitystring | nullyes
lastActivityAtnumber | nullyes
appCountintegeryes
pathstringyes
urlstringyes
createdAtnumberyes

PATCH /v1/rooms/:id

Manage

Body

FieldTypeRequiredNotes
namestringno
iconstring | nullno
descriptionstring | nullno
linkAccess"none" | "viewer" | "commenter" | "editor"no
aiSuggestbooleanno

Response

FieldTypeRequiredNotes
idstringyes
namestringyes
iconstring | nullyes
descriptionstring | nullyes
templatestring | nullyes
workspaceobjectyes
role"owner" | "editor" | "commenter" | "viewer"yes
capsobjectyes
linkAccess"none" | "viewer" | "commenter" | "editor"yes
aiSuggestbooleanyes
latestVersionintegeryes
lastActivitystring | nullyes
lastActivityAtnumber | nullyes
appCountintegeryes
pathstringyes
urlstringyes
createdAtnumberyes

DELETE /v1/rooms/:id

Manage

Response: 204, no body

GET /v1/rooms/:id/markdown

View; every page, for agents and export

Response: text/markdown

POST /v1/rooms/:id/messages/:messageId/report

View, signed in; keeps a copy of the message; 404 unknown message

Body

FieldTypeRequiredNotes
reasonstringno

Response: 204, no body

DELETE /v1/rooms/:id/messages/:messageId

The message's author, or manage; sockets get chat.deleted

Response: 204, no body

POST /v1/rooms/:id/ticket

View; short-lived signed ticket for the WebSocket

Response

FieldTypeRequiredNotes
urlstringyes
expiresAtnumberyes

GET /v1/rooms/:id/ws

Yjs doc sync, chat, presence, AI suggestions; access re-checked

Request: ?ticket=

Response: WebSocket (RoomDO)

GET /v1/rooms/:id/people

View; pending invites only for manage

Response

FieldTypeRequiredNotes
membersobject[]yes
invitesobject[]yes

POST /v1/rooms/:id/people

Manage; handle adds a member, email makes an invite link

Body

FieldTypeRequiredNotes
tostringyes
role"editor" | "commenter" | "viewer"no (default "editor")

Response

FieldTypeRequiredNotes
memberobject | nullyes
inviteobject | nullyes

PATCH /v1/rooms/:id/people/:handle

Manage

Body

FieldTypeRequiredNotes
role"editor" | "commenter" | "viewer"yes

Response: 204, no body

DELETE /v1/rooms/:id/people/:handle

Manage, or yourself (leave)

Response: 204, no body

DELETE /v1/rooms/:id/invites/:inviteId

Manage

Response: 204, no body

POST /v1/room-invites/accept

Signed in; token stored hashed, single use

Body

FieldTypeRequiredNotes
tokenstringyes

Response

FieldTypeRequiredNotes
roomIdstringyes

GET /v1/rooms/:id/sources

View

Response

FieldTypeRequiredNotes
sourcesobject[]yes

POST /v1/rooms/:id/sources

Comment; MAX_SOURCE_BYTES; bytes in R2, never on the content origin

Request: multipart file

Response

FieldTypeRequiredNotes
idstringyes
namestringyes
contentTypestringyes
sizenumberyes
status"ready" | "unreadable"yes
summarystring | nullyes
extractedCharsnumberyes
hiddenFromAibooleanyes
uploadedByobject | nullyes
createdAtnumberyes

GET /v1/rooms/:id/sources/:sourceId/raw

View

Response: file bytes

PATCH /v1/rooms/:id/sources/:sourceId

Edit; { hiddenFromAi }

Body

FieldTypeRequiredNotes
hiddenFromAibooleanyes

Response

FieldTypeRequiredNotes
idstringyes
namestringyes
contentTypestringyes
sizenumberyes
status"ready" | "unreadable"yes
summarystring | nullyes
extractedCharsnumberyes
hiddenFromAibooleanyes
uploadedByobject | nullyes
createdAtnumberyes

DELETE /v1/rooms/:id/sources/:sourceId

Edit, or the uploader

Response: 204, no body

POST /v1/rooms/:id/build

Edit; new app, or { appId } to rebuild its preview

Body

FieldTypeRequiredNotes
pageIdstringno
instructionsstringno
appIdstringno

Response

FieldTypeRequiredNotes
appobjectyes