# 実験的 API

## 概要

実験的 API とは、今後のアップデートで互換性を保証しない API です。

将来的には正式版としてリリースするか、または非推奨となり廃止するかのどちらかです。


## シグナリング API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります


### ListChannels

**x-sora-target**: Sora_20201013.ListChannels

全てのチャネル一覧を取得します。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20201013.ListChannels \
    -vvv
POST / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.2.0
x-sora-target: Sora_20201013.ListChannels



HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 120
content-type: application/json
date: Thu, 26 Nov 2020 04:16:17 GMT
server: Cowboy

[
    {
        "channel_id": "sora",
        "multistream": true,
        "spotlight": false
    },
    {
        "channel_id": "akane",
        "multistream": true,
        "spotlight": false
    }
]
```


## クラスター API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります


### InitCluster

**x-sora-target**: Sora_20221221.InitCluster

クラスターを初期化する際に必ず実行する必要がある API です。

クラスター初期化時に参加させるどれかのノードに対して行ってください。

`node_name_list` には初期化されたクラスターに参加するノードのリストを指定してください。
API が成功すると、そのノードリストで構成されるクラスターが構築されます。

> **ヒント**
>
> InitCluster API の実行はひとつのクラスターにつき一度だけ必要です。
> InitCluster API が成功した場合、その後のノード追加には [JoinCluster](EXPERIMENTAL_API.html#17f3f5) API を使います。
>
> InitCluster API が次に必要になるのはクラスターが破綻した場合です。
> 詳細は [クラスター運用](CLUSTER.html#0233aa) を参照ください。

* - キー
  - 型
* - node_name_list
  - array of string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20221221.InitCluster \
    node_name_list:='["node-02@192.0.2.7", "node-03@10.99.0.8", "node-01@192.0.2.5"]' \
    -vvv
```


### JoinCluster

**x-sora-target**: Sora_20211215.JoinCluster

指定したクラスターノードに参加します。

参加したいクラスターに属するノードのいずれかを `contact_node_name` で指定してください。
クラスターに属していれば、どのノードでもかまいません。

- 参加したいクラスターがすでに初期化されている必要があります。
- 正常に完了するためには、参加したいクラスターの過半数のノードが正常に稼働している必要があります- 参加したいクラスターが 1 ノードのときは例外で、そのノードが稼働していれば正常に処理可能です

