CheaperGen

Anleitungen

Fehler

Alle Fehlercodes und HTTP-Statuscodes der CheaperGen-API – 400, 401, 402, 404, 409, 429, 502, 503 – mit Ursachen sowie Hinweisen zur Behandlung oder Wiederholung.

Die API verwendet die üblichen HTTP-Statuscodes: 2xx bedeutet Erfolg, 4xx, dass die Anfrage geändert werden muss, und 5xx einen Fehler auf unserer Seite oder bei der Verarbeitung. Alle Fehlerantworten haben dieselbe JSON-Struktur und lassen sich einheitlich behandeln.

Fehlerformat#

400 Bad Request
{
  "error": {
    "code": "invalid_request",
    "message": "\"resolution\" must be one of: 480p, 720p",
    "param": "resolution"
  }
}
  • code – eine stabile, maschinenlesbare Zeichenfolge. Verwenden Sie diese für die Fallunterscheidung, nicht den Meldungstext.
  • message – eine verständliche Erklärung, die Sie protokollieren können. Die Formulierung kann sich ändern.
  • param – vorhanden, wenn ein bestimmtes Anfragefeld den Fehler verursacht hat.

Fehlercodes#

HTTPCodeBedeutungWas Sie tun könnenErneut versuchen?
400invalid_requestDer Anfrage-Body ist kein gültiges JSON, ein Pflichtfeld fehlt, ein Wert liegt außerhalb des erlaubten Bereichs oder ist unzulässig, der Body enthält einen unbekannten Parameter, ein Prompt-Verweis zeigt ins Leere oder eine Referenzvideo- bzw. -audiodatei ist unlesbar oder überschreitet die Modelllimits (Dauer, Größe, Auflösung, Bildrate). param benennt das fehlerhafte Feld.Korrigieren Sie die Anfrage. Die Meldung beschreibt genau, was nicht stimmt.Nach der Korrektur
401unauthorizedDer API-Schlüssel fehlt, ist fehlerhaft formatiert oder wurde widerrufen.Prüfen Sie den Header Authorization: Bearer und ob der Schlüssel aktiv ist.Nach der Korrektur
402insufficient_balanceIhr Guthaben reicht nicht für den Preis dieser Generierung. Es wurde nichts berechnet.Laden Sie Guthaben auf oder aktivieren Sie unter Dashboard → Abrechnung die automatische Aufladung. Siehe Abrechnung.Nach der Korrektur
404not_foundDie Endpunkt-ID, das Modell oder die Generierung existiert nicht – oder die Generierung gehört zu einem anderen Konto.Prüfen Sie die ID anhand von Modellliste.Kein
409conflictDie Anfrage steht im Konflikt mit dem Status der Ressource – typischerweise, wenn Sie eine bereits laufende oder abgeschlossene Generierung abbrechen möchten.Rufen Sie die Generierung ab, um ihren aktuellen Status zu sehen.Kein
410model_delistedDieses Modell wird nicht mehr angeboten. Es wurde nichts übermittelt oder berechnet; frühere Generierungen bleiben weiterhin abrufbar.Wählen Sie ein anderes Modell aus der Liste Modellliste.Kein
429rate_limitedZu viele Anfragen pro Sekunde, oder Ihre Warteschlange wartender Generierungen ist voll.Warten Sie kurz und versuchen Sie es erneut. Siehe Ratenbegrenzungen.Mit Wartezeit zwischen den Versuchen
500internal_errorAuf unserer Seite ist ein Fehler aufgetreten.Versuchen Sie es mit Wartezeit zwischen den Versuchen erneut. Falls der Fehler weiterhin auftritt, wenden Sie sich mit dem Zeitpunkt der Anfrage an den Support.Mit Wartezeit zwischen den Versuchen
501direct_upload_unavailableDirekte (vorab signierte) Uploads sind in dieser Bereitstellung nicht verfügbar.Laden Sie die Datei stattdessen über multipart/form-data hoch. Siehe Uploads.Kein
502—Ein Gateway- oder Netzwerkfehler, bevor die Anfrage unsere API erreicht hat (selten). Fehler des Modells erscheinen nie als HTTP-Fehler: Die Generierung schlägt mit einer Fehlerursache fehl.Versuchen Sie es mit Wartezeit zwischen den Versuchen erneut. Es wurde nichts berechnet.Mit Wartezeit zwischen den Versuchen
503model_unavailableDas Modell nimmt vorübergehend keine neuen Generierungen an.Versuchen Sie es später erneut oder wechseln Sie das Modell. Prüfen Sie Statusseite.Mit Wartezeit zwischen den Versuchen
503pricing_unavailableDie Preise konnten kurzzeitig nicht abgerufen werden. Deshalb wurde die Anfrage nicht bepreist. Es wurde nichts übermittelt oder berechnet.Sende dieselbe Anfrage nach einigen Sekunden erneut (die Antwort enthält einen Retry-After-Header) und verwende denselben Idempotency-Key.Mit Wartezeit zwischen den Versuchen
503fallback_price_declinedDie übliche Kapazität ist derzeit nicht verfügbar. Nur der Notfallpreis (höchstens der offizielle Preis) gilt, und Sie haben allow_fallback_price: false übergeben. Es wurde nichts berechnet; die Meldung nennt beide Preise.Versuchen Sie es später erneut zum Standardpreis oder übergeben Sie allow_fallback_price: true (Standardwert), um den Notfallpreis zu akzeptieren.Mit Wartezeit zwischen den Versuchen
400max_cost_exceededDer Preis einschließlich Notfallpreis liegt über Ihrem max_cost_usd. Es wurde nichts berechnet.Verringern Sie Auflösung oder Dauer, oder bestätigen Sie den Preis und erhöhen Sie max_cost_usd.Nach der Korrektur

