SkyWay Room API

SkyWay Room API は、SkyWay の Room に対する操作を実行するサーバーサイド向け API です。 API は JSON-RPC 2.0 に準拠しています。

API エンドポイント

https://room.skyway.ntt.com/v1/json-rpc

HTTP POST メソッドでリクエストを行なってください。

認証

リクエストの Authorization ヘッダーに SkyWay Admin Auth Token を入れる必要があります。 YOUR_SKYWAY_ADMIN_AUTH_TOKEN は生成した SkyWay Admin Auth Token で置き換えてください。

Authorization: Bearer YOUR_SKYWAY_ADMIN_AUTH_TOKEN

SkyWay Admin Auth Token の詳細については SkyWay Admin Auth Token のドキュメントを参照してください。

エラーレスポンスについて

エラーレスポンスのレスポンスボディに含まれる error.codeJSON-RPC 2.0 の Error object で定義されているエラーコードのほか、SkyWay Room API として以下のコードを定義しています。

code説明
401SkyWay Admin Auth Token が不正な場合
404リソースが見つからなかった場合
409すでにリソースが存在する場合
429Free プランをご利用のプロジェクトで
月次の接続回数制限を超過している場合
429リクエストのレートリミットを超過した場合

以下のエラーレスポンスは、実行する Room API のメソッドに関わらず共通して発生し得る異常ケースです。

  • SkyWay Admin Auth Token が不正な場合のレスポンスボディ
{ "jsonrpc": "2.0", "id": 0, "error": { "code": 401, "message": "Verify admin token failed" } }
  • Free プランをご利用のプロジェクトで月次の接続回数制限※を超過している場合のレスポンスボディ
{ "jsonrpc": "2.0", "id": 0, "error": { "code": 429, "message": "Project usage limit has been exceeded" } }

※接続回数の上限は「プランの詳細」ページの「接続料」をご確認ください。

  • リクエストのレートリミット※を超過した場合のレスポンスボディ
{ "jsonrpc": "2.0", "id": 0, "error": { "code": 429, "message": "exceeded rate limit", } }

※リクエストレートの制限に関する詳細は「割り当てと制限」ページの「リクエストレートの制限」セクションをご確認ください。

  • リクエストボディの id プロパティが文字列もしくは整数以外の場合のレスポンスボディ
{ "jsonrpc": "2.0", "id": null, "error": { "code": -32600, "message": "Request 'id' must be a string or integer", } }

findRoom

id または name から Room を取得します。 id と name の両方が指定された場合は id に基づいて Room を取得します。

リクエストボディ

リクエストボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 を指定する
idstring | integer任意の値を指定する。レスポンスボディにはリクエストボディで指定した id の値が入る
methodstringfindRoom を指定する
paramsobjectRoom の id または name を指定する(id あるいは name のいずれかは必須)

params プロパティの構造

プロパティ形式必須説明
idstring (UUID v4)Room の id を指定する
namestringRoom の name を指定する

例 1. id 6abbecae-dd86-4e8b-ab9f-8da2c7740ddc の Room を取得する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "findRoom", "params": { "id": "6abbecae-dd86-4e8b-ab9f-8da2c7740ddc" } }

例 2. name sample-room の Room を取得する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "findRoom", "params": { "name": "sample-room" } }

レスポンスボディ

正常系

レスポンスボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 が入る
idstring | integerリクエストボディで指定した id の値が入る
resultobject
result.roomRoomRoom 情報を表すオブジェクト

Room オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Room を一意に特定する値
namestringアプリケーション内で Room を一意に特定する値
expiresAtstringRoom の失効時刻(ISO 8601 形式)
membersMember[]Member 情報を表すオブジェクトの配列
publicationsPublication[]Publication 情報を表すオブジェクトの配列
subscriptionsSubscription[]Subscription 情報を表すオブジェクトの配列
metadatastring

Member オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Member を一意に特定する値
namestringRoom 内で Member を一意に特定する値
metadatastring

