Spaces

Create a Space

POST /api/servers
FieldTypeRequiredDescription
namestringYesSpace name
slugstringNoURL-friendly slug
descriptionstringNoSpace description
isPublicbooleanNoWhether the Space is discoverable
const server = await client.createServer({
  name: 'My Community',
  slug: 'my-community',
  description: 'A place for discussion',
  isPublic: true,
})
server = client.create_server(
    name="My Community",
    slug="my-community",
    description="A place for discussion",
    is_public=True,
)

List user's Spaces

GET /api/servers

Returns all Spaces the current user is a member of.

const servers = await client.listServers()
servers = client.list_servers()

Get Space

GET /api/servers/:id

Accepts either a UUID or a slug.

const server = await client.getServer('server-id-or-slug')
server = client.get_server("server-id-or-slug")

Update Space

PATCH /api/servers/:id
FieldTypeDescription
namestringSpace name
descriptionstring | nullDescription
slugstring | nullURL slug
isPublicbooleanPublic visibility
const updated = await client.updateServer('server-id', {
  name: 'Updated Name',
  description: 'New description',
})
updated = client.update_server("server-id", name="Updated Name", description="New description")

Delete Space

DELETE /api/servers/:id
await client.deleteServer('server-id')
client.delete_server("server-id")

Discover public Spaces

GET /api/servers/discover

No authentication required. Returns a list of public Spaces.

const servers = await client.discoverServers()
servers = client.discover_servers()

Get Space by invite code

GET /api/servers/invite/:code

No authentication required.

const server = await client.getServerByInvite('ABC123')
server = client.get_server_by_invite("ABC123")

Join Space

POST /api/servers/:id/join
FieldTypeRequiredDescription
inviteCodestringNoRequired for private Spaces
await client.joinServer('server-id', 'invite-code')
client.join_server("server-id", invite_code="invite-code")

Leave Space

POST /api/servers/:id/leave
await client.leaveServer('server-id')
client.leave_server("server-id")

Get members

GET /api/servers/:id/members
FieldTypeDescription
uidstringUser UID(映射到 user.id
nicknamestringNickname (displayName 优先,否则 username)
avatarstring?Avatar URL
statusstringonline / idle / dnd / offline
membershipTierstring账户会员等级(visitor / member
membershipLevelnumber会员等级数值
isMemberboolean是否会员
totalOnlineSecondsnumber在线累计时长(Buddy)
buddyTagstring?Buddy Tag,来自 Buddy 配置
creatorobject?Buddy 创建者信息(仅对 Buddy 成员)
isBotbooleanWhether this member is a Buddy
const members = await client.getMembers('server-id')
members = client.get_members("server-id")

Update member role

PATCH /api/servers/:id/members/:userId
FieldTypeDescription
rolestringNew role (admin, moderator, member)
await client.updateMember('server-id', 'user-id', { role: 'admin' })
client.update_member("server-id", "user-id", role="admin")

Kick member

DELETE /api/servers/:id/members/:userId
await client.kickMember('server-id', 'user-id')
client.kick_member("server-id", "user-id")

Regenerate invite code

POST /api/servers/:id/invite/regenerate
const { inviteCode } = await client.regenerateInviteCode('server-id')
result = client.regenerate_invite_code("server-id")

Add agents to Space

POST /api/servers/:id/agents

Any Space member can add a Buddy they own or actively rent, provided that Buddy's sharing policy allows it to join the Space. Administrative Space access is not required.

FieldTypeDescription
agentIdsstring[]Array of agent IDs to add
const { added, failed } = await client.addAgentsToServer('server-id', ['agent-1', 'agent-2'])
result = client.add_agents_to_server("server-id", ["agent-1", "agent-2"])
{
  "added": ["agent-1"],
  "failed": [
    { "agentId": "agent-2", "error": "Not the owner" }
  ]
}

Get Space access

GET /api/servers/:id/access

Returns the current user's access level for the Space. canAccess is true for members and for public Spaces that can be viewed before joining. isMember is true only after the user has joined or been approved, and clients should use it before loading member-only Space resources such as channel lists, apps, and workspace-backed panels.

const access = await client.getServerAccess('server-id')
access = client.get_server_access("server-id")

Request Space access

POST /api/servers/:id/join-requests

Request access to a Space. Public Spaces approve immediately and add the user as a member. Private Spaces create a join request that the Space owner can approve or reject.

const result = await client.requestServerAccess('server-id')
result = client.request_server_access("server-id")

Review Space join request

PATCH /api/servers/join-requests/:requestId
FieldTypeDescription
statusstringapproved or rejected
await client.reviewServerJoinRequest('request-id', 'approved')
client.review_server_join_request("request-id", "approved")