Bedrud ドキュメント

ルーム管理エンドポイントは /api/room/ 以下にあります。すべてのエンドポイントで認証が必要です。

概要

エンドポイントメソッド説明
/api/room/createPOST新しいルームを作成
/api/room/joinPOSTルームに参加し、LiveKitトークンを取得
/api/room/listGET利用可能なルームを一覧表示
/api/room/:roomId/kick/:identityPOST参加者をキック(管理者)
/api/room/:roomId/mute/:identityPOST参加者をミュート(管理者)
/api/room/:roomId/video/:identity/offPOST参加者のビデオを無効化(管理者)

エンドポイント

ルームの作成

新しいミーティングルームを作成します。認証済みユーザーがルーム管理者になります。

POST /api/room/create

ヘッダー: Authorization: Bearer <accessToken>

リクエストボディ:

{
  "name": "team-standup",
  "isPublic": true,
  "mode": "standard",
  "settings": {
    "allowChat": true,
    "allowVideo": true,
    "allowAudio": true,
    "requireApproval": false,
    "e2ee": false
  }
}

注意: name フィールドは省略可能です。省略または空の場合、サーバーが xxx-xxxx-xxx 形式(例:bkf-qmzl-rja)のランダムなURLセーフな名前を自動生成します。

ルーム名のルール:

ルーム名はURLの一部として https://bedrud.xyz/m/NAME に表示されるため、URLセーフである必要があります:

ルール説明
使用可能な文字小文字(a-z)、数字(0-9)、ハイフン(-
最小文字数3文字
最大文字数63文字
特殊文字不可#@_./\<>&%+=;:'"?!、スペースなどは使用できません
先頭・末尾のハイフン不可-roomroom- は無効です
連続するハイフン不可room--name は無効です
小文字のみ大文字は拒否されます。入力は自動的に小文字に変換されます
一意性各ルーム名は一意である必要があります

レスポンス (200):

{
  "id": "uuid",
  "name": "team-standup",
  "createdBy": "user-uuid",
  "isActive": true,
  "isPublic": true,
  "maxParticipants": 0,
  "settings": {
    "allowChat": true,
    "allowVideo": true,
    "allowAudio": true,
    "requireApproval": false,
    "e2ee": false
  },
  "livekitHost": "wss://lk.bedrud.xyz",
  "mode": "standard"
}

フィールド

フィールド必須説明
namestringいいえURLセーフなルーム名(省略時は自動生成)
isPublicbooleanいいえパブリックリストに表示するかどうか
modestringいいえルームモード(例:"standard"
maxParticipantsnumberいいえ最大参加者数
settings.allowChatbooleanいいえテキストチャットを有効にするかどうか
settings.allowVideobooleanいいえビデオを有効にするかどうか
settings.allowAudiobooleanいいえオーディオを有効にするかどうか
settings.requireApprovalbooleanいいえ参加時に管理者の承認が必要かどうか
settings.e2eebooleanいいえ端末間暗号化を有効にするかどうか

ルームへの参加

既存のルームに参加し、メディア接続用のLiveKitトークンを取得します。

POST /api/room/join

ヘッダー: Authorization: Bearer <accessToken>

リクエストボディ:

{
  "roomName": "team-standup"
}

レスポンス (200):

{
  "id": "uuid",
  "name": "team-standup",
  "token": "eyJ...",
  "createdBy": "user-uuid",
  "adminId": "user-uuid",
  "isActive": true,
  "isPublic": true,
  "maxParticipants": 20,
  "expiresAt": "2026-02-16T12:00:00Z",
  "settings": { ... },
  "livekitHost": "wss://lk.bedrud.xyz",
  "mode": "standard"
}

token は署名済みのLiveKitアクセストークンです。WebSocket経由でLiveKitサーバーに接続するために使用します:

import { Room } from 'livekit-client';
 
const room = new Room();
await room.connect(livekitUrl, token);

ルーム一覧の取得

ユーザーが作成したルームの一覧を取得します。

GET /api/room/list

ヘッダー: Authorization: Bearer <accessToken>

レスポンス (200):

[
  {
    "id": "uuid",
    "name": "team-standup",
    "createdBy": "user-uuid",
    "isActive": true,
    "maxParticipants": 20,
    "expiresAt": "2026-02-16T12:00:00Z",
    "settings": { ... },
    "mode": "standard",
    "relationship": "creator"
  }
]

参加者のキック

参加者をルームから退出させます。ルーム管理者のみが実行できます。

POST /api/room/:roomId/kick/:identity

ヘッダー: Authorization: Bearer <accessToken>

レスポンス (200):

{
  "status": "success"
}

参加者のミュート

参加者のマイクをミュートします。ルーム管理者のみが実行できます。

POST /api/room/:roomId/mute/:identity

ヘッダー: Authorization: Bearer <accessToken>

レスポンス (200):

{
  "status": "success"
}

参加者のビデオの無効化

参加者のカメラをオフにします。ルーム管理者のみが実行できます。

POST /api/room/:roomId/video/:identity/off

ヘッダー: Authorization: Bearer <accessToken>

レスポンス (200):

{
  "status": "success"
}

管理者コントロール

ルーム管理者の操作(キック、ミュート、ビデオオフ)は、ルームを作成したユーザー(adminId)のみが実行できます。管理者以外のユーザーがこれらの操作を試みると、403エラーが返されます。

権限マトリックス

操作ルーム管理者Super Admin一般ユーザーゲスト
ルーム作成はいはいはいいいえ
ルーム参加はいはいはいはい
ルーム一覧はいはいはいはい
キックはいはいいいえいいえ
ミュートはいはいいいえいいえ
ビデオオフはいはいいいえいいえ

エラーレスポンス

すべてのエラーは統一された形式に従います:

{
  "error": "human-readable error message"
}

ルーム作成エラー

ステータスコードエラーメッセージ説明
400"Invalid request body"不正なJSON形式
400"room name must contain only lowercase letters, numbers, and hyphens"名前に特殊文字が含まれている(#@_ など)
400"room name must be at least 3 characters"名前が短すぎます
400"room name must be at most 63 characters"名前が長すぎます
409"a room with this name already exists"名前が重複しています
500"Failed to create media room"LiveKitサーバーエラー
500"Failed to create room"データベースエラー

一般エラー

ステータスコード意味
400不正なリクエスト(データの不足または無効)
401未認証
403権限なし(非管理者が管理者操作を試行)
404ルームが見つかりません
409競合(リソースの重複)
500サーバー内部エラー

関連ドキュメント