ryOS ryOS / Docs
GitHub Launch

Rooms API

Endpoints for creating, listing, and managing chat rooms.

Overview

Chat rooms are either public (visible to all users) or private (visible only to members). Users can create, join, leave, and delete rooms.

Endpoint Summary

MethodEndpointDescriptionAuth
GET/api/roomsList rooms (public + private membership)No
POST/api/roomsCreate roomYes
GET/api/rooms/{id}Get room by IDNo
DELETE/api/rooms/{id}Delete roomYes
POST/api/rooms/{id}/joinJoin roomYes
POST/api/rooms/{id}/leaveLeave roomYes
GET/api/rooms/{id}/usersList active usersNo

Endpoints

List Rooms

Get all public rooms and private rooms visible to the authenticated user (if provided).

GET /api/rooms?username=alice
Query Parameters:
ParameterTypeRequiredDescription
usernamestringNoLegacy compatibility query param (visibility still comes from auth token when present)
Response (200):
{
  "rooms": [
    {
      "id": "general",
      "name": "General Chat",
      "type": "public",
      "createdAt": 1704067200000,
      "userCount": 15
    },
    {
      "id": "abc123",
      "name": "Private Room",
      "type": "private",
      "members": ["alice", "bob"],
      "createdAt": 1704153600000,
      "userCount": 2
    }
  ]
}

Create Room

Create a new chat room. Requires authentication.

Notes:

  • Public room creation is admin-only (ryo).
  • Private room creation requires at least one member; creator is auto-included.

POST /api/rooms
Authorization: Bearer {token}
X-Username: alice
Content-Type: application/json

{
  "type": "private",
  "members": ["alice", "bob"],
  "name": "Project Discussion"  // optional
}
Request Body:
FieldTypeRequiredDescription
typestringYes"public" or "private"
membersstring[]For privateList of usernames
namestringPublicPublic room name (private names are generated)
Response (200):
{
  "room": {
    "id": "abc123def456",
    "name": "@alice, @bob",
    "type": "private",
    "members": ["alice", "bob"],
    "createdAt": 1704067200000,
    "userCount": 2
  }
}

Get Room

Get details for a specific room.

GET /api/rooms/{id}
Response (200):
{
  "room": {
    "id": "general",
    "name": "General Chat",
    "type": "public",
    "createdAt": 1704067200000,
    "userCount": 15
  }
}

Delete Room

Delete a room.

  • Public rooms: admin-only (ryo).
  • Private rooms: members can "delete" by leaving; room is removed automatically when <= 1 members remain.

DELETE /api/rooms/{id}
Authorization: Bearer {token}
X-Username: alice
Response (200):
{
  "success": true
}

Join Room

Join a room to participate in chat.

POST /api/rooms/{id}/join
Authorization: Bearer {token}
X-Username: alice
Content-Type: application/json

{
  "username": "alice"
}
Response (200):
{
  "success": true
}

Leave Room

Leave a room.

POST /api/rooms/{id}/leave
Authorization: Bearer {token}
X-Username: alice
Content-Type: application/json

{
  "username": "alice"
}
Response (200):
{
  "success": true
}

List Active Users

Get list of users currently active in a room.

GET /api/rooms/{id}/users
Response (200):
{
  "users": [
    {
      "username": "alice",
      "joinedAt": 1704067200000
    },
    {
      "username": "bob",
      "joinedAt": 1704153600000
    }
  ]
}

Room Types

Public Rooms

  • Visible to all users in room listings
  • Anyone can join without invitation
  • Default room type for general discussions

Private Rooms

  • Only visible to members
  • Created with a specific member list
  • Ideal for direct messages or group chats

Error Responses

StatusErrorDescription
400Invalid requestMissing or invalid parameters
401Authentication requiredToken missing or invalid
403ForbiddenNot authorized to perform action (admin/member checks)
404Room not foundRoom ID doesn't exist
429Rate limit exceededToo many requests

Related