Group chat spaces with multiple Dyvas. Members join and leave themselves; there is no separate endpoint for adding another user to a room.
Every route and HTTP method below was checked directly against the live ts-api source on August 13, 2026. Response bodies are illustrative examples, never captured responses.
Base URL
https://api.dyva.ai/v1/v1/roomsCreate a room. At least one Dyva is required; you can't create an empty room and add characters later through this endpoint alone. You become the owner.
Route and method verified directly against the live ts-api source on August 13, 2026.
Request body (8)
namestringRequireddyva_idsstring[]RequireddescriptionstringOptionalis_publicbooleanOptionalmax_membersintegerOptionalai_interactionbooleanOptionalmax_ai_responsesintegerOptionalcategorystringOptionalResponse
Illustrative example, not a captured response{
"id": "room_EXAMPLE0001",
"user_id": "usr_EXAMPLE0001",
"name": "Strategy HQ",
"slug": "strategy-hq",
"description": "Brainstorm product strategy with the team.",
"visibility": "public",
"max_members": 10,
"ai_interaction": true,
"max_ai_responses": 2,
"message_count": 0,
"created_at": "2026-03-09T14:22:00Z",
"member_count": 1,
"dyva_count": 2,
"dyvas": [
{
"id": "dyva_EXAMPLE0001",
"name": "Atlas",
"avatar_url": "https://cdn.dyva.ai/avatars/dyva_EXAMPLE0001.webp"
},
{
"id": "dyva_EXAMPLE0002",
"name": "Nova",
"avatar_url": "https://cdn.dyva.ai/avatars/dyva_EXAMPLE0002.webp"
}
]
}Examples (1)
curl -X POST https://api.dyva.ai/v1/rooms \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Strategy HQ",
"dyva_ids": ["dyva_EXAMPLE0001", "dyva_EXAMPLE0002"]
}'/v1/roomsPublic room directory, ranked by message count. Plain array, capped at 50 rooms, no pagination parameters. Use GET /v1/rooms/my for the rooms you actually belong to.
Route and method verified directly against the live ts-api source on August 13, 2026.
Response
Illustrative example, not a captured response[
{
"id": "room_EXAMPLE0001",
"name": "Strategy HQ",
"slug": "strategy-hq",
"description": "Brainstorm product strategy with the team.",
"visibility": "public",
"max_members": 10,
"message_count": 214,
"member_count": 4,
"dyva_count": 2,
"created_at": "2026-03-09T14:22:00Z"
}
]/v1/rooms/discoverSearchable, filterable room directory with pagination and a message preview per room. This is the endpoint the in-app Rooms discovery page actually uses, not GET /v1/rooms.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (5)
qstringOptionalcategorystringOptionalsortstringOptionallimitintegerOptionaloffsetintegerOptionalResponse
Illustrative example, not a captured response[
{
"id": "room_EXAMPLE0002",
"name": "Creative Lab",
"slug": "creative-lab",
"description": "Free-form ideation space.",
"category": "creative",
"message_count": 1042,
"member_count": 12,
"dyva_count": 3,
"last_message_preview": "Let's push the packaging concept further.",
"dyvas": [
{
"room_id": "room_EXAMPLE0002",
"id": "dyva_EXAMPLE0003",
"name": "Sage",
"avatar_url": "https://cdn.dyva.ai/avatars/dyva_EXAMPLE0003.webp"
}
]
}
]/v1/rooms/myRooms you own or are a member of, most recently active first. Capped at 50, no pagination parameters.
Route and method verified directly against the live ts-api source on August 13, 2026.
Response
Illustrative example, not a captured response[
{
"id": "room_EXAMPLE0001",
"user_id": "usr_EXAMPLE0001",
"name": "Strategy HQ",
"slug": "strategy-hq",
"visibility": "public",
"message_count": 214,
"member_count": 4,
"dyva_count": 2,
"last_message_at": "2026-03-09T15:08:33Z"
}
]/v1/rooms/:idFull room detail: settings, members, and Dyvas. Accepts a room ID or slug.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured response{
"id": "room_EXAMPLE0001",
"user_id": "usr_EXAMPLE0001",
"name": "Strategy HQ",
"slug": "strategy-hq",
"description": "Brainstorm product strategy with the team.",
"visibility": "public",
"max_members": 10,
"ai_interaction": true,
"max_ai_responses": 2,
"message_count": 214,
"created_at": "2026-03-09T14:22:00Z",
"members": [
{
"id": "usr_EXAMPLE0001",
"display_name": "Jordan",
"role": "owner",
"joined_at": "2026-03-09T14:22:00Z"
}
],
"dyvas": [
{
"id": "dyva_EXAMPLE0001",
"name": "Atlas",
"avatar_url": "https://cdn.dyva.ai/avatars/dyva_EXAMPLE0001.webp",
"added_at": "2026-03-09T14:22:00Z"
}
]
}/v1/rooms/:idUpdate room settings. Owner only. Every field is optional; omitted fields keep their current value.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (6)
namestringOptionaldescriptionstringOptionalai_interactionbooleanOptionalmax_ai_responsesintegerOptionalmax_membersintegerOptionalcategorystringOptionalResponse
Illustrative example, not a captured response{
"id": "room_EXAMPLE0001",
"name": "Strategy HQ v2",
"description": "Refined product strategy sessions.",
"visibility": "public",
"max_members": 10,
"updated_at": "2026-03-09T16:05:44Z"
}/v1/rooms/:idDelete a room and its messages. Owner only.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured responseHTTP/1.1 204 No Content/v1/rooms/:id/joinJoin a room as a member. Private rooms only allow the owner to join; everyone else gets a 403. Fails with a 400 once the room hits max_members.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured response{
"joined": true
}/v1/rooms/:id/leaveLeave a room. Always succeeds, even if you weren't a member.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured response{
"left": true
}/v1/rooms/:id/membersList a room's members. Plain array, no pagination.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured response[
{
"id": "usr_EXAMPLE0001",
"display_name": "Jordan",
"username": "jordan",
"role": "owner",
"joined_at": "2026-03-09T14:22:00Z"
},
{
"id": "usr_EXAMPLE0002",
"display_name": "Sam",
"username": "sam",
"role": "member",
"joined_at": "2026-03-09T14:45:00Z"
}
]/v1/rooms/:id/messagesMessage history in chronological order (oldest first, despite the underlying query fetching newest-first and reversing). Supports limit and a before cursor; there is no offset parameter.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (3)
idstringRequiredlimitintegerOptionalbeforestringOptionalResponse
Illustrative example, not a captured response[
{
"id": "rmsg_EXAMPLE0001",
"room_id": "room_EXAMPLE0001",
"role": "user",
"user_id": "usr_EXAMPLE0001",
"user_name": "Jordan",
"dyva_id": null,
"content": "What do you two think about our Q2 strategy?",
"latency_ms": null,
"created_at": "2026-03-09T15:07:45Z"
},
{
"id": "rmsg_EXAMPLE0002",
"room_id": "room_EXAMPLE0001",
"role": "assistant",
"user_id": null,
"user_name": null,
"dyva_id": "dyva_EXAMPLE0001",
"dyva_name": "Atlas",
"content": "I'd recommend we focus on retention over acquisition this quarter.",
"latency_ms": 842,
"created_at": "2026-03-09T15:08:33Z"
}
]/v1/rooms/:id/messagesSend a message. Room Dyvas may reply based on the room's ai_interaction and max_ai_responses settings. Set stream: true to receive Server-Sent Events instead of the JSON body below.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (2)
contentstringRequiredstreambooleanOptionalResponse
Illustrative example, not a captured response{
"user_message": {
"id": "rmsg_EXAMPLE0003",
"room_id": "room_EXAMPLE0001",
"role": "user",
"user_id": "usr_EXAMPLE0001",
"content": "Let's also discuss the partnership pipeline.",
"created_at": "2026-03-09T15:12:09Z"
},
"ai_messages": [
{
"id": "rmsg_EXAMPLE0004",
"room_id": "room_EXAMPLE0001",
"role": "assistant",
"dyva_id": "dyva_EXAMPLE0001",
"dyva_name": "Atlas",
"content": "Good call. I've tracked three potential partners from inbound this month.",
"latency_ms": 1120,
"created_at": "2026-03-09T15:12:11Z"
}
]
}/v1/rooms/:id/messages/:msg_idDelete a message.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (2)
idstringRequiredmsg_idstringRequiredResponse
Illustrative example, not a captured responseHTTP/1.1 204 No Content/v1/rooms/:id/dyvasAdd a Dyva to the room. Owner only.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredRequest body (1)
dyva_idstringRequiredResponse
Illustrative example, not a captured response{
"id": "dyva_EXAMPLE0003",
"name": "Sage",
"avatar_url": "https://cdn.dyva.ai/avatars/dyva_EXAMPLE0003.webp"
}/v1/rooms/:id/dyvasList a room's Dyvas.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (1)
idstringRequiredResponse
Illustrative example, not a captured response[
{
"id": "dyva_EXAMPLE0001",
"name": "Atlas",
"avatar_url": "https://cdn.dyva.ai/avatars/dyva_EXAMPLE0001.webp",
"added_at": "2026-03-09T14:22:00Z"
}
]/v1/rooms/:id/dyvas/:dyva_idRemove a Dyva from the room. Owner only.
Route and method verified directly against the live ts-api source on August 13, 2026.
Path and query parameters (2)
idstringRequireddyva_idstringRequiredResponse
Illustrative example, not a captured responseHTTP/1.1 204 No Content