メディア生成
POST /api/media/generate — 画像、動画、TTS、音楽、3D の非同期生成。パラメーターは model、prompt、opts です。GET /api/media/jobs/{id} でポーリングします。
非同期メディア生成: 画像、動画、ボイスオーバー(TTS)、音声テキスト変換、音楽、3D。タスクを作成して結果をポーリングします。モデルの完全なリストは media-models catalog にあり、webhook、エラー、課金については webhook section を参照してください。
パラメーターを作成
| パラメーター | タイプ | 説明 |
|---|---|---|
modelreq. | string | メディアモデル名(例:veo-3.1 または gpt-image-2)です(カタログを参照)。 |
promptreq. | string | テキストによる説明。 |
opts | object | 追加の生成オプション(モデルによって異なります): resolution、duration など。 |
作成とポーリング
作成すると { ok: true, jobId, status: "processing" } を含む 202 が返されます。status: "success" になるまで GET /api/media/jobs/{jobId} をポーリングし、その後 resultUrls を取得します。
# 1. create a generation job
curl https://getvibeapi.com/api/media/generate \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "veo-3.1",
"prompt": "a cat on a skateboard, slow motion"
}'
# → {"ok":true,"jobId":"...","status":"processing"}ok: falseが付属し、課金はありません。サイト上の価格は目安です。正確な請求額は、受理された各レスポンスのx-pv-cost-rubヘッダーで返されます。ストリームのボディはデフォルトでは変更されません。そのコストをそのプロトコルの最終的なusageイベントに追加するにはx-pv-cost: 1を送信してください。詳細パラメータ(opts)
modelとpromptに加えて、optsで追加のオプションを渡すことができます。そのセットはモデルによって異なります。完全な機械可読なコントラクトはGET /api/model-capabilities(特定のモデルの場合はGET /api/model-capabilities/{model})で確認できます。
| パラメーター | タイプ | 説明 |
|---|---|---|
aspect_ratio | string | Aspect ratio: 1:1, 16:9, 9:16, 4:3, 3:4. |
duration | string|number | 動画の長さ(秒)(5、10、15)。 |
resolution | string | Resolution: 480p, 720p, 1080p, 4K. |
image_url | string (URL) | I2V / 画像to画像用のソース画像。 |
negative_prompt | string | 生成から除外するもの (qwen-image、wan-2-7)。 |
guidance | number | Guidance scale — プロンプトへの追従度(flux-2、qwen-image、seedance)。 |
seed | number | 再現可能な結果を得るためのシード値(flux-2)。 |
stability | number | 安定性 0〜1(hailuo、happyhorse、seedance、TTS)。 |
camera | string | カメラモーション(例:「pan left」)(kling-3.0、hailuo)。 |
first_frame_url | string (URL) | First frame for I2V (kling-3.0, wan-2-7). |
last_frame_url | string (URL) | I2V 用の最終フレーム (seedance、kling-3.0、wan-2-7)。 |
reference_image | string (URL) | スタイル/キャラクター参照(happyhorse)。 |
similarity_boost | number | ボイス類似度 0〜1 (ElevenLabs TTS)。 |
speed | number | 読み上げ速度 0.5〜2(ElevenLabs TTS)。 |
GET /api/model-capabilities/{model} レスポンスにあります。自分のファイル: リンクの代わりに base64
URLオプション(image_url、input_urls、mask_urlなど)はプロバイダーが取得するリンクであるため、公開されたhttps://アドレスのみを受け付けます。これらのフィールドのいずれかにインラインのdata:image/...;base64,…文字列を指定すると、400で拒否されます。
自分のファイルを送信するには、代わりに対応する*_base64フィールドを使用してください。サービスがバイトを保存し、公開して、結果のリンクをプロバイダーに渡します。1リクエストあたりinput_base64で最大16ファイルまでです。
| パラメーター | タイプ | 説明 |
|---|---|---|
image_base64 | string | ソース画像。image_url を置き換えます。 |
mask_base64 | string | インペイントマスク(image/* のみ)。mask_url を置き換えます。 |
input_base64 | string[] | image-to-image およびマルチ入力用の参照。input_urls を置き換えます。 |
audio_base64 | string | ソース音声。audio_url を置き換えます。 |
video_base64 | string | ソース動画です。video_url を置き換えます。 |
data:image/png;base64,… 文字列です — ファイルタイプはそこから読み取られます。リクエストの形式: strict、quote_id、max_price_rub
POST /api/media/generate と POST /api/media/price は同じボディを受け付けるため、見積もりを取得してからそのまま送信できます。他のトップレベルフィールドはありません。未知のフィールドは、strict の有無にかかわらず、両方のエンドポイントで 400 と、そのフィールド名を示すコード unknown_field (field, fields) とともに拒否されます。生成パラメーターは opts 内に記述します。
| パラメーター | タイプ | 説明 |
|---|---|---|
modelreq. | string | パブリックなモデル ID、またはそのルートのいずれか(base:alias)。 |
prompt | string | テキスト。モデルの操作で必要な場合にのみ必須です。 |
opts | object | モデルのオプション。正確なスキーマ: GET /v1/model-capabilities/{model} の operations[].requestJsonSchema。 |
strict | boolean | Strict mode(またはヘッダー x-getvibe-strict: 1)では、記述どおりに正確に実行されないリクエスト(パラメータが削除される、値が上限に調整される、モデルの契約外のキーが含まれるなど)は、見積もりや課金が行われる前に、422 strict_validation_failed と violations リストを伴って拒否されます。モデルが受け付けて無視する仕様のフィールド(source-length モデルでの duration など)は違反ではなく、param_ignored 警告として返されます。 |
quote_id | string | POST /api/media/price で得られる mq_…。ジョブはその価格でのみ実行されます。古い、使用済み、または再ルーティングされた見積もりは、何かが実行される前に 409/422 で拒否されます。 |
max_price_rub | number | この1件のジョブに対するアカウント通貨での上限です。見積もりがこれを上回る場合:422 media_max_price_exceeded となり、何も実行されません。従量課金のジョブがこの上限を超えて課金されることはありません。 |
webhook_url | string | 署名付き完了通知を受け取るパブリックな https URL。 |
id によるファイル(Files API)
任意のソースファイルは 3 つの方法で送信できます。リンクとして(image_url、audio_url、video_url…)、インラインバイトとして(image_base64、audio_base64、video_base64…)、または POST /v1/files で作成した自分のファイルの id として。id フィールドは各操作の requestJsonSchema に記載されており、strict モードでも受け付けられます。
| パラメーター | タイプ | 説明 |
|---|---|---|
image_file_id | string | image_url の代わりに使用します。 |
audio_file_id | string | audio_url の代わりに使用します。 |
video_file_id | string | video_url の代わりに使用します。 |
mask_file_id | string | mask_url の代わりに使用します。 |
first_frame_file_id / last_frame_file_id | string | Instead of first_frame_url / last_frame_url. |
input_file_ids | string[] | input_urls に追加されます。 |
reference_*_file_ids | string[] | Appended to reference_image_urls / reference_audio_urls / reference_video_urls. |
入力ファイルの長さに応じて課金される動画
出力長がアップロードされたトラックに従うモデル(kling-ai-avatar、omnihuman-v2、omnihuman-2-0、omnihuman-v1.5、omnihuman-1-5、volcengine-lipsync(audio)、kling-motion-control、wan-animate、topaz-video-upscale、p-video-edit(video)、lipsync-2-pro、sync-3、react-1(両方の入力))では、/api/media/price と /api/media/generate の max_price_rub による事前チェックで、サーバー側でそのファイル(link、data: URI、base64、または *_file_id)の長さを測定し、測定した秒数に基づいて料金を計算します。レスポンスには sourceSeconds(リップシンクの場合は outputSeconds)が含まれ、estimateReason には長さが測定されたことが示されます。ファイルを読み取れない場合、料金の基準は従来どおり(1秒、カタログの推定値、またはルートの最大値)のままとなり、estimateReason にその旨が示されます。請求額は、1秒あたりの料金 × 実際にレンダリングされた秒数で計算され、max_price_rub を超えることはありません。これらのモデルでは opts.duration は受け付けられますが無視され、param_ignored 警告が返されます。
ボイスクローニング
Create: { name, consent: true, engine, audio_url | audio_base64 } or several recordings samples: [{ audio_url } | { audio_base64 }, …] (engine: "elevenlabs" only). An ElevenLabs voice is used by voice-clone-tts and by the Voice Changer (elevenlabs-voice-changer). Appending recordings to an ElevenLabs voice is free. Every recording is downloaded and measured before the supplier is called: a refusal changes and charges nothing.
| パラメーター | タイプ | 説明 |
|---|---|---|
one recording | ≤ 10 MB | wav/mp3, up to 60 s. Larger: 422 voice_sample_too_large / voice_sample_invalid. |
recordings per voice | ≤ 25 | すでに追加済みのものをカウントします。詳細: 422 voice_samples_limit。 |
voice length | ≤ 300 s | すべての録音をまとめたもの。すでに追加されたものも含めてカウントされます。長すぎる場合: 422 voice_samples_limit。エンジンの最小値より短い場合: 422 voice_samples_invalid。 |
recordings size | ≤ 50 MB | 1 つのリクエストのすべての録音をまとめたもの。詳細: 422 voice_samples_too_large。 |
request body | ≤ 70 953 644 B | 録音データは base64(×4/3)で 50 MB、これに JSON が加わります。それより大きい場合は 413 payload_too_large(JSON、max_body_bytes 付き)となります。長いセットは …/samples で分割して送信するか、audio_url リンクとして送信してください。 |
additions per 24 h | 20 | クライアントごと。詳細: 429 voice_samples_rate_limited。 |
ボイスチェンジャーと強制アラインメント
| パラメーター | タイプ | 説明 |
|---|---|---|
elevenlabs-voice-changer | model | opts.voice_id (your ElevenLabs voice) + the source recording opts.audio_url | audio_base64 | audio_file_id, up to 5 minutes. Priced on the measured length: 1 minute = 1000 characters. |
forced-alignment | model | prompt is the transcript, opts.audio_url | audio_base64 | audio_file_id the recording. Result: word timings in resultMeta.words and an SRT file in resultUrls. Priced per 1000 characters of text. |
サンドボックス: 送信結果が不明
サプライヤーの開始確認が届かない場合、ジョブは status: "submitting"、stage: "submission_unknown"、errorCode: "media_submission_uncertain"、failure.advice: "reconcile_first" のままになります。同じ jobId をポーリングし続け、重複したジョブを作成しないでください。このパスを無料でテストするには、sandbox キーとヘッダー x-pv-sandbox-outcome: submission_uncertain を付けて POST /api/media/generate を送信します。応答は jobId を含む通常の 202 です。それをポーリングすると、60 秒間は unknown submit として応答し、その後は開始されなかったジョブ(failure.code: "submission_not_started"、charged: false)として応答します。何も保存されず、サプライヤーへ送信されることも、課金されることもありません。このヘッダーを通常のキーで使用すると 400 sandbox_outcome_requires_sandbox_key になります。
音声文字起こし(transcription)
その他の生成と同じエンドポイントを使用します。model に STT モデル名を指定し、prompt は空文字列のままにして、opts.audio_url に録音を渡します。文字起こし結果は GET /api/media/jobs/{id} の resultText に格納され、resultUrls は空のままです。文字起こしではファイルは生成されません。
# speech-to-text: create the job, then read the transcript
curl https://getvibeapi.com/api/media/generate \
-H "Authorization: Bearer $GETVIBE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "whisper-large-v3-turbo",
"prompt": "",
"opts": {
"audio_url": "https://example.com/meeting.mp3",
"language_code": "en"
}
}'
# → {"ok":true,"jobId":"JOB_ID","status":"processing","priceRub":0.03}
curl https://getvibeapi.com/api/media/jobs/JOB_ID \
-H "Authorization: Bearer $GETVIBE_API_KEY"
# → {"status":"success","resultText":"the transcribed text…","resultUrls":[],"priceRub":0.03}モデル
whisper-large-v3-turbo— 音声1分あたり $0.00025。最も安く最速で、99 言語に対応しています。nemotron-asr-multilingual— 1分あたり $0.00025。NVIDIA の多言語 ASR で、独自に句読点を付けます。whisper-large-v3— 1分あたり $0.000563。完全な Whisper で、turbo より遅いものの、ノイズの多い音声ではより正確です。universal-2— 1分あたり $0.003125。speech-to-text— 1分あたり $0.01(ElevenLabs Scribe)。話者ダイアリゼーションと音声イベントタグに対応しています。
パラメーター
| パラメーター | タイプ | 説明 |
|---|---|---|
audio_urlreq. | string (URL) | ファイルを直接配信するパブリックな https リンク。リダイレクトとプライベートネットワークアドレスは拒否されます。ファイルがオンラインでない場合は、代わりに audio_base64 を使用してください。 |
audio_base64 | string | 録音を data:audio/mpeg;base64,… としてインラインで指定します。audio_url を置き換えます。 |
language_code | string | 言語コード(en、ru など)。省略時は自動的に検出されます。 |
duration_minutes | number | 録音の長さ (分単位)。事前の料金見積もりに使用されます。最終的な請求額は実測値に基づきます (以下を参照)。 |
diarize | boolean | 話者ダイアリゼーション(universal-2、音声テキスト変換)。 |
tag_audio_events | boolean | 笑い声や拍手などの音声イベントをタグ付けします(音声テキスト化)。 |
keyterms | string[] | 用語と名前のヒントリスト(音声認識、価格 +30%)。 |
フォーマットと制限
mp3、wav、m4a/mp4、flac、ogg/opus、webm を受け付けます。ファイルサイズは 最大 25 MB です — 128 kbps の mp3 でおよそ 26 分、opus の音声であれば数時間に相当します。それより大きいものは明示的なメッセージとともに即座に拒否され、課金されません。その場合は録音を分割してください。
whisper-large-v3-turbo、whisper-large-v3、nemotron-asr-multilingualの場合、最終的な金額はduration_minutesで渡した値ではなく、トランスクリプトから取得した測定された録音の長さから計算されます。最低請求額は1コペイカです。正確な金額は常に完了したジョブのpriceRubとして返されます。レディネス webhook(ポーリングの代わり)
ポーリングを避けるには、ダッシュボードで1つのアドレスmediaWebhookUrlを登録してください。タスクが完了すると(成功またはエラー)、サービスはJSONボディを含むPOSTの配信を最大5回試行します。
// POST to your mediaWebhookUrl when a job finishes
{
"jobId": "...",
"status": "success", // or "fail"
"model": "veo-3.1",
"kind": "video", // image | video | audio | music | 3d
"resultUrls": ["https://getvibeapi.com/api/media/file/..."],
"failMsg": null,
"createdAt": "2026-06-17T10:00:00.000Z"
}ファイルを取得中: /api/media/file/{id}/{idx}
resultUrls からの生成結果 URL(画像、動画、音声、3D モデル)です。サービスが返したとおりに使用してください。API キーなしで開くことができ、<img>、<video>、ブラウザーで動作します。プロバイダーは隠されています。上流のアドレスはサーバー側で解決され、クライアントには決して見えません。
| パラメーター | タイプ | 説明 |
|---|---|---|
idreq. | string (path) | /api/media/jobs/{id} レスポンスのタスク id(jobId)。 |
idxreq. | integer(パス) | 結果のインデックス(0 始まり)。結果が 1 件の場合は 0 です。 |
query params | resultUrls と同様 | URL を自分で構築したり、サービスが返すパラメーターを変更したりしないでください。 |
download | string (query) | download=1 を指定すると、内容に応じた名前と拡張子(3D モデルの場合は .glb)の添付ファイルとしてダウンロードされます。指定しない場合はファイルがブラウザで開きます。 |
# The signed URL is returned in resultUrls of the /api/media/jobs/{id} response
# or in the webhook body. Opens directly in the browser / <img> — no key needed.
https://getvibeapi.com/api/media/file/JOB_ID/0?sig=HMAC_SIGNATURE/api/media/jobs/{id}のresultsExpireAtフィールド)、結果は7日間保持されます。完了したファイルは当社のストレージにコピーされ、resultUrlsはhttps://getvibeapi.com/media/r/…形式の永続アドレスに切り替わります。以前に返された/api/media/file/… URLも引き続き機能します。どちらもRangeリクエスト(動画や音声のシーク)に対応しています。7日後にファイルは削除され、URLはコードmedia_result_expiredで410 Goneを返します。その前に必要なファイルをダウンロードしてください。