ストリームステータスAPI
ストリームステータスエンドポイントで、ストリームを今すぐ表示すべきかをDailyPlayに問い合わせできます — サイトにiframe、フローティングPlayボタン、またはカスタムオーバーレイを載せる前に使います。
これは公開GET(APIキー不要)です。次のようなサイト/アプリ運営者向けです:
- ストリームがアクティブなときだけオーバーレイを表示する
- キャンペーン開始前・終了後はPlayボタンを隠す
- 公開済みゲームがないときにフルプレイヤーを読み込まない
エンドポイント
Section titled “エンドポイント”GET https://app.dailyplay.ai/api/stream-status?org_slug=<org-slug>&stream_slug=<stream-slug>| パラメータ | 必須 | 説明 |
|---|---|---|
org_slug |
はい | 組織スラッグ(ストリーム共有URLから) |
stream_slug |
はい | ストリームスラッグ(ストリーム共有URLから) |
認証: なし
CORS: Access-Control-Allow-Origin: *(ブラウザから呼び出し可能)
キャッシュ: public, s-maxage=30, stale-while-revalidate=60 — 約30秒ごとにポール可能
https://app.dailyplay.ai/api/stream-status?org_slug=your-org&stream_slug=summer-campaignHTTP 200 かつ success: true はリクエスト処理成功を意味します。ストリームUIを出すかは
data.available で判断してください。
{ "success": true, "data": { "available": true, "reason": null, "total_games": 4, "starts_at": null, "ends_at": null, "timezone": "UTC", "server_time": "2026-10-15T07:23:43.597Z", "stream": { "slug": "summer-campaign", "status": "active" }, "organization": { "slug": "your-org" } }}{ "success": true, "data": { "available": false, "reason": "stream_inactive", "total_games": 0, "starts_at": null, "ends_at": null, "timezone": "UTC", "server_time": "2026-10-15T07:23:43.597Z", "stream": { "slug": "summer-campaign", "status": "draft" }, "organization": { "slug": "your-org" } }}レスポンスフィールド
Section titled “レスポンスフィールド”| フィールド | 型 | 説明 |
|---|---|---|
available |
boolean | 訪問者がストリームをプレイできるとき true |
reason |
string | null | 利用不可の理由(利用可能なときは null) |
total_games |
number | ストリーム上の公開済みゲーム数(非公開時は 0) |
starts_at / ends_at |
string | null | スケジュール境界(ストリームタイムゾーンからISO UTC) |
timezone |
string | スケジュール判定に使うストリームタイムゾーン |
server_time |
string | 判定時点のサーバー時刻(ISO UTC) |
stream.slug / status |
string | ストリーム識別子とステータス |
organization.slug |
string | 組織スラッグ |
利用不可の理由
Section titled “利用不可の理由”reason |
意味 |
|---|---|
not_public |
ストリームが公開されていない(詳細は漏洩しない) |
stream_inactive |
ステータスが active でない(下書き/アーカイブなど) |
stream_not_started |
現在時刻が starts_at より前 |
stream_ended |
現在時刻が ends_at より後 |
no_games |
公開・アクティブだが公開済みゲームがない |
エラーレスポンス
Section titled “エラーレスポンス”| コード | とき |
|---|---|
400 |
org_slug または stream_slug 欠落 |
404 |
組織またはストリームが見つからない |
405 |
GET / OPTIONS 以外 |
500 |
サーバーエラー |
{ "success": false, "error": "Stream not found"}いつ「利用可能」になるか
Section titled “いつ「利用可能」になるか”次のすべてが真である必要があります:
- 指定の組織スラッグ配下にストリームが存在する
- ストリームが公開
- ステータスが**
active** - 開始時刻がある場合、すでに開始している(ストリームタイムゾーン)
- 終了時刻がある場合、まだ終了していない
- 公開済みゲームが1つ以上紐づいている
典型的な連携:オーバーレイをゲートする
Section titled “典型的な連携:オーバーレイをゲートする”フローティングPlayボタンやモーダルを、ストリームがライブになるまでDOMに載せないケースが多いです。
<script> async function shouldShowStreamOverlay(orgSlug, streamSlug) { const url = "https://app.dailyplay.ai/api/stream-status" + `?org_slug=${encodeURIComponent(orgSlug)}` + `&stream_slug=${encodeURIComponent(streamSlug)}`;
const res = await fetch(url); const json = await res.json(); return Boolean(json?.success && json?.data?.available); }
async function maybeMountOverlay() { const available = await shouldShowStreamOverlay( "your-org", "summer-campaign" );
if (!available) { // iframe / フローティングボタンを挿入しない return; }
// オーバーレイまたはiframeをマウント: // https://app.dailyplay.ai/stream/your-org/summer-campaign/widget?origin=... }
maybeMountOverlay(); // 任意: CDNキャッシュに合わせて約30秒ごとに再確認 setInterval(maybeMountOverlay, 30000);</script>利用可能確認後のおすすめURL
Section titled “利用可能確認後のおすすめURL”| 用途 | URL |
|---|---|
| フルストリームページ | https://app.dailyplay.ai/stream/<org-slug>/<stream-slug> |
| ウィジェット / フローティングオーバーレイ | https://app.dailyplay.ai/stream/<org-slug>/<stream-slug>/widget?origin=<encoded-site-origin> |
ホスト済みウィジェットスニペットはフローティングPlayボタンを参照。DailyPlayのウィジェットスクリプトも、プレイ可能なときだけストリームランチャーを表示するようゲートします。
次のステップ
Section titled “次のステップ”- ゲームとストリームの埋め込み
- フローティングPlayボタン
- 制御付きアクセスのセッショントークン
- 全エンドポイント一覧のAPIリファレンス