Overview
Realtime (リアルタイム)
リアルタイム API
リアルタイム API リファレンス
TaskWorks API のリアルタイム通信関連エンドポイントの詳細ドキュメントです。
# リアルタイム API リファレンス
TaskWorks API のリアルタイム通信関連エンドポイントの詳細ドキュメントです。
## 認証方式
### ApiKey 認証(推奨)
```
Authorization: ApiKey <token>
```
- 設定 > APIキー管理 から生成
- トークンは一度しか表示されないため安全に保管
- ほとんどのエンドポイントで使用可能
### Bearer トークン認証
```
Authorization: Bearer <token>
```
- サービス間通信で使用
- 一部のエンドポイントで必須(例: /api/v1/blocks/windows)
### Cookie 認証
- 標準のセッションベース認証
- Webクライアントで使用
- Cookie専用エンドポイントで必須
## 共通レスポンス形式
すべての成功レスポンスは以下の構造に従います:
```json
{
"data": <response_data>,
"error": null
}
```
すべてのエラーレスポンスは以下の構造に従います:
```json
{
"error": "<error_type>",
"message": "<human_readable_message>",
"code": "<optional_error_code>",
"context": <optional_additional_context>
}
```
## HTTP ステータスコード
- 200: 成功
- 201: 作成完了
- 400: 不正なリクエスト(検証エラー)
- 401: 未認証(認証が必要)
- 403: 禁止(権限なし)
- 404: 未検出
- 409: 衝突(リソースの競合)
- 500: サーバー内部エラー
## ページネーション
一部のエンドポイントはカーソルベースのページネーションをサポート:
- cursor: 次ページの開始位置
- limit: 返す項目数(1-100、デフォルトはエンドポイントにより異なる)
レスポンス形式:
```json
{
"data": {
"items": [...],
"nextCursor": "string | null",
"hasMore": boolean
},
"error": null
}
```
## API エンドポイント
### リアルタイム(Realtime - WebRTC ビデオルーム)
#### POST /api/v1/realtime/rooms
新しい音声/ビデオルームを作成します(WebRTCオファー使用)。
**認証:** なし(WebRTCオファー使用)
**リクエストボディ:**
```json
{
"offer": Object (WebRTC offer)
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"roomId": "string",
"answer": Object (WebRTC answer)
},
"error": null
}
```
---
#### POST /api/v1/realtime/rooms/:roomId/session
既存のルームに参加します(WebRTCオファー使用)。
**認証:** なし(WebRTCオファー使用)
**パスパラメータ:**
- roomId: string(必須)- ルームID
**リクエストボディ:**
```json
{
"offer": Object (WebRTC offer)
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"roomId": "string",
"answer": Object (WebRTC answer),
"participantId": "string"
},
"error": null
}
```
---
#### GET /api/v1/realtime/rooms/:roomId/state
ルーム状態を取得します。
**認証:** Cookie のみ
**パスパラメータ:**
- roomId: string(必須)- ルームID
**レスポンス スキーマ:**
```json
{
"data": {
"roomId": "string",
"participants": Array<{
"id": "string",
"userId": "string",
"joinedAt": "string"
}>,
"activeTracks": Array<Object>,
"createdAt": "string",
"updatedAt": "string"
},
"error": null
}
```
---
#### POST /api/v1/realtime/rooms/:roomId/tracks/publish
メディアトラックを公開します。
**認証:** Cookie のみ
**パスパラメータ:**
- roomId: string(必須)- ルームID
**リクエストボディ:**
```json
{
"track": Object (WebRTC track data)
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"trackId": "string",
"publishedAt": "string"
},
"error": null
}
```
---
#### POST /api/v1/realtime/rooms/:roomId/tracks/subscribe
メディアトラックを購読します。
**認証:** Cookie のみ
**パスパラメータ:**
- roomId: string(必須)- ルームID
**リクエストボディ:**
```json
{
"trackId": "string (required)"
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"subscribed": true,
"subscribedAt": "string"
},
"error": null
}
```
---
#### POST /api/v1/realtime/rooms/:roomId/renegotiate
WebRTC接続を再ネゴシエートします。
**認証:** Cookie のみ
**パスパラメータ:**
- roomId: string(必須)- ルームID
**リクエストボディ:**
```json
{
"offer": Object (WebRTC offer)
}
```
**レスポンス スキーマ:**
```json
{
"data": {
"answer": Object (WebRTC answer)
},
"error": null
}
```
---
#### POST /api/v1/realtime/communities/:communityId/spaces
コミュニティスペース一覧を取得します。
**認証:** Cookie のみ
**パスパラメータ:**
- communityId: string(必須)- コミュニティID
**レスポンス スキーマ:**
```json
{
"data": [
{
"id": "string",
"communityId": "string",
"name": "string",
"roomId": "string | null",
"createdAt": "string"
}
],
"error": null
}
```