Skip to content
Cloudtifact docs

Workspaces API

Workspaces, members and roles, and invite links.

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/workspaces

Yours (accepted), oldest first

Response

A list of:

FieldTypeRequiredNotes
idstringyes
slugstringyes
namestringyes
role"owner" | "admin" | "member" | "viewer"yes

POST /v1/workspaces

You become owner

Body

FieldTypeRequiredNotes
slugstringyes
namestringyes

Response

FieldTypeRequiredNotes
idstringyes
slugstringyes
namestringyes
role"owner" | "admin" | "member" | "viewer"yes

GET /v1/workspaces/:slug

Members only (404 otherwise)

Response

FieldTypeRequiredNotes
idstringyes
slugstringyes
namestringyes
role"owner" | "admin" | "member" | "viewer"yes
membersobject[]yes
spaceCountintegeryes
createdAtnumberyes
seatsobjectno

PATCH /v1/workspaces/:slug

Admin+; slug must stay unique

Body

FieldTypeRequiredNotes
slugstringno
namestringno

Response

FieldTypeRequiredNotes
idstringyes
slugstringyes
namestringyes
role"owner" | "admin" | "member" | "viewer"yes

POST /v1/workspaces/:slug/members

Admin+ invites by handle (pending until accepted); only owners add owners

Body

FieldTypeRequiredNotes
handlestringyes
role"owner" | "admin" | "member" | "viewer"no (default "member")

Response: 204, no body

PATCH /v1/workspaces/:slug/members/:handle

Admin+; only owners change owners; keeps >= 1 owner

Body

FieldTypeRequiredNotes
role"owner" | "admin" | "member" | "viewer"yes

Response: 204, no body

DELETE /v1/workspaces/:slug/members/:handle

Admin+ (or yourself, to leave); keeps >= 1 owner

Response: 204, no body

GET /v1/workspaces/:slug/invites

Admin+; live invite links (not revoked, expired or used up)

Response

FieldTypeRequiredNotes
invitesobject[]yes

POST /v1/workspaces/:slug/invites

Admin+; the link is returned once (stored hashed); only owners make owner links

Body

FieldTypeRequiredNotes
role"owner" | "admin" | "member" | "viewer"no (default "member")
emailstring (email)no
maxUsesinteger | nullno
expiresInDaysintegerno (default 7)

Response

FieldTypeRequiredNotes
inviteobjectyes
urlstringyes
emailedbooleanyes

DELETE /v1/workspaces/:slug/invites/:id

Admin+; turns the link off

Response: 204, no body

POST /v1/workspace-invites/preview

Anyone with the link; 404 unknown, 410 revoked/expired/used up

Body

FieldTypeRequiredNotes
tokenstringyes

Response

FieldTypeRequiredNotes
workspaceobjectyes
role"owner" | "admin" | "member" | "viewer"yes
invitedByobject | nullyes
memberCountintegeryes
expiresAtnumberyes
alreadyMemberbooleanyes

POST /v1/workspace-invites/accept

Signed in; joins with the link's role; 403 past the seat limit or wrong email

Body

FieldTypeRequiredNotes
tokenstringyes

Response

FieldTypeRequiredNotes
workspaceobjectyes

POST /v1/workspaces/:slug/accept

Accept your pending invite; 403 past the seat limit

Response: 204, no body

POST /v1/workspaces/:slug/decline

Decline your pending invite

Response: 204, no body

GET /v1/workspaces/:slug/audit

Admin+; newest first: members, invites, billing, sharing, going live

Query

FieldTypeRequiredNotes
beforeintegerno
limitintegerno (default 50)

Response

FieldTypeRequiredNotes
eventsobject[]yes
nextnumber | nullyes