ビデオストック
外部RSSにエピソードが現れる前に動画をアップロードし、変換処理を進められます。RSS取り込み後にGUID、またはタイトル・配信予定日時を使って自動で紐づけます。所有している外部RSS番組が対象です。LISTENホスティング番組には登録できません。
エンドポイント
ベースURL:https://listen.style/api/v1
| 操作 | メソッド・パス | トークン権限 |
|---|---|---|
| 全番組の一覧 | GET /video-stock | read |
| 1件取得 | GET /video-stock/{id} | read |
| 登録 | POST /podcasts/{podcast}/video-stock | create |
| 修正 | PATCH /video-stock/{id} | update |
| 取消 | DELETE /video-stock/{id} | delete |
| 手動紐づけ | POST /video-stock/{id}/match | update |
一覧は確認済みの所有番組が対象です。first(1〜100、既定50)、after、podcast_id、status で指定します。status は uploading・processing・ready・failed・matched・cancelled です。省略時は取消済みを除外します。meta.has_more が真なら meta.next_cursor を次回の after に渡してください。取得途中にも状態は変わるため、一覧全体のスナップショットは保証しません。
登録
アップロードを完了してからリクエストします。
curl -X POST "https://listen.style/api/v1/podcasts/$PODCAST_ID/video-stock" \
-H "Authorization: Bearer $LISTEN_API_TOKEN" \
-H 'Accept: application/json' -H 'Content-Type: application/json' \
--data '{"expected_title":"第101回","expected_guid":"episode-101","expected_published_at":"2026-10-01T12:00:00+09:00","video_path":"RETURNED_PATH","client_key":"episode-101-video"}'
必須は expected_title(255文字以内)と video_path です。任意で expected_guid(255文字)、expected_published_at、video_thumbnail_path、client_key(空でない128文字以内)を指定します。画像はJPEG・PNG・GIF・WebP、最大10 MiBです。
client_key は番組内で一意の再送用識別子です。同じキーでの再送は、最初に登録した項目の現在の状態を返し、異なる入力で上書きしません。取消後も再利用できません。新しい動画には新しいキーを使ってください。
新規登録時は 201、再送時は 200。data は登録したストックです。変換は非同期なので、登録成功だけでは視聴可能になりません。
レスポンスの項目
単一取得・登録の data、一覧の data[] は次の項目を返します。
id、podcast_id、client_key、revision、expected_title、expected_guid、expected_published_at、status、failure_reason、matched_episode_id、youtube_sync_detached、matched_at、created_at、updated_at。
未設定の任意項目・未紐づけのIDや日時は null です。変換失敗時は failure_reason を確認してください。
修正・取消・紐づけ
PATCHは登録時と同じ編集項目(client_key を除く)を受け付けます。省略は保持、GUID・予定日時・サムネイルの null は解除です。取得した revision を expected_revision に指定することを推奨します。
{"expected_title":"修正したタイトル","expected_guid":null,"expected_revision":2}
DELETEは任意で {"expected_revision":2} をJSON本文に指定します。ファイルは非同期で削除されますが、状態確認と重複防止用の記録を保持します。手動紐づけは {"episode_id":"EPISODE_ID","expected_revision":2} を送ります。同じ番組の公開済みで動画のないエピソードに限ります。
応答の data は outcome、現在の item、youtube_action_required を含みます。
| outcome | HTTP | 意味 |
|---|---|---|
| APPLIED | 200 | 適用済み |
| ALREADY_APPLIED | 200 | 取消・同じ相手への紐づけが適用済み、または変更項目なし |
| CONFLICT | 409 | 版が変わった・紐づけ済み等。再取得して判断 |
| BUSY | 409 | 変換・送信中等。待って再試行 |
変換中もタイトル等は変更できますが、動画・サムネイル差し替えは完了後に行ってください。タイトル等の変更だけでは再変換しません。紐づいた後はエピソードの管理画面から変更してください。
YouTube送信中は取消・メディア差し替えを受け付けません。これらのAPIはYouTube上の動画を変更・削除しません。youtube_action_required が真なら別途YouTube側を確認してください。修正でYouTube連携を切り離したストックは、紐づけ時にもYouTube情報を自動更新しません。
制限・関連機能
ウェブでは、番組の「ビデオストック」で未紐づけの動画の「詳細を編集」を開くと、配信予定タイトル・GUID・配信予定日時を修正できます。日時はアカウントのタイムゾーンで表示・入力します。動画の再アップロードは不要で、変換中でもこれらの情報を編集できます。保存時に変換済み動画の紐づけを再確認します。編集中に状態や内容が変わった場合は上書きせず、開き直して確認するよう案内します。YouTube上の情報は変更しません。
登録は利用者ごとに1時間30件、同時変換待ち・処理中は3件までです。登録回数制限は 429(Retry-After 付き)、利用枠・同時処理数・形式・重複GUID等の条件を満たさない場合は 422 です。修正・取消・手動紐づけは既存APIと共通で1分120回までですが、REST共通の1分60リクエスト制限も適用されます。
利用枠、Webhook、RSS再取得もあわせて利用できます。Web画面では番組の「ビデオストック」から「全番組のビデオストック」を開けます。