ボット、オーバーレイ、ストリーム ツールを構築し、D1Arena データと統合します。
認証
すべての API リクエストには、X-API-Key / Authorization: Bearer ヘッダーで渡される API キーが必要です。
API キーを作成するには、ダッシュボードの 開発者設定 に移動します。キーは最大 5 つまで持つことができます。
Retry-After ヘッダー付きの 429 Too Many Requests を返します。
ベースURL
すべてのエンドポイントは JSON を返します。ページ分割されたエンドポイントには、current_page、last_page、total を含む meta オブジェクトが含まれます。
ストリーム
| パラメータ | タイプ | 説明 |
|---|---|---|
category_id | integer | ゲーム/カテゴリIDでフィルタリングする |
limit | integer | ページごとの結果 (デフォルト: 20) |
page | integer | ページ番号 |
カテゴリー
| パラメータ | タイプ | 説明 |
|---|---|---|
search | string | カテゴリを名前でフィルタリングする |
limit | integer | ページごとの結果 (デフォルト: 50) |
ユーザー
クリップ
| パラメータ | タイプ | 説明 |
|---|---|---|
streamer_id | integer | ストリーマーのユーザー ID でクリップをフィルターする |
category_id | integer | ゲーム/カテゴリIDでフィルタリングする |
limit | integer | ページごとの結果 (デフォルト: 20) |
トーナメント
| パラメータ | タイプ | 説明 |
|---|---|---|
status | string | ステータスによるフィルタリング (例open、in_progress、completed) |
league_id | integer | リーグIDでフィルタリングする |
limit | integer | ページごとの結果 (デフォルト: 20) |
ELOランキング
| パラメータ | タイプ | 説明 |
|---|---|---|
category_id | integer | ゲーム/カテゴリIDでフィルタリングする |
limit | integer | 結果の数 (デフォルト: 50) |
リーグ
| パラメータ | タイプ | 説明 |
|---|---|---|
status | string | リーグステータスでフィルタリングする |
category_id | integer | ゲーム/カテゴリIDでフィルタリングする |
limit | integer | ページごとの結果 (デフォルト: 20) |
エラー応答
すべてのエラーは一貫した JSON エンベロープを返します。 error オブジェクトには、常に機械可読の code と人間が可読な message が含まれています。
ステータスコード
エラーコードのリファレンス
| コード | HTTPステータス | 説明 |
|---|---|---|
invalid_api_key | 401 | API キーが見つからないか、形式が間違っているか、存在しません。 |
api_key_disabled | 403 | API キーが取り消されているか無効になっています |
not_found | 404 | 要求されたリソースが見つかりませんでした |
validation_error | 422 | 1 つ以上のリクエスト パラメータが無効です |
rate_limited | 429 | この API キーのリクエスト レート制限を超えました |
server_error | 500 | 内部サーバー エラー - 再試行するか、サポートにお問い合わせください |
レート制限
API リクエストは API キーごとにレート制限されています。制限を超えると、リクエストは Retry-After ヘッダー付きの 429 Too Many Requests を返します。
ティアごとの制限
| 階層 | リクエスト/分 (デフォルト) | 最大キー数 |
|---|---|---|
| スターター (無料) | 60 | 5 |
| プロ | 60 | 5 |
| 究極の | 60 | 5 |
| パートナー | 60 | 5 |
レート制限ヘッダー
API リクエストは API キーごとにレート制限されています。制限を超えると、リクエストは Retry-After ヘッダー付きの 429 Too Many Requests を返します。
| ヘッダー | 説明 |
|---|---|
Retry-After | 再試行するまでに待機する秒数 (429 応答でのみ存在) |
ベストプラクティス
- Cache responses locally — stream and tournament data doesn't change every second.
- エンドポイントをポーリングする代わりに、リアルタイム イベントを取得するには webhooks をサブスクライブします。
- 可能な場合はリクエストをバッチ処理します。フィルター パラメーターを使用すると、より少ない呼び出しで必要なものを正確に取得できます。
Webhook (EventSub)
ポーリングの代わりにリアルタイムのプッシュ通知を購読します。イベントが発生すると、D1Arena は HMAC-SHA256 で署名された JSON ペイロードを含む HTTP POST をコールバック URL に送信します。
セットアップ
Webhook サブスクリプションを 開発者設定 に作成します。各サブスクリプションには以下が必要です。
- コールバック URL — サーバー上のパブリックにアクセス可能な HTTPS エンドポイント。
- イベント — サブスクライブする 1 つ以上のイベント タイプ。
You'll receive a whsec_ signing secret upon creation. Store it securely — it's shown only once.
ペイロード形式
Webhook 配信ごとに、次の構造の JSON 本文が送信されます。
ヘッダー
各配信には、ルーティングと検証用に次のヘッダーが含まれています。
| ヘッダー | 説明 |
|---|---|
Content-Type | application/json |
X-D1Arena-Event | イベントタイプ (例stream.online) |
X-D1Arena-Signature | 未加工のリクエスト本文の HMAC-SHA256 16 進ダイジェスト |
X-D1Arena-Signature-Version | 署名キーの形式: 現在のサブスクリプションの場合は v2、従来のサブスクリプションの場合は v1-hashed-secret |
X-D1Arena-Delivery-Id | 一意の配信 UUID — 重複排除に使用します |
X-D1Arena-Timestamp | イベントが送信されたときの Unix タイムスタンプ |
署名の検証
Webhook を処理する前に、必ず X-D1Arena-Signature ヘッダーを確認してください。署名は HMAC-SHA256(raw_body, webhook_secret) として計算されます。
v2 配信の場合は、サブスクリプションの作成時に表示された whsec_ シークレットを使用します。アップグレード前の v1-hashed-secret 配信の場合は、まず元のシークレットから SHA256(whsec_secret) を計算し、結果として得られる小文字の 16 進ダイジェストを HMAC キーとして使用します。 v2 に移行する場合は、サブスクリプションを再作成します。
利用可能なイベント
| イベント | 説明 |
|---|---|
| stream.online | ストリーマーがライブ配信を開始しました |
| stream.offline | ストリーマーがオフラインになりました |
| channel.follow | ユーザーがチャンネルをフォローしました |
| channel.subscribe | チャンネルでの新しいサポーター登録 |
| channel.tip | ストリーマーにチップが送信されました |
| tournament.started | トーナメント戦が始まりました |
| tournament.ended | トーナメントが終了しました |
| tournament.match.completed | 試合結果が記録されました |
| clip.created | ライブ ストリームから新しいクリップが作成されました |
| overdrive.started | D1 Frenzy がチャンネルで始まりました |
| overdrive.level_up | D1 Frenzy が次のレベルに進みました |
| overdrive.ended | D1 フレンジーが完了したか期限切れになりました |
イベントペイロードの例
stream.online
stream.offline
channel.follow
channel.tip
tournament.match.completed
clip.created
配信と再試行ポリシー
| 試みる | 遅延 | 注意事項 |
|---|---|---|
| 1位(初期) | 即時 | イベントから数秒以内に送信される |
| 2回目(リトライ) | 30秒 | 最初の試行が失敗するかタイムアウトになった場合 |
| 3回目(リトライ) | 2分 | 指数バックオフ |
| 4位(決勝) | 10分 | 失敗としてマークされる前の最後の試行 |
2xx status within 10秒. Non-2xx responses or timeouts trigger a retry. After 10回連続失敗, the subscription is automatically disabled. You'll receive an email notification and can re-enable it in 開発者設定.
ベストプラクティス
- 常に署名を検証する スプーフィングされたイベントを防ぐためにペイロードを処理する前に。
- 重複排除に Delivery-Id を使用する — 再試行すると同じ ID が送信されるため、二重処理を避けるために処理済みの ID を保存します。
- 迅速に応答し、非同期で処理します — return
200 OKをすぐに返し、バックグラウンド ジョブでビジネス ロジックを処理します。 - HTTPS エンドポイントのみを使用する — Webhook URL は TLS を使用する必要があります。 HTTP コールバックは拒否されます。
- 未知のイベントを適切に処理する — 新しいイベント タイプが追加される可能性があります。エラーではなく、認識されないイベントの場合は
200を返します。
D1 フレンジー
D1 Frenzy は、ストリーマーのライブ中に急速なヒントやサブスクリプションによってトリガーされます。ターゲットが増加しながら 5 つのレベルに進みます。
GET /api/overdrive/{streamerId}
ストリーマーのアクティブな D1 Frenzy を入手してください。存在しない場合は {"active": false} を返します。
レベル目標
| レベル | ポイント |
|---|---|
| 1 | 100 |
| 2 | 250 |
| 3 | 500 |
| 4 | 1,000 |
| 5 | 2,000 |
D1 フレンジー — ポイント: ヒント $1 → 100; 定期購入 500 × 階層. 期間: 5 分; クールダウン: 30 分.
拡張SDK
ストリーマーがチャンネル ページにインストールできるカスタム パネルとオーバーレイ拡張機能を構築します。拡張機能はサンドボックス化された iframe で実行され、postMessage 経由でホスト ページと通信します。
はじめに
- 開発者設定 に API キーを作成します。
- 拡張機能を、ドメイン上でホストされるスタンドアロン HTML ページとして構築します (HTTPS が必要)。
- 私の拡張機能 セクションでレビューのために送信してください。
- 承認されると、ストリーマーは拡張機能マーケットプレイスからインストールできるようになります。
拡張子の種類
| タイプ | 位置 | 行動 |
|---|---|---|
panel | ストリームプレーヤーの下 | ストリームがライブ中に表示されます。全幅カード、デフォルトの高さ 300 ピクセル。 |
overlay | ビデオプレーヤー上で | ライブ中に表示されます。位置/サイズは、オーバーレイ位置決めツールを介してストリーマーによって制御されます。 |
postMessage API
拡張機能は、ロード時にコンテキスト データを自動的に受け取ります。これらのイベントを実装します。
すべてのメッセージに対して正確な D1Arena 親オリジンを使用します。公式 SDK は、このオリジンを埋め込みページから自動的に導出し、検証します。
拡張機能 iframe は意図的に不透明なサンドボックス オリジンを使用するため、D1Arena ホストは登録された iframe ウィンドウを正確に認証します。拡張コードは、コンテキストを受け入れる前に、親ウィンドウと正確な D1Arena 原点を認証する必要があります。
1. 信号の準備状況
2. コンテキストを受信する
3. 送信アクション (オプション)
権限の範囲
拡張機能に必要なデータを宣言します。レビュー担当者は、コードが宣言された権限と一致することを確認します。
| 範囲 | へのアクセスを許可します |
|---|---|
read:stream | ストリームのステータス、タイトル、カテゴリ |
read:viewers | 視聴者数とリスト |
read:chat | チャット メッセージ (プッシャー チャネル経由) |
read:clips | /api/clips/{slug} 経由でクリップをチャンネル化する |
read:tournaments | /api/active-match/{id} を介したアクティブな試合情報 |
read:channel | チャンネルプロフィール、フォロワー、スケジュール |
セキュリティ要件
sandbox="allow-scripts" を使用して サンドボックス化された iframe で実行されます。拡張機能 できない は、Cookie、localStorage にアクセスするか、d1arena.com に対して認証されたリクエストを行います。
- パブリック HTTPS が必要です — iframe URL は TLS を使用し、パブリック ネットワーク アドレスのみに解決する必要があります。
- 人間が読めるソース — 難読化または縮小された専用の JavaScript はありません。レビュー担当者はコードを読むことができなければなりません。
- 外部スクリプトの読み込みなし 提出物で宣言されていない限り。 CDN ライブラリ (jQuery、Chart.js など) は問題ありません。
- データの抜き取りなし — 拡張機能は、視聴者のデータをサードパーティの分析サービスや追跡サービスに送信してはなりません。
- コンテンツポリシー — 広告、NSFW コンテンツ、仮想通貨マイニング、悪意のある行為はありません。
レビュープロセス
| ステータス | 意味 |
|---|---|
| pending | 送信され、管理者のレビューを待っています (通常は 1 ~ 3 営業日)。 |
| approved | 承認され、拡張機能マーケットプレイスに表示されます。 |
| rejected | 理由をつけて拒否されました。問題を修正して再送信してください。 |
| suspended | ポリシー違反により一時的に削除されました。サポートにお問い合わせください。 |
バージョンの更新
承認された拡張機能を更新するには、現在のバージョンを削除し、バージョン番号を増やした新しいバージョンを送信します。新しいバージョンは再度レビューを受けます。
変更履歴
API の変更と新機能を追跡します。私たちはセマンティック バージョニングに従い、重大な変更を少なくとも 30 日前に発表します。
- API キー認証を使用した最初のパブリック API リリース。
- ストリーム: ライブ ストリームをリストし、スラッグごとにストリーマーの詳細を取得します。
- カテゴリ: すべてのゲーム カテゴリを検索してリストします。
- ユーザー: 競技統計、ELO レーティング、メダル数を含む公開プロフィール。
- クリップ: ストリーマー/クリエイター情報を含むクリップの詳細を参照して取得します。
- トーナメント: リスト、ステータス/リーグでフィルタリングし、参加者数を取得します。
- ELO リーダーボード: グローバルおよびカテゴリごとにランク付けされたリーダーボード。
- リーグ: 順位とポイントの内訳を含むリーグをリストします。
- D1 Frenzy: ストリーマーのリアルタイム Frenzy ステータス。
- Webhook (EventSub): ストリーム、チャンネル、トーナメント、クリップ、Frenzy イベントを含む 12 のイベント タイプ。
- レート制限
助けが必要ですか?
API について質問がありますか? お問い合わせ。