Design
Sprache

Mediengenerierung

POST /api/media/generate — asynchrone Generierung von Bildern, Videos, TTS, Musik und 3D. Parameter model, prompt, opts. Abfragen mit GET /api/media/jobs/{id}.

Asynchrone Mediengenerierung: Bilder, Video, Voiceover (TTS), Speech-to-Text, Musik und 3D. Sie erstellen eine Aufgabe und fragen das Ergebnis ab. Die vollständige Modellliste finden Sie im Medienmodellkatalog; Webhooks, Fehler und Abrechnung finden Sie im Webhook-Abschnitt.

POSThttps://getvibeapi.com/api/media/generate
GEThttps://getvibeapi.com/api/media/jobs/{id}

Erstellungsparameter

ParameterTypBeschreibung
modelreq.stringEin Medienmodellname, z. B. veo-3.1 oder gpt-image-2 (siehe den Katalog).
promptreq.stringTextbeschreibung.
optsobjectZusätzliche Generierungsoptionen (modellabhängig): Auflösung, Dauer usw.

Erstellen und abfragen

Beim Erstellen wird 202 mit { ok: true, jobId, status: "processing" } zurückgegeben. Fragen Sie GET /api/media/jobs/{jobId} ab, bis status: "success" erreicht ist, und übernehmen Sie dann die 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"}
Die Abrechnung basiert auf dem tatsächlichen Generierungsvolumen (Auflösung, Dauer). Wenn das Modell nicht verfügbar ist oder die Anfrage abgelehnt wird, enthält die Antwort ok: false und es fällt keine Gebühr an. Die Preise auf der Website sind Richtwerte; die genaue Gebühr wird im Header x-pv-cost-rub jeder akzeptierten Antwort zurückgegeben. Stream-Bodies bleiben standardmäßig unverändert; senden Sie x-pv-cost: 1, um die Kosten zum abschließenden Nutzungsereignis dieses Protokolls hinzuzufügen.

Erweiterte Parameter (opts)

Neben model und prompt können Sie zusätzliche Optionen in opts übergeben. Die Menge hängt vom Modell ab. Der vollständige maschinenlesbare Vertrag ist über GET /api/model-capabilities verfügbar (oder über GET /api/model-capabilities/{model} für ein bestimmtes Modell).

Häufig verwendete erweiterte Parameter
ParameterTypBeschreibung
aspect_ratiostringAspect ratio: 1:1, 16:9, 9:16, 4:3, 3:4.
durationstring|numberVideodauer in Sekunden (5, 10, 15).
resolutionstringResolution: 480p, 720p, 1080p, 4K.
image_urlstring (URL)Quellbild für I2V / Bild-zu-Bild.
negative_promptstringWas bei der Generierung ausgeschlossen werden soll (qwen-image, wan-2-7).
guidancenumberGuidance-Skala — Prompt-Treue (flux-2, qwen-image, seedance).
seednumberSeed für ein reproduzierbares Ergebnis (flux-2).
stabilitynumberStabilität 0–1 (hailuo, happyhorse, seedance, TTS).
camerastringKamerabewegung, z. B. "pan left" (kling-3.0, hailuo).
first_frame_urlstring (URL)First frame for I2V (kling-3.0, wan-2-7).
last_frame_urlstring (URL)Letzter Frame für I2V (seedance, kling-3.0, wan-2-7).
reference_imagestring (URL)Stil-/Charakterreferenz (happyhorse).
similarity_boostnumberStimmähnlichkeit 0–1 (ElevenLabs TTS).
speednumberSprechgeschwindigkeit 0.5–2 (ElevenLabs TTS).
Alle Parameter sind optional, sofern nicht anders angegeben. Unbekannte Parameter werden ignoriert. Die vollständige Liste mit Typen, Wertebereichen und Beispielen finden Sie in der GET /api/model-capabilities/{model}-Antwort.

Ihre eigenen Dateien: base64 statt eines Links

URL-Optionen (image_url, input_urls, mask_url und die übrigen) sind Links, die der Anbieter abruft. Daher akzeptieren sie nur öffentliche https://-Adressen. Eine Inline-Zeichenfolge data:image/...;base64,… in einem dieser Felder wird mit 400 abgelehnt.

Um Ihre eigene Datei zu senden, verwenden Sie stattdessen das entsprechende Feld *_base64: Der Dienst speichert die Bytes, veröffentlicht sie und übergibt den resultierenden Link an den Anbieter. Bis zu 16 Dateien pro Anfrage in input_base64.