Fehler innerhalb einer Generierung#

Ein HTTP-Fehler bedeutet, dass die Anfrage selbst abgelehnt wurde und nichts berechnet wurde. Anders ist es, wenn eine angenommene Generierung später fehlschlägt: Der API-Aufruf war erfolgreich (auch wenn POST /run bei einem sofortigen Fehlschlag 202 zurückgibt); der Status der Generierung status wird zu failed, mit einem Fehlerobjekt error. Die Reservierung wird automatisch erstattet. Dasselbe Objekt finden Sie in GET /generations, der Webhook-Nutzlast und den MCP-Tool-Ergebnissen.

Eine fehlgeschlagene Generierung
{
  "status": "failed",
  "error": {
    "code": "generation_failed",
    "message": "ByteDance's safety review for Seedance 2.0 Fast rejected this request (the prompt or an input file).",
    "reason": "content_blocked",
    "hint": "Describe the character's look instead of naming a copyrighted character or real person, keep it non-explicit, or try another model.",
    "retryable": false,
    "refunded": true,
    "detail": "Ihre Anfrage hat die Inhaltsprüfung nicht bestanden. Passen Sie den Prompt an und versuchen Sie es erneut."
  }
}

code ist die übergeordnete Fehlerklasse (die vier seit dem Start dokumentierten Werte). reason nennt genau den Grund. Verwenden Sie diesen Wert für die Fallunterscheidung und zeigen Sie message sowie hint Ihren Nutzern. retryable gibt an, ob dieselbe Anfrage bei erneutem Senden erfolgreich sein kann; param nennt, sofern erkennbar, das zu ändernde Feld; detail enthält den Wortlaut des Modellanbieters.

error.reasonerror.codeWas ist passiert?Was Sie tun könnenUnverändert erneut senden?
content_blockedgeneration_failedDer Sicherheitsfilter des Modells hat Ihren Prompt, eine Eingabedatei oder das erzeugte Ergebnis abgelehnt (zum Beispiel eine genannte urheberrechtlich geschützte Figur, eine reale Person oder explizite Inhalte). Die Meldung nennt den zuständigen Filter.Formulieren Sie den Prompt um (beschreiben Sie das Aussehen, statt eine Figur, Marke oder reale Person zu nennen), verwenden Sie andere Eingabedateien oder probieren Sie ein anderes Modell aus. Mit derselben Anfrage schlägt es erneut fehl.Nein – erst ändern
invalid_inputgeneration_failedDas Modell konnte eine der Eingaben oder Einstellungen nicht verarbeiten: etwa eine zu große Datei, ein nicht unterstütztes Format, falsche Abmessungen oder ein falsches Seitenverhältnis, eine zu lange Datei oder einen nicht unterstützten Wert. Wenn möglich, nennt param das betreffende Feld.Korrigieren Sie das genannte Feld (siehe die Modellgrenzen auf der API-Seite) und senden Sie die Anfrage erneut, oder probieren Sie ein anderes Modell.Nein – erst ändern
input_unreachablegeneration_failedEine Eingabe-URL konnte nicht heruntergeladen werden: Für den Zugriff ist eine Anmeldung erforderlich, der signierte Link ist abgelaufen, die URL verweist nicht direkt auf die Datei oder der Host hat die Anfrage abgelehnt. Wenn der Anbieter des Modells eine Datei nicht abrufen kann, laden wir sie normalerweise selbst herunter und versuchen es mit unserer Kopie erneut. Diese Meldung bedeutet daher meist, dass die Datei überhaupt nicht heruntergeladen werden konnte.Verwenden Sie eine öffentliche, direkte Datei-URL (oder laden Sie die Datei mit POST /api/v1/uploads hoch) und senden Sie die Anfrage erneut.Nein – erst ändern
upstream_unavailableupstream_errorDas Modell war nicht verfügbar, überlastet oder ausgelastet. Wir haben alle geeigneten Ausführungswege versucht.Versuchen Sie es in ein oder zwei Minuten erneut oder verwenden Sie ein anderes Modell.Ja
upstream_errorupstream_errorBeim Generieren ist ein interner Fehler im Modell aufgetreten, nachdem wir alle geeigneten Ausführungswege versucht haben.Versuchen Sie es erneut; diese Fehler sind meist vorübergehend. Falls der Fehler weiterhin auftritt, probieren Sie ein anderes Modell.Ja
timeouttimeoutDie Generierung wurde nicht rechtzeitig abgeschlossen (wegen des Zeitlimits des Modells oder unseres Limits von 40 Minuten).Versuchen Sie es erneut. Kürzere Clips oder eine niedrigere Auflösung sind schneller fertig.Ja
output_unavailableupstream_errorDas Modell hat die Generierung abgeschlossen, aber keine verwendbare Datei zurückgegeben, oder das Ergebnis konnte nicht heruntergeladen und gespeichert werden.Retry.Ja
model_unavailablemodel_unavailableDas Modell oder dieser Modus wurde während der Generierung nicht mehr angeboten.Wählen Sie ein anderes Modell oder versuchen Sie es später erneut.Nein – erst ändern
canceledupstream_errorDas Modell hat den Auftrag vor Abschluss abgebrochen oder auslaufen lassen. (Eine von Ihnen selbst abgebrochene Generierung hat den Status canceled und keinen Fehler.)Retry.Ja
generation_failedgeneration_failedDas Modell hat die Generierung ohne Ergebnis und ohne Angabe eines Grundes abgebrochen.Versuchen Sie es einmal erneut. Schlägt es wieder fehl, vereinfachen Sie den Prompt oder die Eingaben oder probieren Sie ein anderes Modell.Ja

