VanceAI Open API documentation
VanceAI API
Einführung
Führen Sie die KI-Verarbeitung von Bildern und Videos von VanceAI direkt aus Ihrer eigenen Anwendung aus. Ein API-Schlüssel, eine einheitliche Job-API für beide Medientypen und klare Tool-Namen, die alle Details zu Speicherung, Upload und Planung verbergen.
Was Sie tun können
Die API stellt die Verarbeitungs-Engine von VanceAI über eine kleine, stabile Gruppe von REST-Endpunkten bereit. Sie senden einen Job mit einer Datei oder URL, fragen den Status ab und laden das Ergebnis herunter. Bild- und Video-Tools liegen unter derselben Ressource /v1/jobs — das gewählte tool bestimmt Medientyp und Operation.
| Medium | Beispiel-Tools |
|---|---|
| Bild | Hochskalieren, Schärfen, Entrauschen, Hintergrundentfernung, Restaurieren, Cartoonisieren, Passfoto |
| Video | Hochskalieren |
Basis-URL
Alle API-Anfragen gehen an:
https://cloud-vanceai.vanceai.com/api/v1Jede Antwort ist application/json. Alle Anfragen müssen mit einem API-Schlüssel authentifiziert werden — siehe Authentifizierung.
So funktioniert es
Die API ist vollständig asynchron und basiert auf drei Schritten:
POST /v1/jobs → returns a job_id immediately (status: "queued")
GET /v1/jobs/{id} → poll until status is "succeeded" or "failed"
GET /v1/jobs/{id}/result → fetch a fresh, never-expiring download linkEin POST blockiert nie während Upload oder Verarbeitung. Es validiert Ihre Anfrage, reserviert den Job und gibt in Millisekunden eine job_id zurück. Ein Hintergrund-Worker übernimmt anschließend Upload, Verarbeitung und Ergebnis — so funktionieren selbst mehrere Gigabyte große Videos ohne HTTP-Timeouts.
Kernkonzepte
| Konzept | Zusammenfassung |
|---|---|
| Jobs & Lebenszyklus | Eine Verarbeitungseinheit. Mit POST erstellt, mit GET abgefragt, mit Lebenszyklus: queued → processing → succeeded / failed / canceled. |
| Tools | Klare, stabile Namen (z. B. upscale, video_upscale), die Medientyp und Operation auswählen. |
| Credits & Abrechnung | Die Verarbeitung verbraucht Credits. Sie werden beim Jobstart reserviert (eingefroren) und bei Fehlschlag oder Abbruch vollständig erstattet. |
| API-Schlüssel verwalten | sk_live_-Schlüssel identifizieren Ihr Konto. Erstellung und Widerruf über Ihr Konto-Dashboard. |
In v1 nur Polling
GET /v1/jobs/{id} zum Abschluss ab. Webhook-Callbacks sind für v1.1 geplant. Den vollständigen v1-Umfang finden Sie im Änderungsprotokoll.Nächste Schritte
- Authentifizierung — API-Schlüssel beziehen und verwenden.
- Schnellstart — Ihr erster Job in wenigen Minuten.
- Jobs & Lebenszyklus — die vollständige Endpunkt-Referenz.
Erste Schritte
Authentifizierung
Die VanceAI-API authentifiziert Anfragen mit einem API-Schlüssel. Ihr Schlüssel trägt die Rechte Ihres Kontos — halten Sie ihn geheim.
API-Schlüssel
Schlüssel sehen so aus und beginnen immer mit dem Präfix sk_live_:
sk_live_a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6Erstellen und widerrufen Sie Schlüssel über Ihr VanceAI-Konto-Dashboard. Der vollständige Schlüssel wird nur einmal bei der Erstellung angezeigt — bewahren Sie ihn sicher auf. Bei Verlust widerrufen Sie den Schlüssel und erstellen einen neuen. Siehe API-Schlüssel verwalten.
Anfragen authentifizieren
Senden Sie Ihren Schlüssel bei jeder Anfrage als Bearer-Token im Header Authorization:
Authorization: Bearer sk_live_a1b2c3d4e5f6...Zum Beispiel, um Ihr Credit-Guthaben abzufragen:
curl https://cloud-vanceai.vanceai.com/api/v1/credits \
-H "Authorization: Bearer sk_live_a1b2c3d4e5f6..."Halten Sie Ihren Schlüssel geheim
- Geben Sie
sk_live_-Schlüssel niemals in Client-Code, Mobil-Apps oder öffentlichen Repositories preis. - Führen Sie API-Aufrufe nur aus Ihrem eigenen Backend aus.
- Verwenden Sie pro Anwendung oder Umgebung separate Schlüssel, damit Sie einen widerrufen können, ohne die anderen zu beeinträchtigen.
Authentifizierungsfehler
Ein fehlender, ungültiger oder widerrufener Schlüssel gibt 401 mit einem stabilen Fehlercode zurück:
{
"error": {
"code": "invalid_api_key",
"message": "The API key provided is invalid or has been disabled.",
"type": "auth"
}
}Die vollständige Liste der Codes und deren Behandlung finden Sie unter Fehler.
Erste Schritte
Schnellstart
Diese Anleitung führt durch einen vollständigen Bildhochskalierungs-Job: senden, abfragen, herunterladen. Es dauert wenige Minuten und nutzt nur curl.
1. Job senden
Senden Sie das Bild als Multipart-Formulardaten zusammen mit dem tool und seiner config. Sie können eine Datei direkt hochladen (bis zu 200 MB) oder stattdessen eine öffentliche image_url übergeben.
curl https://cloud-vanceai.vanceai.com/api/v1/jobs \
-H "Authorization: Bearer sk_live_..." \
-F [email protected] \
-F tool=upscale \
-F 'config={"scale":4,"face_enhance":true}' \
-F output_format=jpgOder senden Sie eine URL mit JSON-Body:
curl https://cloud-vanceai.vanceai.com/api/v1/jobs \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"image_url": "https://example.com/photo.jpg",
"tool": "upscale",
"config": { "scale": 4, "face_enhance": true },
"output_format": "jpg"
}'Die Antwort liefert sofort eine job_id und den Status queued:
{
"job_id": "job_3f2a9c...",
"status": "queued",
"tool": "upscale",
"media": "image",
"credits_estimated": 1.0,
"credits_charged": 0,
"created_at": "2026-06-11T08:30:00Z"
}2. Bis zum Abschluss abfragen
Fragen Sie GET /v1/jobs/{job_id} ab, bis status zu succeeded (oder failed) wird. Bei Bildern reicht ein Polling alle ~2 Sekunden.
curl https://cloud-vanceai.vanceai.com/api/v1/jobs/job_3f2a9c... \
-H "Authorization: Bearer sk_live_..."{
"job_id": "job_3f2a9c...",
"status": "succeeded",
"progress": 100,
"tool": "upscale",
"result_url": "https://.../preview?sign=...",
"result": { "width": 4000, "height": 3000, "size": 2451234 },
"error": null,
"created_at": "2026-06-11T08:30:00Z",
"finished_at": "2026-06-11T08:30:42Z"
}3. Ergebnis herunterladen
Die result_url aus Schritt 2 ist ein signierter Link, der irgendwann abläuft. Für einen Link, der nie abläuft, rufen Sie den Result-Endpunkt auf, der bei Bedarf neu signiert:
curl -L https://cloud-vanceai.vanceai.com/api/v1/jobs/job_3f2a9c.../result \
-H "Authorization: Bearer sk_live_..." \
-o upscaled.jpgDas ist der gesamte Ablauf
tool-Name und die config ändern sich. Video fügt vorab einen Schritt hinzu: Laden Sie die Datei über den zweistufigen Upload hoch und übergeben Sie deren upload_id statt eines Bildes. Die vollständige Liste finden Sie auf der Seite Tools.Leitfäden
Jobs & Lebenszyklus
Ein Job steht für eine Verarbeitungsaufgabe — Bild oder Video. Sie erstellen ihn, fragen seinen Status ab und laden das Ergebnis herunter. Diese Seite ist die vollständige Referenz für die Ressource /v1/jobs.
Der Job-Lebenszyklus
Jeder Job durchläuft diese Status:
| status | Bedeutung |
|---|---|
queued | Akzeptiert und wartet auf einen Worker. Kann je nach Rückstand kurz hier verweilen. |
processing | Wird bearbeitet. Das Feld phase gibt den Teilschritt an. |
succeeded | Fertig. result_url und result sind verfügbar. |
failed | Fehlgeschlagen. error enthält einen stabilen Code. |
canceled | Von Ihnen abgebrochen. Reservierte Credits werden erstattet. |
Während processing präzisiert das Feld phase: uploading → syncing → processing. Der numerische progress (0–100) ist erst aussagekräftig, wenn phase processing ist; während Upload/Sync bleibt er 0. Bei großen Videos kann die Upload-Phase Minuten dauern — beurteilen Sie „hängt es?" anhand von phase, nicht progress.
Video hochladen
Videos werden in zwei Schritten direkt in den Speicher hochgeladen, sodass die Bytes nie die API durchlaufen und mehrere Gigabyte große Dateien nicht durch die Anfragegröße begrenzt sind. Rufen Sie zuerst POST /v1/uploads für eine einmalige vorsignierte Upload-URL auf und führen Sie dann ein PUT der Datei dorthin aus. Bilder überspringen dies — laden Sie sie beim Erstellen des Jobs direkt hoch (siehe unten). Direkter Multipart-Upload von Videos wird nicht unterstützt; source_url wird weiterhin als Alternative akzeptiert.
/v1/uploadsAnfrageparameter
| Field | Type | Description |
|---|---|---|
| file_namerequired | string | Der Dateiname inkl. Videoendung (z. B. clip.mp4). Wird zur Ableitung von Speicherschlüssel und Inhaltstyp verwendet. |
| file_size | number | Optional. Dateigröße in Bytes. Wenn angegeben, schlägt die Anfrage sofort fehl, falls das Limit für Einzel-Uploads (max_bytes in der Antwort, ~4,9 GB) überschritten wird; das Limit wird beim Upload ohnehin durchgesetzt. |
| content_type | string | Optionaler MIME-Typ (z. B. video/mp4). Wird bei Weglassen aus der Endung abgeleitet. |
Beispiel
curl https://cloud-vanceai.vanceai.com/api/v1/uploads \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"file_name": "clip.mp4",
"file_size": 734003200,
"content_type": "video/mp4"
}'Antwort — 201 Created
{
"upload_id": "upl_8f3b1c2a...",
"put_url": "https://<bucket>.r2.cloudflarestorage.com/...&X-Amz-Signature=...",
"expires_at": "2026-06-13T08:30:00Z",
"max_bytes": 5261334937
}put_url ist eine vorsignierte, 24 Stunden gültige URL. Laden Sie die rohen Bytes mit einem einzigen PUT dorthin — ohne Auth-Header, nur die Datei:
curl -X PUT --upload-file clip.mp4 \
-H "Content-Type: video/mp4" \
"https://<bucket>.r2.cloudflarestorage.com/...&X-Amz-Signature=..."Sobald das PUT erfolgreich ist, erstellen Sie den Job, indem Sie die upload_id statt einer Datei übergeben — siehe Job erstellen. Jede upload_id ist einmalig verwendbar.
curl https://cloud-vanceai.vanceai.com/api/v1/jobs \
-H "Authorization: Bearer sk_live_..." \
-H "Content-Type: application/json" \
-d '{
"upload_id": "upl_8f3b1c2a...",
"tool": "video_upscale",
"config": { "scale": 2, "codec": "h264" }
}'{
"job_id": "job_3f2a9c...",
"status": "queued",
"tool": "video_upscale",
"media": "video",
"credits_estimated": 0,
"credits_charged": 0,
"created_at": "2026-06-11T08:30:00Z"
}Größenlimits & Ablauf
PUT kann bis zu ~4,9 GB groß sein (die genaue Byte-Obergrenze ist max_bytes). Das Anfordern eines Uploads für eine größere Datei gibt 413 file_too_large zurück. Die vorsignierte URL läuft nach 24 Stunden ab; eine ungenutzte upload_id wird dann upload_expired, und Sie müssen eine neue anfordern.Job erstellen
/v1/jobsWie Sie das Medium bereitstellen, hängt vom Typ ab. Bilder: direkter Datei-Upload (Multipart) oder eine öffentliche URL. Videos: eine upload_id aus dem Upload-Schritt oben oder eine öffentliche source_url. Das tool wählt Medientyp und Operation.
Anfrageparameter
| Field | Type | Description |
|---|---|---|
| image / file | file | Nur Bild: Binär-Upload (Multipart). file ist ein zulässiger Alias. Für Video verwenden Sie upload_id. |
| upload_id | string | Nur Video: die von POST /v1/uploads zurückgegebene upload_id nach dem Hochladen der Datei. Einmalig verwendbar. |
| image_url / source_url | string | Eine öffentlich erreichbare URL zum Abrufen (Bild oder Video). Statt einer Datei / upload_id verwenden. source_url ist ein zulässiger Alias. |
| toolrequired | string | Die Operation, z. B. upscale oder video_upscale. Siehe Tools. |
| config | object | Tool-spezifische Optionen (Bild- und Video-Optionen unterscheiden sich). Siehe Tools. |
| output_format | string | Nur Bild: jpg (Standard), png oder webp. Bei Video ignoriert (verwenden Sie config.codec). |
Idempotenz
Übergeben Sie einen Idempotency-Key-Header, um eine Erstellungsanfrage sicher zu wiederholen, ohne den Job zu duplizieren. Siehe Ratenlimits & Idempotenz.
Beispiel
curl https://cloud-vanceai.vanceai.com/api/v1/jobs \
-H "Authorization: Bearer sk_live_..." \
-H "Idempotency-Key: a-unique-string" \
-F [email protected] \
-F tool=upscale \
-F 'config={"scale":4,"face_enhance":true}'Antwort — 202 Accepted
{
"job_id": "job_3f2a9c...",
"status": "queued",
"tool": "upscale",
"media": "image",
"credits_estimated": 1.0,
"credits_charged": 0,
"created_at": "2026-06-11T08:30:00Z"
}Die Antwort kommt zurück, bevor Credits berechnet werden (credits_charged ist 0). credits_estimated ist eine Vorab-Schätzung; die maßgebliche Abbuchung erscheint, sobald der Job processing erreicht. Siehe Credits & Abrechnung.
Große Dateien & URLs
413 file_too_large zurück — wechseln Sie zu source_url. Videos laufen nie über Multipart — laden Sie sie über den Upload-Schritt hoch (ein einzelnes PUT bis zu ~4,9 GB) oder übergeben Sie eine source_url. Der serverseitige URL-Abruf ist gegen SSRF geschützt: Nur http/https sind erlaubt, private/interne Netzwerkziele werden abgelehnt.Job abrufen
/v1/jobs/{job_id}Gibt den aktuellen Status eines Jobs zurück. Fragen Sie ab, bis der Job einen Endstatus erreicht.
Antwort — 200 (processing)
{
"job_id": "job_3f2a9c...",
"status": "processing",
"phase": "uploading",
"progress": 0,
"tool": "video_upscale",
"media": "video",
"result_url": null,
"result": null,
"error": null,
"created_at": "2026-06-11T08:30:00Z",
"finished_at": null
}Antwort — 200 (succeeded)
{
"job_id": "job_3f2a9c...",
"status": "succeeded",
"progress": 100,
"tool": "upscale",
"result_url": "https://.../preview?sign=...",
"result": { "width": 4000, "height": 3000, "size": 2451234 },
"error": null,
"created_at": "2026-06-11T08:30:00Z",
"finished_at": "2026-06-11T08:30:42Z"
}Die Form von result ist { width, height, size } für Bilder und { width, height, duration, size, codec } für Video. Die result_url ist ein signierter Link, der abläuft — für einen dauerhaften Link nutzen Sie den Result-Endpunkt unten.
Ergebnis abrufen
/v1/jobs/{job_id}/resultLeitet (302) zu einer frisch signierten Result-URL um — bei jedem Aufruf neu signiert, sodass der Link nie veraltet. Verwenden Sie dies zum Herunterladen der Ausgabe, statt result_url zwischenzuspeichern.
curl -L https://cloud-vanceai.vanceai.com/api/v1/jobs/job_3f2a9c.../result \
-H "Authorization: Bearer sk_live_..." \
-o result.jpgErgebnis noch nicht bereit
202 result_not_ready zurückgeben — wiederholen Sie es kurz darauf. Das Herunterladen des Ergebnisses kostet nie zusätzliche Credits.Job abbrechen
/v1/jobs/{job_id}/cancelBricht einen Job ab, der noch queued oder processing ist. Vor allem für lange Video-Jobs nützlich. Reservierte Credits werden vollständig erstattet.
{ "job_id": "job_3f2a9c...", "status": "canceled" }Ein Job, der bereits succeeded, failed oder canceled ist, gibt 409 not_cancelable zurück.
Job löschen
/v1/jobs/{job_id}Löscht einen Job-Datensatz und sein zugehöriges Ergebnis — nützlich zum Bereinigen verarbeiteter Assets aus Datenschutz- oder Compliance-Gründen. Läuft der Job noch, wird er zuvor abgebrochen (und Credits erstattet).
{ "job_id": "job_3f2a9c...", "deleted": true }- Das Löschen eines bereits gelöschten Jobs gibt weiterhin
200 { "deleted": true }zurück (idempotent). - Sie können nur Jobs Ihres eigenen Kontos löschen; andere geben
404 job_not_foundzurück.
Leitfäden
Tools
Das an POST /v1/jobs übergebene tool wählt sowohl Medientyp als auch Operation. Bild-Tools verwenden einfache Namen; Video-Tools haben das Präfix video_.
Bild-Tools
Bild-Tools nehmen ein config-Objekt entgegen. Die Option face_enhance (Boolean) ist bei den meisten Tools optional. Setzen Sie output_format in der Anfrage, um jpg / png / webp zu wählen.
| tool | config-Optionen |
|---|---|
upscale | scale (2 / 4 / 8, Standard 2), face_enhance |
sharpen | face_enhance |
denoise | face_enhance |
remove_bg | none |
restore | face_enhance |
cartoonize | style, face_enhance |
passport_photo | none |
custom | prompt, face_enhance |
{ "scale": 4, "face_enhance": true }Validierung
upscale.scale muss 2, 4 oder 8 sein; custom erfordert einen nicht leeren prompt. Ungültige Werte geben 400 invalid_parameter zurück. Sie müssen die Quellabmessungen nicht senden — sie werden beim Upload erkannt und zur Berechnung der Zielgröße verwendet.Video-Tools
Video-Tools werden Ende-zu-Ende verarbeitet (kein Vorschau-Clip-Modus in v1). Die Optionen quality (high / medium / low) und codec (h264 / h265) gelten nur für video_hdr und video_face_enhance. Bei video_upscale wird die Ausgabe-Kodierung von der Upscaler-Engine bestimmt, daher werden quality / codec nicht verwendet (das Senden hat keine Wirkung).
| tool | config-Optionen |
|---|---|
video_upscale | scale (2 / 4, Standard 2), fps |
video_hdr | quality, codec, hdr_color_gamut |
video_face_enhance | face_enhanced_mode, quality, codec |
{ "scale": 2 }Quellabmessungen werden serverseitig gemessen
ffprobe) — er vertraut nicht den vom Client gemeldeten Werten. Optional können Sie source_width / source_height / duration in config angeben, um eine Vorab-Credit-Schätzung zu erhalten, doch die maßgebliche Abbuchung basiert stets auf den gemessenen Werten. Die Ausgabeauflösung ist begrenzt (lange Seite 4096, kurze Seite 2160); ein Überschreiten lässt den Job mit resolution_limit_exceeded fehlschlagen, bevor Credits berechnet werden.Nicht unterstützte Tools
Die Anforderung eines Tools, das nicht existiert — oder noch nicht verfügbar ist (die Video-Operationen translate, colorize und subtitle sind nicht in v1) — gibt 400 unsupported_tool zurück.
Leitfäden
Credits & Abrechnung
Die Verarbeitung verbraucht Credits Ihres Kontos. Credits werden beim Jobstart reserviert und bei Erfolg bestätigt oder bei Fehlschlag bzw. Abbruch vollständig erstattet.
So funktioniert die Abrechnung
Der Credit-Fluss über die Lebensdauer eines Jobs:
| Phase | Was mit den Credits passiert |
|---|---|
Job erstellt (queued) | Noch nichts berechnet — credits_charged ist 0. |
| Worker beginnt mit der Verarbeitung | Credits werden reserviert (eingefroren). Ist Ihr Guthaben zu niedrig, schlägt der Job mit insufficient_credits fehl. |
Job succeeded | Die Reservierung wird bestätigt — Credits werden abgezogen. |
Job failed / canceled | Die Reservierung wird freigegeben — Credits werden vollständig erstattet. |
| Herunterladen des Ergebnisses | Kostenlos — wird nie erneut berechnet. |
Vorabprüfung beim Senden
POST senden, prüft die API vor dem Einreihen kurz das Guthaben. Übersteigen die geschätzten Kosten bereits Ihr verfügbares Guthaben, erhalten Sie sofort 402 insufficient_credits — so wird ein großer Upload nicht verschwendet. Die maßgebliche Reservierung erfolgt weiterhin beim Start des Workers.Guthaben abrufen
/v1/creditscurl https://cloud-vanceai.vanceai.com/api/v1/credits \
-H "Authorization: Bearer sk_live_..."{ "balance": 999.8, "used": 234.2, "frozen": 12.5 }| Field | Type | Description |
|---|---|---|
| balance | number | Sofort verfügbares Guthaben (eingefrorene Beträge bereits ausgenommen). |
| used | number | Von abgeschlossenen Jobs verbrauchte Credits. |
| frozen | number | Aktuell von laufenden Jobs reservierte Credits (noch nicht bestätigt oder freigegeben). |
Credit-Beträge sind Dezimalzahlen (manche Operationen kosten einen Bruchteil eines Credits).
Leitfäden
Ratenlimits & Idempotenz
Zwei Limits schützen die Plattform: eine Anfragerate pro Schlüssel und eine Obergrenze gleichzeitiger Jobs pro Konto. Idempotenzschlüssel ermöglichen sicheres Wiederholen der Job-Erstellung.
Anfragerate (pro Schlüssel)
Jeder API-Schlüssel hat ein Anfrageratenlimit. Bei Überschreitung wird 429 rate_limited mit Headern zu Ihrem aktuellen Fenster zurückgegeben:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1718093460Antworten können auch einen Retry-After-Header (Sekunden) enthalten — beachten Sie ihn vor dem erneuten Versuch.
Parallelität (pro Konto)
Da ein einzelner Video-Job viele Minuten dauern kann, reicht die Anfragerate allein nicht. Es gibt zudem eine Obergrenze für die Anzahl gleichzeitig laufender Jobs Ihres Kontos (queued oder processing) — bei Video meist niedriger als bei Bildern.
Senden über die Obergrenze hinaus gibt 429 concurrency_limit_exceeded zurück. Warten Sie, bis einige laufende Jobs fertig sind, und versuchen Sie es erneut. Die Zählung erfolgt pro Konto, daher umgeht das Verteilen auf mehrere Schlüssel sie nicht.
Polling-Hinweise
v1 hat keine Webhooks, daher fragen Sie GET /v1/jobs/{id} ab. Um die API nicht zu überlasten:
- Empfohlenes Intervall: etwa 2 s für Bilder, 5–10 s für Video.
- Beachten Sie den
Retry-After-Header, falls vorhanden — er ist ein Hinweis für die nächste Abfrage. - Beenden Sie das Polling, sobald der Job einen Endstatus erreicht (
succeeded/failed/canceled).
Idempotenz
Netzwerkaussetzer können Sie im Unklaren lassen, ob ein POST /v1/jobs erfolgreich war. Senden Sie zum sicheren Wiederholen einen eindeutigen Idempotency-Key-Header:
curl https://cloud-vanceai.vanceai.com/api/v1/jobs \
-H "Authorization: Bearer sk_live_..." \
-H "Idempotency-Key: 8f3b1c2a-...-unique" \
-F [email protected] \
-F tool=upscale- Das erneute Senden desselben Schlüssels gibt den ursprünglichen Job zurück — kein Duplikat, keine doppelte Abbuchung.
- Erzeugen Sie pro logischer Anfrage einen neuen Schlüssel (eine UUID eignet sich gut).
- Die Wiederverwendung eines Schlüssels mit anderem
tooloderconfiggibt409 idempotency_conflictzurück.
Wie lange ein Schlüssel gültig ist
Leitfäden
Fehler
Fehler haben eine einheitliche JSON-Form mit einem stabilen Code, auf den Sie verzweigen können. Es gibt zwei Arten: Anfragefehler (mit einem HTTP-Fehlerstatus zurückgegeben) und Job-Fehler (bei erfolgreicher HTTP-Abfrage mit status: failed zurückgegeben).
Fehlerformat
{
"error": {
"code": "insufficient_credits",
"message": "Your account does not have enough credits for this operation.",
"type": "billing"
}
}code ist ein stabiler String — verzweigen Sie darauf. message ist menschenlesbar und kann sich ändern. type ist die grobe Kategorie: auth, billing, validation, processing, rate_limit oder server.
Anfragefehler (HTTP-Status)
Wird eine Anfrage direkt abgelehnt, erhalten Sie den passenden HTTP-Status und einen error-Body:
| HTTP | code | Wann |
|---|---|---|
| 401 | invalid_api_key | API-Schlüssel fehlt, ist ungültig oder deaktiviert. |
| 401 | unauthorized | Authentifizierung fehlgeschlagen. |
| 402 | insufficient_credits | Vorab-Guthabenprüfung beim Senden fehlgeschlagen. |
| 400 | invalid_parameter | Ein Parameter fehlt oder ist ungültig. |
| 400 | unsupported_tool | Das Tool existiert nicht oder ist in v1 nicht verfügbar. |
| 403 | geo_restricted | In Ihrer Region gesperrt. |
| 404 | job_not_found | Kein solcher Job unter Ihrem Konto. |
| 413 | file_too_large | Bild-Direktupload über 200 MB oder Video-Upload über dem Einzel-PUT-Limit (~4,9 GB). |
| 415 | unsupported_format | Direkter Upload hat ein nicht unterstütztes Format. |
| 409 | not_cancelable | Der Job ist bereits in einem Endzustand. |
| 409 | idempotency_conflict | Gleicher Idempotenzschlüssel mit anderem tool/config verwendet. |
| 404 | upload_not_found | Die upload_id existiert nicht oder gehört zu einem anderen Konto. |
| 409 | upload_already_consumed | Die upload_id wurde bereits von einem anderen Job verwendet (einmalig). |
| 410 | upload_expired | Die upload_id ist vor der Nutzung abgelaufen (24 h) — fordern Sie eine neue an. |
| 202 | result_not_ready | Ergebnis synchronisiert noch — wiederholen Sie /result kurz darauf. |
| 429 | rate_limited | Anfragerate pro Schlüssel überschritten. |
| 429 | concurrency_limit_exceeded | Zu viele laufende Jobs für das Konto. |
| 503 | service_unavailable | Eine nachgelagerte Abhängigkeit ist vorübergehend nicht verfügbar — wiederholen. |
| 500 | internal_error | Unerwarteter Serverfehler. |
Job-Fehler (status: failed)
Wenn ein Job *asynchron* fehlschlägt, gibt das Abfragen von GET /v1/jobs/{id} HTTP 200 mit status: "failed" und einem Code in error.code zurück. Erwarten Sie keinen 5xx für einen fehlgeschlagenen Job — die Abfrage selbst war erfolgreich.
| `error.code` | type | Wann |
|---|---|---|
processing_failed | processing | Die Verarbeitungs-Engine konnte die Aufgabe nicht abschließen. |
processing_timeout | processing | Der Job überschritt die maximale Verarbeitungszeit (Credits erstattet). |
file_too_large | validation | Eine abgerufene source_url überschritt 200 MB. |
unsupported_format | validation | Eine abgerufene source_url hatte einen Typ, der nicht zum Tool passt. |
ssrf_blocked | validation | Die source_url löste sich zu einer unzulässigen (privaten/internen) Adresse auf. |
insufficient_credits | billing | Das Guthaben wurde vor der maßgeblichen Reservierung verbraucht. |
upload_incomplete | validation | Das hochgeladene Objekt fehlt oder ist unvollständig — die Datei wurde vor der Job-Erstellung nicht vollständig per PUT übertragen. |
resolution_limit_exceeded | validation | Die Ausgabeauflösung überschreitet das Engine-Limit (lange Seite 4096, kurze Seite 2160). Nicht berechnet. |
Erneut versuchen
service_unavailable und vorübergehende 5xx-Antworten als wiederholbar (idealerweise mit Backoff). Behandeln Sie billing-, auth- und validation-Fehler als dauerhaft — korrigieren Sie die Anfrage, statt es erneut zu versuchen.Konto
API-Schlüssel verwalten
API-Schlüssel werden über Ihr VanceAI-Konto-Dashboard erstellt und verwaltet. Jeder Schlüssel gehört zu Ihrem Konto und nutzt dessen Credit-Guthaben.
Schlüssel erstellen
Erstellen Sie in Ihrem Dashboard einen neuen Schlüssel und geben Sie ihm einen erkennbaren Namen (z. B. my-app-prod). Das vollständige Geheimnis — beginnend mit sk_live_ — wird nur einmal direkt nach der Erstellung angezeigt.
Kopieren Sie Ihren Schlüssel sofort
Schlüssel anzeigen
Das Dashboard listet Ihre Schlüssel nach Name, Status, einem kurzen Präfix (z. B. sk_live_a1b2) zur Identifizierung und dem Zeitpunkt der letzten Verwendung auf. Das vollständige Geheimnis wird nie wieder angezeigt — nur das Präfix.
Schlüssel widerrufen
Das Deaktivieren eines Schlüssels wirkt sofort — jede weitere Anfrage damit gibt 401 invalid_api_key zurück.
- Der Widerruf ist dauerhaft. Es gibt keine Reaktivierung; erstellen Sie stattdessen einen neuen Schlüssel.
- Sie können nur Schlüssel verwalten, die zu Ihrem eigenen Konto gehören.
Schlüssel sicher rotieren
Mehrere aktive Schlüssel können nebeneinander existieren, was die Rotation nahtlos macht: Erstellen Sie einen neuen Schlüssel, stellen Sie Ihre Anwendung darauf um, bestätigen Sie, dass der Traffic migriert ist, und widerrufen Sie dann den alten Schlüssel. Ein eigener Schlüssel pro Anwendung oder Umgebung begrenzt den Schaden bei einem Leck.
Ressourcen
Versionierung & Änderungsprotokoll
Die API ist im URL-Pfad versioniert. Die aktuelle Version ist v1, bereitgestellt unter /api/v1.
v1 — aktuell
Die erste stabile Version umfasst:
- Einheitliche Jobs-API für Bild und Video —
POST /v1/jobs,GET /v1/jobs/{id},GET /v1/jobs/{id}/result,POST /v1/jobs/{id}/cancel,DELETE /v1/jobs/{id}undGET /v1/credits. - 8 Bild-Tools und 1 Video-Tool (Hochskalieren).
- Große Dateien: Bild-Direktuploads bis 200 MB; Videos über zweistufigen Direktupload; beliebige Medien über
source_url(SSRF-geschützt). - Asynchrone Verarbeitung mit Vorab-Credit-Prüfung und Hintergrund-Worker.
- Credit-Reservierungen mit voller Erstattung bei Fehlschlag oder Abbruch.
- Stabile Fehlercodes,
Idempotency-Key-Unterstützung, Ratenlimits pro Schlüssel und Parallelitätslimits pro Konto. - Zweistufiger Video-Direktupload —
POST /v1/uploadsstellt eine vorsignierte URL aus, sodass Videos direkt in den Speicher hochgeladen werden (ein einzelnesPUTbis zu ~4,9 GB) und das Anfragegrößenlimit umgehen. - Genaue Video-Abrechnung — der Server misst Auflösung, Dauer und Bildrate mit
ffprobeund prüft die Ausgabeauflösung vorab gegen das Engine-Limit.