Inline-Dateien
ParameterTypBeschreibung
image_base64stringQuellbild. Ersetzt image_url.
mask_base64stringInpainting-Maske (nur image/*). Ersetzt mask_url.
input_base64string[]Referenzen für Bild-zu-Bild und mehrere Eingaben. Ersetzt input_urls.
audio_base64stringQuellaudio. Ersetzt audio_url.
video_base64stringQuellvideo. Ersetzt video_url.
Der Wert ist die vollständige data:image/png;base64,…-Zeichenfolge einschließlich des Präfixes — der Dateityp wird daraus ausgelesen.

Anfragevertrag: strict, quote_id, max_price_rub

POST /api/media/generate und POST /api/media/price akzeptieren denselben Body, sodass Sie zunächst ein Angebot erstellen und ihn anschließend unverändert übermitteln können. Es gibt keine weiteren Felder auf oberster Ebene: Ein unbekanntes Feld wird an beiden Endpunkten mit 400 und dem Code unknown_field abgelehnt, der es benennt (field, fields), mit oder ohne strict. Generierungsparameter gehören in opts.

Felder der obersten Ebene
ParameterTypBeschreibung
modelreq.stringÖffentliche Modell-ID oder eine ihrer Routen (base:alias).
promptstringText; nur erforderlich, wenn die Modelloperation ihn benötigt.
optsobjectModelloptionen. Exaktes Schema: operations[].requestJsonSchema in GET /v1/model-capabilities/{model}.
strictbooleanStrikter Modus (oder der Header x-getvibe-strict: 1): Eine Anfrage, die nicht exakt wie angegeben ausgeführt werden würde (ein Parameter wird entfernt, ein Wert begrenzt, ein Schlüssel liegt außerhalb des Modellvertrags), wird mit 422 strict_validation_failed und einer Liste von Verstößen abgelehnt, bevor ein Angebot erstellt oder eine Gebühr berechnet wird. Ein dokumentiertes Feld, das das Modell akzeptiert und ignoriert (duration bei Modellen mit Quellenlänge), stellt keinen Verstoß dar: Es wird als Warnung param_ignored zurückgegeben.
quote_idstringmq_… aus POST /api/media/price. Der Auftrag wird nur zu diesem Preis ausgeführt; ein veraltetes, bereits verwendetes oder umgeleitetes Angebot wird mit 409/422 abgelehnt, bevor irgendetwas ausgeführt wird.
max_price_rubnumberObergrenze für diesen einen Auftrag in der Kontowährung. Wenn der Kostenvoranschlag höher ist: 422 media_max_price_exceeded und es wird nichts ausgeführt. Ein Auftrag mit Messung wird niemals über diesem Betrag abgerechnet.
webhook_urlstringÖffentliche https-URL, die eine signierte Abschlussbenachrichtigung empfängt.

Dateien nach ID (Files API)

Jede Quelldatei kann auf drei Arten gesendet werden: als Link (image_url, audio_url, video_url …), als Inline-Bytes (image_base64, audio_base64, video_base64 …) oder als ID Ihrer eigenen Datei aus POST /v1/files. Die ID-Felder sind im requestJsonSchema jeder Operation aufgeführt und werden im Strict-Modus akzeptiert.

ParameterTypBeschreibung
image_file_idstringAnstelle von image_url.
audio_file_idstringAnstelle von audio_url.
video_file_idstringAnstelle von video_url.
mask_file_idstringAnstelle von mask_url.
first_frame_file_id / last_frame_file_idstringInstead of first_frame_url / last_frame_url.
input_file_idsstring[]An input_urls angehängt.
reference_*_file_idsstring[]Appended to reference_image_urls / reference_audio_urls / reference_video_urls.

Videoabrechnung nach der Länge der Eingabedatei

Bei Modellen, deren Ausgabelänge einer hochgeladenen Audiospur folgt — 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 (beide Eingaben) — messen /api/media/price und die Vorabprüfung von max_price_rub auf /api/media/generate diese Datei serverseitig (link, data: URI, base64 oder *_file_id) und berechnen den Preis anhand der gemessenen Sekunden. Die Antwort enthält sourceSeconds (outputSeconds für Lippensynchronisation), und estimateReason gibt an, dass die Länge gemessen wurde. Kann die Datei nicht gelesen werden, basiert der Preis weiterhin auf der vorherigen Grundlage (eine Sekunde, der Katalogschätzung oder dem Routenmaximum), und estimateReason gibt dies an. Die Abrechnung entspricht dem Sekundensatz × den tatsächlich gerenderten Sekunden, jedoch niemals mehr als max_price_rub. opts.duration wird bei diesen Modellen akzeptiert und ignoriert, wobei eine param_ignored-Warnung ausgegeben wird.

Stimmenklonen

POSThttps://getvibeapi.com/api/media/voices
GEThttps://getvibeapi.com/api/media/voices
POSThttps://getvibeapi.com/api/media/voices/{voice_id}/samples
DELETEhttps://getvibeapi.com/api/media/voices/{voice_id}

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.

Limits und Fehlercodes
ParameterTypBeschreibung
one recording≤ 10 MBwav/mp3, up to 60 s. Larger: 422 voice_sample_too_large / voice_sample_invalid.
recordings per voice≤ 25Bereits hinzugefügte werden mitgezählt. Mehr: 422 voice_samples_limit.
voice length≤ 300 sAlle Aufzeichnungen zusammen, einschließlich der bereits hinzugefügten. Länger: 422 voice_samples_limit; kürzer als das Engine-Minimum: 422 voice_samples_invalid.
recordings size≤ 50 MBAlle Aufzeichnungen einer Anfrage zusammen. Mehr dazu: 422 voice_samples_too_large.
request body≤ 70 953 644 B50 MB an Aufzeichnungen als Base64 (×4/3) plus JSON. Größere Datenmengen: 413 payload_too_large (JSON, mit max_body_bytes). Senden Sie lange Mengen in Teilen über …/samples oder als audio_url-Links.
additions per 24 h20Pro Client. Mehr dazu: 429 voice_samples_rate_limited.
Weitere Antworten: 404 voice_not_found (unbekannte, gelöschte oder die Stimme eines anderen Kontos), 409 voice_samples_unsupported (Aufnahmen können nur zu einer ElevenLabs-Stimme hinzugefügt werden), 409 voice_slots_full, 502 voice_samples_failed (der Anbieter hat die Aufnahmen abgelehnt; die Stimme bleibt unverändert). Eine ElevenLabs-Stimme wird monatlich abgerechnet; die Preise finden Sie in GET /api/media/voices (pricing).

Stimmveränderung und Forced Alignment

ParameterTypBeschreibung
elevenlabs-voice-changermodelopts.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-alignmentmodelprompt 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.

Sandbox: Ergebnis der Übermittlung unbekannt

Wenn die Startbestätigung des Anbieters nicht eintrifft, bleibt der Auftrag im Status: "submitting" mit stage: "submission_unknown", errorCode: "media_submission_uncertain" und failure.advice: "reconcile_first" – fragen Sie weiterhin dieselbe jobId ab und erstellen Sie kein Duplikat. Um diesen Pfad kostenlos zu testen, senden Sie POST /api/media/generate mit einem Sandbox-Schlüssel und dem Header x-pv-sandbox-outcome: submission_uncertain. Die Antwort ist ein normales 202 mit einer jobId; bei der Abfrage wird 60 Sekunden lang eine unbekannte Übermittlung zurückgegeben, danach ein Auftrag, der nie gestartet wurde (failure.code: "submission_not_started", charged: false). Nichts wird gespeichert, an einen Anbieter gesendet oder berechnet. Ein regulärer Schlüssel mit diesem Header erhält 400 sandbox_outcome_requires_sandbox_key.

Speech-to-Text (Transkription)

Derselbe Endpunkt wie für den Rest der Generierung: Geben Sie den Namen des STT-Modells in model an, lassen Sie prompt als leere Zeichenfolge stehen und übergeben Sie die Aufnahme in opts.audio_url. Das Transkript kommt in resultText bei GET /api/media/jobs/{id} an; resultUrls bleibt leer — die Transkription erzeugt keine Datei.

# 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}

Modelle

  • whisper-large-v3-turbo — $0.00025 pro Audiominute. Am günstigsten und schnellsten, 99 Sprachen.
  • nemotron-asr-multilingual — $0.00025 pro Minute. Mehrsprachige NVIDIA-ASR, setzt automatisch Satzzeichen.
  • whisper-large-v3 — $0.000563 pro Minute. Vollständiges Whisper: langsamer als turbo, bei verrauschtem Audio genauer.
  • universal-2 — $0.003125 pro Minute.
  • speech-to-text — $0.01 pro Minute (ElevenLabs Scribe). Unterstützt Sprecherdiarisierung und Tags für Audioereignisse.

Parameter

ParameterTypBeschreibung
audio_urlreq.string (URL)Öffentlicher https-Link, der die Datei direkt bereitstellt. Weiterleitungen und private Netzwerkadressen werden abgelehnt. Verwenden Sie stattdessen audio_base64, wenn die Datei nicht online verfügbar ist.
audio_base64stringDie Aufzeichnung inline als data:audio/mpeg;base64,… Ersetzt audio_url.
language_codestringSprachcode (en, ru, …). Wird automatisch erkannt, wenn er nicht angegeben wird.
duration_minutesnumberAufnahmedauer in Minuten – wird für die Vorab-Preisschätzung verwendet. Die endgültige Gebühr wird gemessen (siehe unten).
diarizebooleanSprecherdiarisierung (universal-2, Speech-to-Text).
tag_audio_eventsbooleanMarkieren Sie Audioereignisse wie Lachen oder Applaus (Sprache-zu-Text).
keytermsstring[]Hinweisliste mit Begriffen und Namen (Speech-to-Text; +30 % Preis).

Formate und Limits

mp3, wav, m4a/mp4, flac, ogg/opus und webm werden akzeptiert. Die Dateigröße beträgt maximal 25 MB — ungefähr 26 Minuten MP3 mit 128 kbit/s oder mehrere Stunden Sprache in Opus. Alles Größere wird sofort mit einer ausdrücklichen Meldung abgelehnt und nicht berechnet; teilen Sie die Aufzeichnung stattdessen auf.

Die Abrechnung erfolgt pro Audiominute. Für whisper-large-v3-turbo, whisper-large-v3 und nemotron-asr-multilingual wird der Endbetrag anhand der gemessenen Länge der Aufnahme berechnet, die aus dem Transkript stammt — nicht anhand des Werts, den Sie in duration_minutes übergeben haben. Die Mindestgebühr beträgt einen Kopeken. Der genaue Betrag wird für den abgeschlossenen Auftrag immer als priceRub zurückgegeben.

Readiness-Webhook (statt Polling)

Um Polling zu vermeiden, registrieren Sie eine Adresse mediaWebhookUrl in Ihrem Dashboard. Wenn die Aufgabe abgeschlossen ist (erfolgreich oder mit Fehler), unternimmt der Dienst bis zu fünf Zustellversuche einer POST mit einem JSON-Body:

// 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"
}
Details zur Zustellung, Fehlercodes und Abrechnung finden Sie unter Webhook- und Medienaufgaben-Lebenszyklus. Kurz gesagt: Der Webhook wird mit Standard-Webhooks-Headern signiert, Duplikate sind möglich und die Zustellung wird nach fünf fehlgeschlagenen Versuchen beendet. Die Abfrage bleibt die maßgebliche Quelle.

Datei wird abgerufen: /api/media/file/{id}/{idx}

GEThttps://getvibeapi.com/api/media/file/{id}/{idx}

Die URL des Generierungsergebnisses (Bild, Video, Audio oder 3D-Modell) aus resultUrls. Verwenden Sie sie so, wie sie vom Dienst zurückgegeben wird: Sie lässt sich ohne API-Schlüssel öffnen und funktioniert in <img>, <video> oder einem Browser. Der Provider bleibt verborgen: Die Upstream-Adresse wird serverseitig aufgelöst, der Client sieht sie nie.

Pfad- und Abfrageparameter
ParameterTypBeschreibung
idreq.string (path)Task-ID (jobId) aus der Antwort von /api/media/jobs/{id}.
idxreq.integer (path)Ergebnisindex (0-basiert). Für ein einzelnes Ergebnis: 0.
query paramswie in resultUrlsErstellen Sie die URL nicht selbst und ändern Sie die vom Dienst zurückgegebenen Parameter nicht.
downloadstring (query)download=1 gibt die Datei als Anhang zurück, dessen Name und Erweiterung dem Inhalt folgen (.glb für ein 3D-Modell). Ohne diesen Parameter wird die Datei im Browser geöffnet.
# 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
Ergebnisse werden 7 Tage lang aufbewahrt, nachdem der Auftrag abgeschlossen wurde (das resultsExpireAt-Feld von /api/media/jobs/{id}). Die fertige Datei wird in unseren Speicher kopiert und resultUrls wechselt zu einer dauerhaften Adresse der Form https://getvibeapi.com/media/r/…; auch eine zuvor zurückgegebene /api/media/file/…-URL bleibt funktionsfähig. Beide unterstützen Range-Anfragen (Springen in Video und Audio). Nach 7 Tagen wird die Datei gelöscht und die URL antwortet mit 410 Gone und dem Code media_result_expired – laden Sie alles, was Sie benötigen, vorher herunter.
GetVibe API-Mediengenerierung – Bild, Video, Audio, Musik, 3D | GetVibe API