Zum Hauptinhalt springen

invalid_request

HTTP 400 · code: "invalid_request" · type: https://docs.formfeed.dev/errors/invalid-request

Die Anfrage ließ sich so nicht annehmen: Der Body ist kein JSON, ein Feld hat den falschen Typ oder Wert, oder Felder sind auf eine Weise kombiniert, die die API nicht erlaubt. Passen Body oder Query nicht zum Vertrag, führt issues jedes Problem auf, jeweils mit dem Feld (path) und dem Fehler (message). Bei einer Kombination von Feldern erklärt detail sie, und field nennt das Feld.

Beispiel​

{
"type": "https://docs.formfeed.dev/errors/invalid-request",
"title": "Invalid request",
"status": 400,
"detail": "The request body is invalid",
"code": "invalid_request",
"issues": [
{
"path": "mode",
"message": "Invalid option: expected one of \"sync\"|\"async\""
}
],
"request_id": "req_4b7c1e9a2f3d4c5b8a6e7f9012"
}

In einem Batch nennt detail das Element (Item 3 is invalid), und index ist seine Position, ab 0 gezählt. Vom Batch wird nichts eingereiht.

Häufige Ursachen​

  • Der Body ist kein JSON-Objekt, etwa weil er leer oder abgeschnitten ist. issues hat dann einen Eintrag mit leerem path.
  • Ein Rendering nennt keine Quelle oder mehr als eine: Senden Sie genau eines von template, html oder url.
  • Ein Wert außerhalb seiner erlaubten Werte, etwa "mode": "later" oder "output": "gif", oder ein Feld mit falschem Typ.
  • Ein Ausgabeformat, das die Quelle nicht erzeugen kann: PDF- und Bildvorlagen, html und url erzeugen pdf, png, jpg oder webp; eine Word-Vorlage docx oder pdf; eine PowerPoint-Vorlage pptx oder pdf (field: "output", mit den erlaubten Werten in allowed).
  • version ist weder published, ein Channel-Name, latest noch eine Versionsnummer, oder es ist latest mit einem Live-Schlüssel. Nur ein Test-Schlüssel rendert den neuesten Entwurf.
  • Eine url oder webhook_url, die die festen Adressregeln ablehnen: keine gültige URL, ein anderes Schema als https (eine url darf auch http sein), ein Benutzername oder Passwort in der URL, oder ein Host, der privat, Loopback, Link-Local, eine Metadaten-Adresse einer Cloud, localhost, eine numerische Kurzform wie 2130706433 oder ein Name unter .internal, .local, .localhost oder .fly.dev ist. Die message beginnt mit URL rejected:. Ein Name, der erst bei der Auflösung auf eine private Adresse zeigt, wird später abgelehnt, mit navigation_failed.
  • webhook_secret ohne webhook_url, oder kürzer als 16 Zeichen.
  • validate_data: true für html oder eine url, oder für eine Vorlagenversion ohne gespeichertes Datenschema (field: "validate_data"). Siehe Die Daten zuerst prüfen.
  • post (Zusammenführen, Wasserzeichen, Passwort) bei einer anderen Ausgabe als PDF, ein Wasserzeichen mit text und image zugleich oder mit keinem von beiden, oder Quellen in merge_after, die in einer anderen Region gespeichert sind als das Rendering.
  • Eine E-Rechnung für ein Bild, oder zusammen mit einem Passwort (field: "post.password"): PDF/A verbietet Verschlüsselung.
  • pdf.ua mit einem anderen Wert als true, false oder { "check": "strict" | "report" }, für ein Bild, für eine Word- oder PowerPoint-Vorlage, oder zusammen mit post.merge_after.
  • Ein Query-Parameter außerhalb seines Bereichs, etwa limit=500 bei GET /v1/renders (1 bis 100).
  • Eine Vorlage, deren geteilte Partials in einem Rendering zusammen mehr als 2 MB ergeben (partials, bytes, limit).
  • Der Name eines geteilten Partials besteht nicht aus 1 bis 64 Kleinbuchstaben, Ziffern, Bindestrichen und Unterstrichen, die mit einem Buchstaben oder einer Ziffer beginnen und enden, oder ein neues geteiltes Partial, wenn die Organisation schon 200 hat (feature: "partials").
  • Ein Upload, der leer ist, keinen Teil file hat oder keinen Typ, den die Dateibibliothek annimmt.
  • Ein Wasserzeichentext mit Zeichen, die die Schrift des Wasserzeichens nicht darstellen kann. Sie deckt Lateinisch, Griechisch und Kyrillisch ab.

Die meisten davon werden beantwortet, bevor etwas aufgezeichnet wird. Den letzten und einige andere findet erst der Render-Dienst, nachdem das Rendering aufgezeichnet wurde: Dann trägt das Problem render_id, und das Render-Protokoll zeigt ein fehlgeschlagenes Rendering, das nichts gekostet hat.

So beheben Sie es​

  • Lesen Sie detail und das Array issues: Jeder Eintrag nennt das Feld (path) und was daran falsch ist. In einem Batch sagt index, welches Element.
  • Vergleichen Sie die Anfrage mit der API-Referenz. Die SDKs typisieren jedes Feld, sodass die meisten dieser Fehler gar nicht erst kompilieren.

Wiederholen?​

Nein. Dieselbe Anfrage erhält dieselbe Antwort. Beheben Sie, was das Problem nennt, und senden Sie die Anfrage dann mit einem neuen Idempotency-Key oder ohne: Eine 4xx-Antwort wird 24 Stunden unter ihrem Schlüssel gespeichert, der alte Schlüssel liefert also wieder dieses Problem. Siehe Wiederholen.