> **注釈**
>
> 新規にクラスターを作成する場合には、まず [InitCluster](EXPERIMENTAL_API.html#621990) API を使用してください。

事前にクラスターの参加ノードが判明している場合には `sora.conf` の `contact_node_name_list` に指定しておくと、
それらのノードに対して、起動時に自動で JoinCluster を試行するようになります。

* - キー
  - 型
* - contact_node_name
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20211215.JoinCluster \
    contact_node_name=node-03@10.99.0.8 \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 42
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/1.0.3
x-sora-target: Sora_20211215.JoinCluster

{
    "contact_node_name": "node-03@192.0.2.8"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 116
content-type: application/json
date: Tue, 16 Nov 2021 09:28:11 GMT
server: Cowboy

{
    "node_name_list": [
        "node-01@192.0.2.5"
        "node-02@192.0.2.7",
        "node-03@192.0.2.8",
        "node-04@192.0.2.9",
        "node-05@192.0.2.10",
    ]
}
```


### ListClusterNodes

**x-sora-target**: Sora_20211215.ListClusterNodes

クラスターのノード一覧を表示します。

* - キー
  - 型
* - include_all_known_nodes (オプション)
  - boolean

`include_all_known_nodes` を `true` に指定することで、接続していないノードも含め、そのノードが知っているすべてのノード一覧を返します。
接続していないノードについては `node_name` と `connected` のみが結果に含まれます。

**レスポンス JSON**

* - キー
  - 型
  - 内容
* - external_api_url
  - string
  - ``sora.conf`` の ``external_api_url``
* - epoch
  - integer
  - 再起動回数
* - license_max_nodes
  - integer
  - ライセンスの最大ノード数
* - license_max_connections
  - integer
  - ライセンスの最大同時接続数
* - license_serial_code
  - string
  - ライセンスのシリアルコード
* - license_type
  - string
  - ライセンスのタイプ
* - node_name
  - string
  - ``sora.conf`` の ``node_name``
* - connected
  - boolean
  - API 実行ノードと正常に接続できているかどうか
* - external_signaling_url
  - string
  - ``sora.conf`` の ``external_signaling_url``
* - version
  - string
  - Sora のバージョン
* - mode
  - string
  - モード (normal / block_new_session / block_new_connection / initial)

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20211215.ListClusterNodes \
    -vvv
POST / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: 127.0.0.1:3000
User-Agent: HTTPie/1.0.3
x-sora-target: Sora_20211215.ListClusterNodes



HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 1753
content-type: application/json
date: Tue, 16 Nov 2021 09:22:16 GMT
server: Cowboy

[
    {
        "external_api_url": "http://192.0.2.5:3000/",
        "epoch": 1,
        "license_max_connections": 500,
        "license_serial_code": "ABCDEF-SRA-E001-203801-500",
        "license_type": "Experimental",
        "node_name": "node-01@192.0.2.5",
        "mode": "normal",
        "connected": true,
        "external_signaling_url": "wss://node-01.example.com/signaling",
        "version": "2021.2"
    },
    {
        "api_url": "http://192.0.2.7:3000/",
        "epoch": 2,
        "license_max_connections": 500,
        "license_serial_code": "ABCDEF-SRA-E002-203801-500",
        "license_type": "Experimental",
        "node_name": "node-02@192.0.2.7",
        "mode": "normal",
        "connected": true,
        "external_signaling_url": "wss://node-02.example.com/signaling",
        "version": "2021.2"
    },
    {
        "external_api_url": "http://192.0.2.8:3000/",
        "epoch": 2,
        "license_max_connections": 500,
        "license_serial_code": "ABCDEF-SRA-E003-203801-500",
        "license_type": "Experimental",
        "node_name": "node-03@192.0.2.8",
        "mode": "normal",
        "connected": true,
        "external_signaling_url": "wss://node-03.example.com/signaling",
        "version": "2021.2"
    },
    {
        "external_api_url": "http://192.0.2.9:3000/",
        "epoch": 1,
        "license_max_connections": 500,
        "license_serial_code": "ABCDEF-SRA-E004-203801-500",
        "license_type": "Experimental",
        "node_name": "node-04@192.0.2.9",
        "mode": "normal",
        "connected": true,
        "external_signaling_url": "wss://node-04.example.com/signaling",
        "version": "2021.2"
    },
    {
        "external_api_url": "http://192.0.2.10:3000/",
        "epoch": 2,
        "license_max_connections": 500,
        "license_serial_code": "ABCDEF-SRA-E005-203801-500",
        "license_type": "Experimental",
        "node_name": "node-05@192.0.2.10",
        "mode": "normal",
        "connected": true,
        "external_signaling_url": "wss://node-05.example.com/signaling",
        "version": "2021.2"
    }
]
```


### ListClusterChannels

**x-sora-target**: Sora_20211215.ListClusterChannels

クラスターチャネル割り当て一覧を表示します。

* - キー
  - 型
  - 内容
* - channel_id
  - string
  - チャネル ID
* - owners
  - string
  - 担当ノード

owners には以下が含まれます。

* - キー
  - 型
  - 内容
* - node_name
  - string
  - ノード名
* - epoch
  - integer
  - 担当ノードへ割り当てられた際のクラスターへの参加回数
* - epoch_latest
  - boolean
  - 担当ノードが無効かどうか
* - connected
  - boolean
  - 担当ノードが API 実行ノードと正常に接続できているかどうか

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20211215.ListClusterChannels \
    -vvv
POST / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: 127.0.0.1:3000
User-Agent: HTTPie/1.0.3
x-sora-target: Sora_20211215.ListClusterChannels



HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 646
content-type: application/json
date: Tue, 16 Nov 2021 08:42:25 GMT
server: Cowboy

[
    {
        "channel_id": "sora",
        "owners": [
           {
               "node_name": "node-01@192.0.2.5",
               "epoch": 1,
               "epoch_latest": true,
               "connected": true
           }
        ]
    },
    {
        "channel_id": "lemon",
        "owners": [
           {
               "node_name": "node-01@192.0.2.5",
               "epoch": 1,
               "epoch_latest": true,
               "connected": true
           }
        ]
    },
    {
        "channel_id": "hisui",
        "owners": [
           {
               "node_name": "node-03@192.0.2.5",
               "epoch": 2,
               "epoch_latest": true,
               "connected": true
           }
        ]
    },
    {
        "channel_id": "zakuro",
        "owners": [
           {
               "node_name": "node-03@192.0.2.5",
               "epoch": 2,
               "epoch_latest": true,
               "connected": true
           }
        ]
    }
]
```


### PurgeClusterNode

**x-sora-target**: Sora_20220629.PurgeClusterNode

復旧がすぐには難しい障害が発生したノードや、縮退し再参加する予定が無いノードの情報をクラスターから完全消去します。

この API は 1 クラスターにつき 1 回実行すればすべての参加ノードから指定したノード情報が完全消去されます。

- この API の実行時には、消去対象のノードは停止している必要があります
- この API が正常に完了するためには、過半数のノードが正常に稼働している必要があります
- API を実行するノードは、クラスターに参加していて、正常に稼働しているノードであればどのノードでもかまいません

> **警告**
>
> PurgeClusterNode API はクラスターからノードを完全に消去するための API です。
> 再参加するノードに対しては基本的に使用しないでください。
> この API を含めた運用の手順は [クラスター運用](CLUSTER.html#0233aa) をご確認ください。

* - キー
  - 型
* - target_node_name
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20220629.PurgeClusterNode \
    target_node_name=node-03@192.0.2.5 \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 39
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/3.2.1
x-sora-target: Sora_20220629.PurgeClusterNode

{
    "target_node_name": "node-03@192.0.2.5"
}


HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:3000
access-control-max-age: 1000
content-length: 38
content-type: application/json
date: Sun, 12 Jun 2022 03:13:42 GMT
server: Cowboy

{
    "target_node_name": "node-03@192.0.2.5"
}
```

```console
$ http POST 127.0.0.1:3001/ x-sora-target:Sora_20220629.PurgeClusterNode \
    target_node_name=node-03@192.0.2.5 \
        -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Content-Length: 39
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/3.2.1
x-sora-target: Sora_20220629.PurgeClusterNode

{
    "target_node_name": "node-03@192.0.2.5"
}


HTTP/1.1 400 Bad Request
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:3000
access-control-max-age: 1000
content-length: 79
content-type: application/json
date: Sun, 12 Jun 2022 03:13:29 GMT
server: Cowboy

{
    "error_reason": {
        "target_node": "node-03@192.0.2.5"
    },
    "error_type": "NODE-IS-ALIVE"
}
```

## モード API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります


### ChangeMode

**x-sora-target**: Sora_20211215.ChangeMode

Sora のモードを変更します。

* - キー
  - 型
* - mode
  - string

`mode` はすべての新規コネクションを受け入れる `normal` 、新規セッションの受け入れを停止する `block_new_session` と新規コネクションの受け入れを停止する `block_new_connection` が指定可能です。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20211215.ChangeMode \
    mode=block_new_connection \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 32
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/1.0.3
x-sora-target: Sora_20211215.ChangeMode

{
    "mode": "block_new_connection"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 31
content-type: application/json
date: Tue, 16 Nov 2021 09:36:35 GMT
server: Cowboy

{
    "mode": "block_new_connection"
}
```


### GetMode

**x-sora-target**: Sora_20211215.GetMode

Sora のモードを取得します。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20211215.GetMode \
    -vvv
POST / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: 127.0.0.1:3000
User-Agent: HTTPie/1.0.3
x-sora-target: Sora_20211215.GetMode



HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 17
content-type: application/json
date: Tue, 16 Nov 2021 09:35:26 GMT
server: Cowboy

{
    "mode": "normal"
}
```


## RTP 転送 API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります

指定したチャネル ID の配信している映像または音声の RTP を指定した IP アドレスとポートに送信します。


### StartForwardingRtp

**x-sora-target**: Sora_20170814.StartForwardingRtp

指定したチャネルの RTP の転送を開始します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id (オプション)
  - string
* - ip_address
  - string
* - audio_port
  - integer
* - video_port
  - integer

マルチストリームの音声や映像を転送する場合は `connection_id` を指定してください。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20170814.StartForwardingRtp \
    channel_id=sora \
    ip_address=127.0.0.1 \
    audio_port:=60001 \
    video_port:=60003 \
    -vvv

POST / HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 93
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/0.9.2
x-sora-target: Sora_20170814.StartForwardingRtp

{
    "audio_port": 60001,
    "channel_id": "sora",
    "ip_address": "127.0.0.1",
    "video_port": 60003
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 262
content-type: application/json
date: Wed, 30 Aug 2017 02:08:50 GMT
server: Cowboy

{
    "sdp": "v=0\r\no=- 0 0 IN IP4 0.0.0.0\r\ns=-\r\nt=0 0\r\nm=audio 60001 RTP/SAVPF 109\r\nc=IN IP4 127.0.0.1\r\na=rtpmap:109 opus/48000/2\r\nm=video 60003 RTP/SAVPF 120\r\nc=IN IP4 127.0.0.1\r\na=rtpmap:120 VP9/90000\r\na=fmtp:120 max-fs=12288;max-fr=60\r\n"
}
```


### StopForwardingRtp

**x-sora-target**: Sora_20170814.StopForwardingRtp

指定したチャネルの RTP の転送を停止します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id (オプション)
  - string

マルチストリームの音声や映像の転送を停止する場合は `connection_id` を指定してください。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20170814.StopForwardingRtp \
    channel_id=sora \
    -vvv

POST / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 22
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/0.9.9
x-sora-target: Sora_20170814.StopForwardingRtp

{
    "channel_id": "sora"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 21
content-type: application/json
date: Fri, 25 Aug 2017 13:32:48 GMT
server: Cowboy

{
    "channel_id": "sora"
}
```

## シグナリング通知メタデータ拡張 API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります。


### ListSignalingNotifyMetadata

**x-sora-target**: Sora_20201124.ListSignalingNotifyMetadata

指定したチャネルの全ての接続のメタデータをリストで返します。リストの中には `connection_id` と `bundle_id` と `client_id` と `metadata` をキーとしたオブジェクトがリストで入ってきます。順番保証はしません。

* - キー
  - 型
* - channel_id
  - string

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20201124.ListSignalingNotifyMetadata \
    channel_id=sora \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 22
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.2.0
x-sora-target: Sora_20201124.ListSignalingNotifyMetadata

{
    "channel_id": "sora"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 111
content-type: application/json
date: Thu, 26 Nov 2020 03:45:25 GMT
server: Cowboy

[
    {
        "client_id": "V3Q452QQBD5TQ6ZQDMTEDKA07C",
        "bundle_id": "V3Q452QQBD5TQ6ZQDMTEDKA07C",
        "connection_id": "V3Q452QQBD5TQ6ZQDMTEDKA07C",
        "metadata": {
            "abc": 10
        }
    }
]
```


### GetSignalingNotifyMetadata

**x-sora-target**: Sora_20201124.GetSignalingNotifyMetadata

指定した接続のメタデータを取得します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20201124.GetSignalingNotifyMetadata \
    channel_id=sora \
    connection_id=0FQE5EA5YN3FS13P01QZ1JG8R0 \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 69
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.2.0
x-sora-target: Sora_20201124.GetSignalingNotifyMetadata

{
    "channel_id": "sora",
    "connection_id": "0FQE5EA5YN3FS13P01QZ1JG8R0"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 13
content-type: application/json
date: Thu, 26 Nov 2020 03:48:44 GMT
server: Cowboy

{
    "abc": "efg"
}
```


### PutSignalingNotifyMetadata

**x-sora-target**: Sora_20201124.PutSignalingNotifyMetadata

指定した接続のメタデータを作成します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string
* - metadata
  - object
* - push (オプション)
  - boolean

指定した接続のメタデータを作成します。メタデータがすでにあった場合は更新します。
追加したあとのメタデータが値として返ってきます。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20201124.PutSignalingNotifyMetadata \
    channel_id=sora \
    connection_id=0FQE5EA5YN3FS13P01QZ1JG8R0 \
    metadata:='{"abc": "efg"}' \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 97
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.2.0
x-sora-target: Sora_20201124.PutSignalingNotifyMetadata

{
    "channel_id": "sora",
    "connection_id": "0FQE5EA5YN3FS13P01QZ1JG8R0",
    "metadata": {
        "abc": "efg"
    }
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 13
content-type: application/json
date: Thu, 26 Nov 2020 03:47:52 GMT
server: Cowboy

{
    "abc": "efg"
}
```


### DeleteSignalingNotifyMetadata

**x-sora-target**: Sora_20201124.DeleteSignalingNotifyMetadata

指定した接続のメタデータを削除します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string
* - push (オプション)
  - boolean

指定した接続のメタデータを削除します。メタデータが空だったとしてもエラーにはなりません。
削除されるまえのメタデータが値として返ってきます。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20201124.DeleteSignalingNotifyMetadata \
    channel_id=sora \
    connection_id=0FQE5EA5YN3FS13P01QZ1JG8R0 \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 69
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.2.0
x-sora-target: Sora_20201124.DeleteSignalingNotifyMetadata

{
    "channel_id": "sora",
    "connection_id": "0FQE5EA5YN3FS13P01QZ1JG8R0"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 13
content-type: application/json
date: Thu, 26 Nov 2020 03:51:48 GMT
server: Cowboy

{
    "abc": "efg"
}
```


### PutSignalingNotifyMetadataItem

**x-sora-target**: Sora_20201124.PutSignalingNotifyMetadataItem

指定した接続のメタデータ項目を作成または更新します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string
* - key
  - string
* - value
  - json
* - push (オプション)
  - boolean

key/value で指定したメタデータ項目を追加します。その項目が既にあった場合は更新します。
追加したあとのメタデータが値として返ってきます。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20201124.PutSignalingNotifyMetadataItem \
    channel_id=sora \
    connection_id=0FQE5EA5YN3FS13P01QZ1JG8R0 \
    key=abc \
    value=efg \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 99
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.2.0
x-sora-target: Sora_20201124.PutSignalingNotifyMetadataItem

{
    "channel_id": "sora",
    "connection_id": "0FQE5EA5YN3FS13P01QZ1JG8R0",
    "key": "abc",
    "value": "efg"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 13
content-type: application/json
date: Thu, 26 Nov 2020 03:51:48 GMT
server: Cowboy

{
    "abc": "efg"
}
```

push を有効にした場合は、そのチャネルの全てのクライアントに以下のようなプッシュ通知が送られます。

```javascript
{
    "type": "push",
    "data": {
        "action": "PutMetadataItem",
        "connection_id": "0FQE5EA5YN3FS13P01QZ1JG8R0",
        "key": "abc",
        "type": "signaling_notify_metadata_ext",
        "value": "efg"
    }
}
```

- action- 呼ばれた API 名
- connection_id- シグナリング通知メタデータの項目が変更された接続の ID
- key- シグナリング通知メタデータの項目が変更されたキー
- value- シグナリング通知メタデータの項目が変更されたバリュー


### DeleteSignalingNotifyMetadataItem

**x-sora-target**: Sora_20201124.DeleteSignalingNotifyMetadataItem

指定した接続のメタデータ項目を削除します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string
* - key
  - string
* - push (オプション)
  - boolean

key で指定したメタデータ項目を削除します。その項目がなかったとしてもエラーにはなりません。
削除されたあとのメタデータが値として返ってきます。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20201124.DeleteSignalingNotifyMetadataItem \
    channel_id=sora \
    connection_id=0FQE5EA5YN3FS13P01QZ1JG8R0 \
    key=abc \
    push:=true \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 97
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.2.0
x-sora-target: Sora_20201124.DeleteSignalingNotifyMetadataItem

{
    "channel_id": "sora",
    "connection_id": "0FQE5EA5YN3FS13P01QZ1JG8R0",
    "key": "abc",
    "push": true
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 2
content-type: application/json
date: Thu, 26 Nov 2020 03:54:50 GMT
server: Cowboy

{}
```

## RTP ストリーム停止/再開 API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります。


### PauseRtpStream

**現時点では映像のみを停止します**

**x-sora-target**: Sora_20200401.PauseRtpStream

指定した接続からのストリームを停止します。

この API はマルチストリーム、サイマルキャスト、スポットライトで利用できます。

* - キー
  - 型
* - channel_id
  - string
* - recv_connection_id
  - string
* - send_connection_id
  - string

- recv_connection_id- RTP ストリームの受信を停止する接続の `connection_id` を指定します
- send_connection_id- 受信を停止する RTP ストリームを配信している接続の `connection_id` を指定します

映像自体は Sora までは届いていますが、実際の配信が一時停止されるという仕組みになっています。

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20200401.PauseRtpStream \
      channel_id=sora \
      recv_connection_id=VTGYC92AZX6M72K860BPREFTMC \
      send_connection_id=3X0W1C23KS1TQAAYMKA9TXJS4G \
      -vvv
POST / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 121
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.0.0
x-sora-target: Sora_20200401.PauseRtpStream

{
    "channel_id": "sora",
    "recv_connection_id": "VTGYC92AZX6M72K860BPREFTMC",
    "send_connection_id": "3X0W1C23KS1TQAAYMKA9TXJS4G"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 121
content-type: application/json
date: Thu, 16 Apr 2020 02:06:39 GMT
server: Cowboy

{
    "channel_id": "sora",
    "recv_connection_id": "VTGYC92AZX6M72K860BPREFTMC",
    "send_connection_id": "3X0W1C23KS1TQAAYMKA9TXJS4G"
}
```


### ResumeRtpStream

**x-sora-target**: Sora_20200401.ResumeRtpStream

指定した接続からのストリームを再開します。

この API はマルチストリーム、サイマルキャスト、スポットライトで利用できます。

* - キー
  - 型
* - channel_id
  - string
* - recv_connection_id
  - string
* - send_connection_id
  - string

- recv_connection_id- RTP ストリームの受信を再開する接続の `connection_id` を指定します
- send_connection_id- 受信を停止している RTP ストリームを配信している接続の `connection_id` を指定します

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20200401.ResumeRtpStream \
      channel_id=sora \
      recv_connection_id=VTGYC92AZX6M72K860BPREFTMC \
      send_connection_id=3X0W1C23KS1TQAAYMKA9TXJS4G \
      -vvv
POST / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 121
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.0.0
x-sora-target: Sora_20200401.ResumeRtpStream

{
    "channel_id": "sora",
    "recv_connection_id": "VTGYC92AZX6M72K860BPREFTMC",
    "send_connection_id": "3X0W1C23KS1TQAAYMKA9TXJS4G"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 121
content-type: application/json
date: Thu, 16 Apr 2020 02:07:27 GMT
server: Cowboy

{
    "channel_id": "sora",
    "recv_connection_id": "VTGYC92AZX6M72K860BPREFTMC",
    "send_connection_id": "3X0W1C23KS1TQAAYMKA9TXJS4G"
}
```


### ListPauseRtpStreams

**x-sora-target**: Sora_20200401.ListPauseRtpStreams

指定したチャネルの停止しているストリーム一覧を返します。

* - キー
  - 型
* - channel_id
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20200401.ListPauseRtpStreams \
    channel_id=sora \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 22
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.0.0
x-sora-target: Sora_20200401.ListPauseRtpStreams

{
    "channel_id": "sora"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 111
content-type: application/json
date: Thu, 09 Apr 2020 07:10:18 GMT
server: Cowboy

[
    {
        "channel_id": "sora",
        "recv_connection_id": "G8AN156DSD3DBBN4P15VJ74QRW",
        "role": "sendrecv",
        "send_connection_id": "47YZ3NYNRN2CS5MW2W8V28W6QW"
    }
]
```

## 統計 API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります。


### GetStatsReport

**x-sora-target**: Sora_20171010.GetStatsReport

Sora が起動している間の Sora 全体の統計情報を取得することができます。この統計情報は Sora を止めたり再起動したりすることでクリアされますので注意してください。

#### レスポンス項目

- version- sora のバージョン
- total_connection_created- 現在までの接続が作成された数
- total_connection_updated- 現在までの接続が更新された数
- total_connection_destroyed- 現在までの接続が破棄された数
- total_session_created- 現在までのセッションが作成された数
- total_session_destroyed- 現在までのセッションが破棄された数
- total_successful_connections- 現在までの接続が成功した数
- total_ongoing_connections- 現在接続している数
- total_failed_connections- 現在までの接続が失敗した数
- total_duration_sec- 現在までの合計接続時間 (秒)
- total_turn_udp_connections- 現在までの TURN-UDP での接続数
- total_turn_tcp_connections- 現在までの TURN-TCP または TURN-TLS での接続数
- total_received_invalid_turn_tcp_packet- 現在までの TURN-TCP でパースできないパケットが送られてきた数
- total_auth_webhook_allowed- 認証ウェブフックで許可された数
- total_auth_webhook_denied- 認証ウェブフックで拒否された数
- total_successful_auth_webhook- 認証ウェブフックが成功した数
- total_failed_auth_webhook- 認証ウェブフックが失敗した数
- total_successful_session_webhook- セッションウェブフックが成功した数
- total_failed_session_webhook- セッションウェブフックが失敗した数
- total_successful_event_webhook- イベントウェブフックが成功した数
- total_failed_event_webhook- イベントウェブフックが失敗した数
- average_duration_sec- 平均接続時間 (秒)
- average_setup_time_msec- 平均セットアップ時間 (ミリ秒)
  - セットアップ時間とはシグナリング接続開始から WebRTC が確立するまでにかかった時間です
- cluster- 現時点ではクラスター機能で採用している [Raft Consensus Algorithm](https://raft.github.io/) の情報です
  - raft_commit_index- Raft ノードが最後にコミットしたログのインデックス番号
  - raft_state- Raft ノードの現在の状態
  - raft_term- Raft ノードの現在の term

ウェブフックの成功は 2xx 系が戻ってきておりかつ、JSON がある場合は JSON のパースに失敗しない場合です。
それ以外は失敗としています。

```console
$ http POST 127.0.0.1:3000/ \
    x-sora-target:Sora_20171010.GetStatsReport \
    -vvv

POST / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: 127.0.0.1:3000
User-Agent: HTTPie/0.9.9
x-sora-target: Sora_20171010.GetStatsReport



HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 172
content-type: application/json
date: Tue, 10 Oct 2017 10:23:22 GMT
server: Cowboy

{
    "average_duration_sec": 1450,
    "average_setup_time_msec": 879,
    "cluster": {
        "raft_commit_index": 28,
        "raft_state": "follower",
        "raft_term": 1
    },
    "total_auth_webhook_allowed": 3,
    "total_auth_webhook_denied": 0,
    "total_connection_created": 3,
    "total_connection_destroyed": 2,
    "total_connection_updated": 48,
    "total_duration_sec": 2901,
    "total_failed_auth_webhook": 0,
    "total_failed_connections": 0,
    "total_failed_event_webhook": 0,
    "total_failed_session_webhook": 0,
    "total_ongoing_connections": 1,
    "total_received_invalid_turn_tcp_packet": 38,
    "total_session_created": 3,
    "total_session_destroyed": 2,
    "total_successful_auth_webhook": 3,
    "total_successful_connections": 3,
    "total_successful_event_webhook": 60,
    "total_successful_session_webhook": 5,
    "total_turn_tcp_connections": 0,
    "total_turn_udp_connections": 3,
}
```

## ユーザーエージェント統計情報 API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります。

### 統計情報更新のタイミングについて

この統計情報は、クライアントからシグナリングで送信されてくる統計情報の最新の値を返します。
WebSocket 経由の場合は 5 秒間隔で更新され、DataChannel 経由の場合は 30 秒間隔で更新されます。


### ListUserAgentStats

**x-sora-target**: Sora_20211215.ListUserAgentStats

すべてのユーザーエージェント統計情報の一覧を取得します。

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20211215.ListUserAgentStats -vvv
POST / HTTP/1.1
Accept: */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 0
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.4.0
x-sora-target: Sora_20211215.ListUserAgentStats



HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 30262
content-type: application/json
date: Sat, 13 Nov 2021 13:05:51 GMT
server: Cowboy

[
    {
        "channel_id": "sora",
        "connection_id": "FNRGZ8VFSN3R98DK7NBA38MFNR",
        "timestamp": "2021-11-13T13:05:33.264Z",
        "user_agent_stats": [
            {
                "audioLevel": 0,
                "id": "RTCAudioSource_1",
                "kind": "audio",
                "timestamp": 1636808733258.573,
                "totalAudioEnergy": 0,
                "totalSamplesDuration": 90.08000000000918,
                "trackIdentifier": "222a181f-d0fe-4434-b7a1-a8e05e3abbb4",
                "type": "media-source"
            }, ...
        ]
    },
    {
        "channel_id": "zakuro",
        "connection_id": "X019KW3ZT95WZ6T15S6HHTM59C",
        "timestamp": "2021-11-13T13:05:44.044Z",
        "user_agent_stats": [
            {
                "audioLevel": 0,
                "id": "RTCAudioSource_1",
                "kind": "audio",
                "timestamp": 1636808744029.488,
                "totalAudioEnergy": 0,
                "totalSamplesDuration": 31.070000000002057,
                "trackIdentifier": "9a84b996-d3ab-4cea-8131-04f96232dde5",
                "type": "media-source"
            }, ...
        ]
    }
]
```


### ListChannelUserAgentStats

**x-sora-target**: Sora_20211215.ListChannelUserAgentStats

指定したチャネルのユーザーエージェント統計情報の一覧を取得します。

* - キー
  - 型
* - channel_id
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20211215.ListChannelUserAgentStats \
    channel_id=sora \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 22
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.4.0
x-sora-target: Sora_20211215.ListChannelUserAgentStats

{
    "channel_id": "sora"
}


HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 30368
content-type: application/json
date: Sat, 13 Nov 2021 13:10:35 GMT
server: Cowboy

[
    {
        "channel_id": "sora",
        "connection_id": "1BW6V4P6A14MZ0W2HHXV3M8MCW",
        "timestamp": "2021-11-13T13:10:25.736Z",
        "user_agent_stats": [
            {
                "audioLevel": 0,
                "id": "RTCAudioSource_1",
                "kind": "audio",
                "timestamp": 1636809025720.942,
                "totalAudioEnergy": 0,
                "totalSamplesDuration": 90.08000000000918,
                "trackIdentifier": "58c7f808-5b7f-4283-8816-0ac1f7d75387",
                "type": "media-source"
            }, ...
        ]
    },
    {
        "channel_id": "sora",
        "connection_id": "VDH8HN6X6S4MZF2FCQJF3Z4M8G",
        "timestamp": "2021-11-13T13:10:30.643Z",
        "user_agent_stats": [
            {
                "audioLevel": 0,
                "id": "RTCAudioSource_1",
                "kind": "audio",
                "timestamp": 1636809030622.809,
                "totalAudioEnergy": 0,
                "totalSamplesDuration": 91.08000000000968,
                "trackIdentifier": "e6d3182d-706c-445f-9a91-c5951d55e000",
                "type": "media-source"
            }, ...
        ]
    }
]
```


### GetUserAgentStats

**x-sora-target**: Sora_20211215.GetUserAgentStats

指定した接続のユーザーエージェント統計情報を取得します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20211215.GetUserAgentStats \
    channel_id=sora \
    connection_id=VDH8HN6X6S4MZF2FCQJF3Z4M8G \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 69
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.4.0
x-sora-target: Sora_20211215.GetUserAgentStats

{
    "channel_id": "sora",
    "connection_id": "VDH8HN6X6S4MZF2FCQJF3Z4M8G"
}


HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 15181
content-type: application/json
date: Sat, 13 Nov 2021 13:11:46 GMT
server: Cowboy

{
    "channel_id": "sora",
    "connection_id": "VDH8HN6X6S4MZF2FCQJF3Z4M8G",
    "stats": [
        {
            "audioLevel": 0,
            "id": "RTCAudioSource_1",
            "kind": "audio",
            "timestamp": 1636809090624.392,
            "totalAudioEnergy": 0,
            "totalSamplesDuration": 151.08000000000757,
            "trackIdentifier": "e6d3182d-706c-445f-9a91-c5951d55e000",
            "type": "media-source"
        }, ...
    ],
    "timestamp": "2021-11-13T13:11:30.647Z"
}
```


## 音声ストリーミング API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります。


### StartAudioStreaming

**x-sora-target**: Sora_20221221.StartAudioStreaming

セッションが存在し、音声ストリーミングが開始していないチャネルに対して音声ストリーミングを開始します。

* - キー
  - 型
* - channel_id
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20221221.StartAudioStreaming \
    channel_id=sora \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 22
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.6.0
x-sora-target: Sora_20221221.StartAudioStreaming
{
    "channel_id": "sora"
}


HTTP/1.1 200 OK
content-length: 43
content-type: application/json
date: Thu, 15 Dec 2022 06:21:40 GMT
server: Cowboy
{
    "session_id": "MPXNY180M175Z69YY9FZFJ0QWR"
}
```


### StopAudioStreaming

**x-sora-target**: Sora_20221221.StopAudioStreaming

セッションが存在し、音声ストリーミングが開始しているチャネルに対して音声ストリーミングを停止します。

* - キー
  - 型
* - channel_id
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20221221.StopAudioStreaming \
    channel_id=sora \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 22
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.6.0
x-sora-target: Sora_20221221.StopAudioStreaming

{
    "channel_id": "sora"
}


HTTP/1.1 200 OK
content-length: 43
content-type: application/json
date: Thu, 15 Dec 2022 06:21:58 GMT
server: Cowboy

{
    "session_id": "MPXNY180M175Z69YY9FZFJ0QWR"
}
```


### SubscribeAudioStreamingResultPush

**x-sora-target**: Sora_20221221.SubscribeAudioStreamingResultPush

音声ストリーミングサーバーからの戻り値のプッシュ通知を指定した接続が購読するよう設定します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20221221.SubscribeAudioStreamingResultPush \
    channel_id=sora \
    connection_id=AT10T0WHH94PHEM3M5F45QFGRW \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 69
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.6.0
x-sora-target: Sora_20221221.SubscribeAudioStreamingResultPush

{
    "channel_id": "sora",
    "connection_id": "AT10T0WHH94PHEM3M5F45QFGRW"
}


HTTP/1.1 200 OK
content-length: 66
content-type: application/json
date: Thu, 15 Dec 2022 06:26:32 GMT
server: Cowboy

{
    "channel_id": "sora",
    "connection_id": "AT10T0WHH94PHEM3M5F45QFGRW"
}
```


### UnsubscribeAudioStreamingResultPush

**x-sora-target**: Sora_20221221.UnsubscribeAudioStreamingResultPush

音声ストリーミングサーバーからの戻り値のプッシュ通知を指定した接続が購読しないよう設定します。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20221221.UnsubscribeAudioStreamingResultPush \
    channel_id=sora \
    connection_id=4D83B8APHS4JX03C8SZ3176SBM \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 69
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/2.6.0
x-sora-target: Sora_20221221.UnsubscribeAudioStreamingResultPush

{
    "channel_id": "sora",
    "connection_id": "4D83B8APHS4JX03C8SZ3176SBM"
}


HTTP/1.1 200 OK
content-length: 66
content-type: application/json
date: Thu, 15 Dec 2022 06:28:22 GMT
server: Cowboy

{
    "channel_id": "sora",
    "connection_id": "4D83B8APHS4JX03C8SZ3176SBM"
}
```

## その他の API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります。


### ChangeUpstreamVideoBitRate

**x-sora-target**: Sora_20190327.ChangeUpstreamVideoBitRate

指定した接続のビットレートを動的に変更します。

この API は片方向とマルチストリームでのみ利用できます。

主に `role` が `sendonly` の **配信ビットレート** を動的に変更し固定することを目的としている API です。

* - キー
  - 型
* - channel_id
  - string
* - connection_id
  - string
* - bit_rate
  - integer (1 - 30000)

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20190327.ChangeUpstreamVideoBitRate \
    channel_id=sora \
    connection_id=HMRVPQEXJX03D3B3WE778SJGRC \
    bit_rate:=300 \
    -vvv
POST / HTTP/1.1
Accept: application/json, */*
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 96
Content-Type: application/json
Host: 127.0.0.1:3000
User-Agent: HTTPie/1.0.2
x-sora-target: Sora_20190327.ChangeUpstreamVideoBitRate

{
    "bit_rate": 300,
    "channel_id": "sora",
    "connection_id": "HMRVPQEXJX03D3B3WE778SJGRC"
}

HTTP/1.1 200 OK
access-control-allow-headers: Origin, X-Requested-With, Content-Type, Accept, x-sora-target
access-control-allow-methods: POST, OPTIONS
access-control-allow-origin: http://127.0.0.1:5000
access-control-max-age: 1000
content-length: 91
content-type: application/json
date: Wed, 27 Mar 2020 08:38:03 GMT
server: Cowboy

{
    "bit_rate": 300,
    "channel_id": "sora",
    "connection_id": "HMRVPQEXJX03D3B3WE778SJGRC"
}
```

## 検証 API

> **注意**
>
> この API は実験的機能のため、正式版では仕様が変更される可能性があります。


### GenerateCrashLog

**この API は検証目的のためだけに利用してください**

**x-sora-target**: Sora_20221221.GenerateCrashLog

```console
$ http POST 127.0.0.1:3000/ x-sora-target:Sora_20221221.GenerateCrashLog \
    info:='{"spam": "egg"}' \
    -vvv
```