Durch Ihre Anfrage verursachte Fehler – content_blocked, eine abgelehnte Datei unter invalid_input, input_unreachable – werden nicht über andere Anbieter erneut versucht, da sie wieder abgelehnt würden. Bei Ausfällen und Modellfehlern wird zuerst über alle geeigneten Routen zum selben Preis erneut versucht. Siehe Fehler und Erstattungen.

Wenn ein Anbieter meldet, dass er eine Ihrer Eingabedateien nicht herunterladen kann, versuchen wir normalerweise, sie selbst herunterzuladen. Wenn das klappt, wird der Auftrag mit einer von uns gehosteten Kopie erneut gestartet — zum selben Preis, ohne dass Sie etwas ändern müssen. In der Generierung werden weiterhin die von Ihnen gesendeten URLs angezeigt, und die Kopie wird zusammen mit der Generierung gemäß ihrer Aufbewahrungsfrist gelöscht. input_unreachable bedeutet daher meist, dass die Datei gar nicht heruntergeladen werden konnte: Es ist eine Anmeldung erforderlich, der signierte Link ist abgelaufen, er verweist nicht direkt auf die Datei oder der Host hat die Anfrage abgelehnt. Wir kopieren Bilder bis zu 30 MB, Videos bis zu 200 MB und Audiodateien bis zu 50 MB. Größere oder nicht lesbare Dateien schlagen mit invalid_input fehl.

Sicher erneut versuchen#

Versuchen Sie 429, 500, 502 und 503 mit exponentiellem Backoff und Zufallsstreuung erneut. Andere 4xx-Fehler nicht unverändert wiederholen – sie würden auf dieselbe Weise scheitern.

Absenden ist nicht idempotent

Jedes erfolgreiche POST /run/{endpoint} erstellt und berechnet eine neue Generierung. Wenn beim Absenden ein Netzwerk-Timeout auftritt und unklar ist, ob der Auftrag angenommen wurde, prüfen Sie Ihre letzten Generierungen, bevor Sie ihn erneut senden.

const RETRYABLE = new Set([429, 500, 502, 503]);

export async function postWithRetry(url, headers, body, attempts = 5) {
  let resp;
  for (let attempt = 0; attempt < attempts; attempt++) {
    resp = await fetch(url, { method: "POST", headers, body: JSON.stringify(body) });
    if (!RETRYABLE.has(resp.status)) break;
    // exponential backoff with jitter: ~1s, 2s, 4s, 8s…
    await new Promise((r) => setTimeout(r, Math.min(2 ** attempt, 30) * 1000 + Math.random() * 1000));
  }
  const data = await resp.json();
  if (!resp.ok) throw new Error(`${resp.status} ${data.error.code}: ${data.error.message}`);
  return data;
}

Beispiele für Validierungen#

Validierungsmeldungen nennen das Feld und die zulässigen Werte. Sie können Entwicklern daher unverändert angezeigt werden:

[
  {
    "error": {
      "code": "invalid_request",
      "message": "\"prompt\" is required",
      "param": "prompt"
    }
  },
  {
    "error": {
      "code": "invalid_request",
      "message": "Unknown parameter \"resoluton\"",
      "param": "resoluton"
    }
  },
  {
    "error": {
      "code": "not_found",
      "message": "Unknown endpoint \"bytedance/seedance-2.0-fast/text-to-gif\". See GET /api/v1/models."
    }
  }
]

Sie können eine Anfrage auch bepreisen, ohne sie auszuführen: POST /api/v1/quote/{endpoint} prüft die preisrelevanten Felder und gibt die Kosten zurück. Siehe API-Referenz.

Ist etwas unklar oder fehlt etwas? Schreiben Sie an support@cheapergen.com – wir lesen jede Nachricht.