Sora API終了ガイド:アセットの保存と動画ワークフローの移行

Sora APIは2026年9月24日に終了します。アプリケーションがまだSoraのジョブを送信している場合は、残された期間を使って出力を保存し、代替となる動画ワークフローを検証してください。OpenAIのSora Web版とアプリ版はすでに2026年4月26日に終了しており、この日付はAPIの期限とは別です。OpenAIの終了に関するお知らせでは、両方の日付とエクスポート手順を説明しています。
KlingやSeedanceへの切り替えは、モデルを変更するだけでは完了しません。リクエスト本文、参照入力、ジョブの状態、結果URL、対応時間が異なる場合があります。新しいルートで許容できる動画を送信、追跡、取得、保存できて初めて移行は完了します。
ドキュメントは2026年9月14日に確認しました。以下の例は公開スキーマと照合したものであり、有料生成テストの結果ではありません。
Sora API終了前に保存すべきもの
まず、アプリケーションで保存が必要なSoraジョブを一覧化します。プロバイダーのジョブID、社内ジョブID、モデル、プロンプト、参照アセットの場所、指定設定、ステータス、完成した出力を保存してください。これらの記録には、既存のアクセス規則と保持規則を適用します。
APIで生成した動画について、現在のOpenAI APIではジョブのメタデータとダウンロード可能なメディアが区別されています。
| 目的 | OpenAI APIパス |
|---|---|
| 動画を作成 | POST /v1/videos |
| ジョブのメタデータを取得 | GET /v1/videos/{video_id} |
| 完成したコンテンツをダウンロード | GET /v1/videos/{video_id}/content |
作成、取得、ダウンロードのリファレンスに、これらの操作が記載されています。実際のメディアデータは、自社で管理するストレージに保存してください。ジョブIDの一覧だけでは動画のアーカイブになりません。ダウンロードしたファイルを再生でき、Soraを呼び出さなくてもアプリケーションから見つけられることを確認します。
Soraアプリで作成したコンテンツには、OpenAIのお知らせに記載されたエクスポート手順を使用してください。アプリのエクスポートによって、アプリケーションのAPIジョブも保存されるとは限りません。OpenAIは、最終的なエクスポート期間を設ける可能性とメールによる通知について説明していますが、API終了日にすべてのアセットが即座に削除されるとも、その後も無期限に復元できるとも保証していません。必要なものはアクセス可能なうちに保存してください。
実際に制作するクリップで代替モデルを選ぶ
本番で扱う内容を代表する小規模な評価セットから始めます。商品のクローズアップ、動きのあるシーン、参照素材を使うショット、必要であれば会話、そして現在のワークフローが苦手とする難しいプロンプトを含めます。候補間で入力アセットと合格基準を揃えてください。
| 候補 | テストすべき文書化済みの機能 | 移行時に確認すること |
|---|---|---|
| Kling 3.0 | 公式モデルガイドに記載されたネイティブ音声、マルチショット生成、開始・終了フレームのワークフロー | 選択したAPIルートで、必要なモード、時間、音声制御、参照素材の処理を利用できるか? |
| Seedance 2.5 | マルチモーダル参照、動画編集と延長、最大30秒の生成 | そのルートは、必要な解像度、参照素材の役割、タスク固有のパラメーター組み合わせに対応するか? |
これらは機能の概要であり、品質順位ではありません。Kling 3.0モデルガイドとByteDanceのSeedance 2.5発表を参照してください。ベンダーのアプリで使える機能が、すべてのAPIやゲートウェイでも使えるとは限りません。
SeedanceとSeedreamは別のモデルファミリーです。 Seedanceは動画を生成し、Seedream 5.0 Proは画像モデルです。画像生成の料金を、動画1秒あたりの料金として使用することはできません。
Tokenhotモデルカタログで候補ルートを探し、実装前に選択したモデルのAPIページを確認してください。後から結果を正しく比較できるよう、正確なモデル識別子と評価日を記録します。
ベースURLだけでなくリクエスト本文も変更する
OpenAIのSora作成操作では、固有の対応値を持つprompt、seconds、sizeなどのフィールドを使用します。一方、TokenhotのSeedance 2.5操作ではcontent、duration、ratio、resolutionを使用します。Tokenhotのパスは、videoが単数形の**/v1/video/generations**です。
次のtext-to-video送信例は、Tokenhot Seedance 2.5ドキュメントに従っています。requestsをインストールし、環境変数にTOKENHOT_API_KEYを設定したうえで、課金される可能性のあるジョブを作成する意思がある場合にのみ実行してください。
import json
import os
from pathlib import Path
import requests
record_path = Path("seedance-submission.json")
if record_path.exists():
raise RuntimeError("A submission record exists; inspect it before creating another job.")
response = requests.post(
"https://api.tokenhot.ai/v1/video/generations",
headers={"Authorization": f"Bearer {os.environ['TOKENHOT_API_KEY']}"},
json={
"model": "doubao-seedance-2.5",
"content": [{
"type": "text",
"text": "A ceramic cup on a wooden table, slow camera push-in, soft daylight."
}],
"duration": 5,
"ratio": "16:9",
"resolution": "720p",
"generate_audio": False,
"output_format": "mp4"
},
timeout=(10, 60),
)
response.raise_for_status()
job = response.json()
task_id = job["id"]
record_path.write_text(json.dumps(job, indent=2), encoding="utf-8")
print(f"Submitted task: {task_id}")
この例では送信を1回だけ行い、レスポンスを保存します。ネットワークタイムアウトが起きると、送信結果が不明になる場合があります。クライアントがIDを受け取っていなくても、サーバーではジョブを受理している可能性があります。再送信する前に、既存リクエストの状況を調査してください。ローカルファイルによるガードは、この例のための便宜的な仕組みであり、本番用の冪等性機構ではありません。
現在のSeedance 2.5ページでは、480pと720pの出力、4~30秒の時間、または適応値-1が記載されています。動画編集ではduration=-1とratio=adaptiveが必要です。開始フレーム、開始・終了フレーム、延長タスクでも適応比率が必要です。text-to-videoのペイロードをすべてのモードに流用せず、タスク種別ごとの規則を確認してください。対応していない組み合わせは、非同期処理の開始後に失敗する場合があります。Tokenhotのパラメーター要件。
送信スキーマとポーリングスキーマを分ける
送信が受理されても、動画が完成したとは限りません。Seedance 2.5の送信ページには、トップレベルのidと、queued、processing、succeeded、failedなどのステータスが記載されています。
別途公開されているSeedance 2.0のタスク照会ページでは、GET /v1/video/generations/{task_id}とネストされたレスポンス例が示されています。data.statusはSUCCESS、data.result_urlには出力先アドレスが入ります。このページには2.0と明記されているため、2.0用ポーリングパーサーを再利用する前に、選択した2.5ルートの照会仕様を確認してください。
検証したルートごとに、小さなアダプターを作成します。プロバイダーのレスポンスを、待機中、実行中、完了、失敗などアプリケーション独自の状態に変換するものです。トラブルシューティング用に、生のタスクIDとエラー詳細を保持してください。未知の状態は成功として扱わず、調査対象にします。
ワーカーには、上限のあるポーリング間隔、処理全体の期限、認証エラー、スロットリング、一時的なサーバー障害の明示的な処理が必要です。ローカルのポーリング期限を超えた場合も、別のワーカーが確認を再開できるようジョブIDを保持します。元のジョブが想定より時間を要しているという理由だけで、代替ジョブを送信しないでください。
ジョブが成功したら、速やかに結果を取得し、アプリケーションの保持方針に従って保存します。サービスに明示的な記載がない限り、署名付き出力URLは一時的なアクセス手段として扱ってください。プロバイダー側でのジョブ完了と、顧客アセットの安全な保存は別々の節目です。
合格クリップ1本あたりのコストを比較する
同じ解像度、時間、音声設定、入力モード、アクセスルートで料金を比較してください。ベンダーアプリのクレジット、直接API料金、ゲートウェイ料金では課金規則が異なる場合があります。API料金比較では、課金単位とプロバイダールートを分けて扱う方法を説明しています。
有用な評価指標は次のとおりです。
Cost per accepted clip = total billed evaluation cost / accepted clips
たとえば、評価に$12かかり、要件を満たすクリップが8本得られた場合、実測コストは合格クリップ1本あたり$1.50です。これは計算例であり、KlingやSeedanceの料金提示ではありません。課金された不採用の試行も分子に含め、判断に影響する場合はストレージ、編集、人によるレビューも別途計上してください。
映像品質に加えて、完了時間と失敗率も追跡します。ワークフローで利用できない出力が繰り返し生成されるなら、表示価格が低くても効果は限定的です。
9月24日より前に切り替える
- 必要なSora出力を保存し、自社ストレージから再生できることを確認する。
- 代表的なクリップと明確な合格基準を使って代替ルートを選ぶ。
- リクエスト検証、送信記録、照会の解析、失敗ジョブ、出力取得を確認する。
- 新規処理の一部を管理された形で代替ルートへ移し、完成アセット、コスト、失敗を監視する。
- 期限前に残作業を処理できるよう、十分早い段階で新しいSoraジョブの作成を止める。
- 切り替え後も旧ジョブの記録を読める状態にし、Soraの存続に依存しないフォールバックを文書化する。
ゲートウェイも選定している場合は、OpenRouter代替サービスガイドでルート選択と互換性確認を説明しています。実装時は、Tokenhot APIドキュメントの対象動画モデルページから始め、実際の環境でジョブのライフサイクル全体を検証してください。
Sora APIへのアクセスは2026年9月24日に終了します。完成動画とジョブのメタデータを保存し、自社のクリップでKlingとSeedanceを評価して、送信処理とタスク処理の両方を移行しましょう。本ガイドでは、確認済みの終了情報と実装上の選択肢を分け、文書化されたTokenhot Seedanceのリクエスト形式を示します。