Publication オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Publication を一意に特定する値
publisherPublisherPublish している Member の情報
contentTypestringAUDIOVIDEO または DATA が入る
isEnabledbooleanPublication が有効の場合 true、そうでなければ false が入る
typestringP2P または SFU が入る
metadatastring

Publisher オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Publisher の Member id
namestringPublisher の Member name

Subscription オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Subscription を一意に特定する値
publicationIdstring (UUID v4)️✔subscribe している Publication の id
subscriberSubscribersubscribe している Member の情報

Subscriber オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Subscriber の Member id
namestringSubscriber の Member name

{ "jsonrpc": "2.0", "id": 0, "result": { "room": { "id": "6abbecae-dd86-4e8b-ab9f-8da2c7740ddc", "name": "sample-room", "expiresAt": "2025-11-25T12:34:56Z", "members": [ { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3", "name": "user01", "metadata": "publisher" }, { "id": "504ac623-7880-49b5-855f-aa73856ae5e7", "name": "user02", "metadata": "subscriber" } ], "publications": [ { "id": "aa63b6d1-c1c5-447b-b7ea-faebe70a8b11", "contentType": "VIDEO", "isEnabled": true, "type": "SFU", "publisher": { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3", "name": "user01" } }, { "id": "7b213f12-42ba-40f2-9b36-9eb967d263d6", "contentType": "DATA", "isEnabled": true, "type": "P2P", "publisher": { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3", "name": "user01" } } ], "subscriptions": [ { "id": "be35b8dc-bcc3-4005-bf2a-b4d52d51f2db", "publicationId": "aa63b6d1-c1c5-447b-b7ea-faebe70a8b11", "subscriber": { "id": "504ac623-7880-49b5-855f-aa73856ae5e7", "name": "user02" } }, { "id": "4fcef9c1-3f7a-4287-92de-332c2baf3ce6", "publicationId": "7b213f12-42ba-40f2-9b36-9eb967d263d6", "subscriber": { "id": "504ac623-7880-49b5-855f-aa73856ae5e7", "name": "user02" } } ] } } }

異常系

例 1. 指定した id の Room が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Room '6abbecae-dd86-4e8b-ab9f-8da2c7740ddc' not found" } }

例 2. 指定した name の Room が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Room with name 'sample-room' not found" } }

例 3. Room の id および name がどちらも指定されていない場合

{ "jsonrpc": "2.0", "id": 0, "error": { "code": -32602, "message": "'id' or 'name' must be specified", }, }

createRoom

Room を新規作成します。作成時に name や metadata を指定することができます。

リクエストボディ

リクエストボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 を指定する
idstring | integer任意の値を指定する。レスポンスボディにはリクエストボディで指定した id の値が入る
methodstringcreateRoom を指定する
paramsobjectRoom の name および metadata を指定できる

params プロパティの構造

プロパティ形式必須説明
namestringRoom の name を指定する。アプリケーション内で一意である必要がある
metadatastringRoom の metadata を指定する

例 1. sample-room という name を指定して Room を作成する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "createRoom", "params": { "name": "sample-room" } }

例 2. name を指定しないで Room を作成する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "createRoom", "params": {} }

レスポンスボディ

正常系

レスポンスボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 が入る
idstring | integerリクエストボディで指定した id の値が入る
resultobject
result.roomRoomRoom 情報を表すオブジェクト

Room オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Room を一意に特定する値
namestringアプリケーション内で Room を一意に特定する値
metadatastring

{ "jsonrpc": "2.0", "id": 0, "result": { "room": { "id": "6abbecae-dd86-4e8b-ab9f-8da2c7740ddc", "name": "sample-room" } }, }

異常系

例 1. 指定した name の Room がすでに存在していた場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 409, "message": "Room with name 'sample-room' already exists" } }

findOrCreateRoom

指定された name の Room が存在すればその Room 情報を取得し、そうでなければ新規作成します。

リクエストボディ

リクエストボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 を指定する
idstring | integer任意の値を指定する。レスポンスボディにはリクエストボディで指定した id の値が入る
methodstringfindOrCreateRoom を指定する
paramsobjectRoom の name および metadata を指定する(name は必須)

params プロパティの構造

プロパティ形式必須説明
namestringRoom の name を指定する
metadatastringRoom の metadata を指定する

{ "jsonrpc": "2.0", "id": 0, "method": "findOrCreateRoom", "params": { "name": "sample-room" } }

レスポンスボディ

正常系

レスポンスボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 が入る
idstring | integerリクエストボディで指定した id の値が入る
resultobject
result.roomRoomRoom 情報を表すオブジェクト

Room オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Room を一意に特定する値
namestringアプリケーション内で Room を一意に特定する値
expiresAtstringRoom の失効時刻(ISO 8601 形式)
membersMember[]Member 情報を表すオブジェクトの配列
publicationsPublication[]Publication 情報を表すオブジェクトの配列
subscriptionsSubscription[]Subscription 情報を表すオブジェクトの配列
metadatastring

Member オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Member を一意に特定する値
namestringRoom 内で Member を一意に特定する値
metadatastring

Publication オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Publication を一意に特定する値
publisherPublisherPublish している Member の情報
contentTypestringAUDIOVIDEO または DATA が入る
isEnabledbooleanPublication が有効の場合 true、そうでなければ false が入る
typestringP2P または SFU が入る
metadatastring

Publisher オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Publisher の Member id
namestringPublisher の Member name

Subscription オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Subscription を一意に特定する値
publicationIdstring (UUID v4)️✔subscribe している Publication の id
subscriberSubscribersubscribe している Member の情報

Subscriber オブジェクト

プロパティ形式必須説明
idstring (UUID v4)️✔Subscriber の Member id
namestringSubscriber の Member name

{ "jsonrpc": "2.0", "id": 0, "result": { "room": { "id": "6abbecae-dd86-4e8b-ab9f-8da2c7740ddc", "name": "sample-room", "expiresAt": "2025-11-25T12:34:56Z", "members": [ { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3", "name": "user01", "metadata": "publisher" }, { "id": "504ac623-7880-49b5-855f-aa73856ae5e7", "name": "user02", "metadata": "subscriber" } ], "publications": [ { "id": "aa63b6d1-c1c5-447b-b7ea-faebe70a8b11", "contentType": "VIDEO", "isEnabled": true, "type": "SFU", "publisher": { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3", "name": "user01" } }, { "id": "7b213f12-42ba-40f2-9b36-9eb967d263d6", "contentType": "DATA", "isEnabled": true, "type": "P2P", "publisher": { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3", "name": "user01" } } ], "subscriptions": [ { "id": "be35b8dc-bcc3-4005-bf2a-b4d52d51f2db", "publicationId": "aa63b6d1-c1c5-447b-b7ea-faebe70a8b11", "subscriber": { "id": "504ac623-7880-49b5-855f-aa73856ae5e7", "name": "user02" } }, { "id": "4fcef9c1-3f7a-4287-92de-332c2baf3ce6", "publicationId": "7b213f12-42ba-40f2-9b36-9eb967d263d6", "subscriber": { "id": "504ac623-7880-49b5-855f-aa73856ae5e7", "name": "user02" } } ] } } }

異常系

例 1. Room の name が指定されていない場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": -32602, "message": "Parameter must have required property 'name'", } }

closeRoom

id または name で指定した Room を削除します。 id と name の両方が指定された場合は id に基づいて Room を削除します。

リクエストボディ

リクエストボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 を指定する
idstring | integer任意の値を指定する。レスポンスボディにはリクエストボディで指定した id の値が入る
methodstringcloseRoom を指定する
paramsobjectRoom の id または name を指定する(id あるいは name のいずれかは必須)

params プロパティの構造

プロパティ形式必須説明
idstring (UUID v4)Room の id を指定する
namestringRoom の name を指定する

例 1. id 6abbecae-dd86-4e8b-ab9f-8da2c7740ddc の Room を削除する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "closeRoom", "params": { "id": "6abbecae-dd86-4e8b-ab9f-8da2c7740ddc" } }

例 2. name sample-room の Room を削除する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "closeRoom", "params": { "name": "sample-room" } }

レスポンスボディ

正常系

レスポンスボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 が入る
idstring | integerリクエストボディで指定した id の値が入る
resultobject

{ "jsonrpc": "2.0", "id": 0, "result": {} }

異常系

例 1. 指定した id の Room が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Room '6abbecae-dd86-4e8b-ab9f-8da2c7740ddc' not found" } }

例 2. 指定した name の Room が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Room with name 'sample-room' not found" } }

例 3. Room の id および name がどちらも指定されていない場合

{ "jsonrpc": "2.0", "id": 0, "error": { "code": -32602, "message": "'id' or 'name' must be specified", }, }

removeMember

id または name で指定した特定の Member を削除します。 id と name の両方が指定された場合は id に基づいて Member を削除します。

リクエストボディ

リクエストボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 を指定する
idstring | integer任意の値を指定する。レスポンスボディにはリクエストボディで指定した id の値が入る
methodstringremoveMember を指定する
paramsobjectRoom および Member を指定する

params プロパティの構造

プロパティ形式必須説明
roomobjectRoom の id または name を指定する(id あるいは name のいずれかは必須)

room プロパティの構造

プロパティ形式必須説明
idstringRoom の id を指定する
namestringRoom の name を指定する
memberobjectMember の id または name を指定する(id あるいは name のいずれかは必須)

member プロパティの構造

プロパティ形式必須説明
idstringMember の id を指定する
namestringMember の name を指定する

例 1. id 6abbecae-dd86-4e8b-ab9f-8da2c7740ddc の Room から、id 1adee02b-811d-4a79-b07d-cdcb1437c7c3 の Member を削除する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "removeMember", "params": { "room": { "id": "6abbecae-dd86-4e8b-ab9f-8da2c7740ddc", "member": { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3" } } } }

例 2. id 6abbecae-dd86-4e8b-ab9f-8da2c7740ddc の Room から、name user01 の Member を削除する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "removeMember", "params": { "room": { "id": "6abbecae-dd86-4e8b-ab9f-8da2c7740ddc", "member": { "name": "user01" } } } }

例 3. name sample-room の Room から、id 1adee02b-811d-4a79-b07d-cdcb1437c7c3 の Member を削除する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "removeMember", "params": { "room": { "name": "sample-room", "member": { "id": "1adee02b-811d-4a79-b07d-cdcb1437c7c3" } } } }

例 4. name sample-room の Room から、name user01 の Member を削除する場合のリクエストボディ

{ "jsonrpc": "2.0", "id": 0, "method": "removeMember", "params": { "room": { "name": "sample-room", "member": { "name": "user01" } } } }

レスポンスボディ

正常系

レスポンスボディ

プロパティ形式必須説明
jsonrpcstring️✔2.0 が入る
idstring | integerリクエストボディで指定した id の値が入る
resultobject

{ "jsonrpc": "2.0", "id": 0, "result": {} }

異常系

例 1. 指定した id の Room が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Room '6abbecae-dd86-4e8b-ab9f-8da2c7740ddc' not found" } }

例 2. 指定した name の Room が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Room with name 'sample-room' not found" } }

例 3. Room の id および name がどちらも指定されていない場合

{ "jsonrpc": "2.0", "id": 0, "error": { "code": -32602, "message": "Room 'id' or 'name' must be specified" }, }

例 4. 指定した id の Member が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Member '1adee02b-811d-4a79-b07d-cdcb1437c7c3' not found" } }

例 5. 指定した name の Member が存在しなかった場合のレスポンスボディ

{ "jsonrpc": "2.0", "id": 0, "error": { "code": 404, "message": "Member with name 'user01' not found" } }

例 6. Member の id および name がどちらも指定されていない場合

{ "jsonrpc": "2.0", "id": 0, "error": { "code": -32602, "message": "Member 'id' or 'name' must be specified" }, }