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.
issueshat dann einen Eintrag mit leerempath. - Ein Rendering nennt keine Quelle oder mehr als eine: Senden Sie genau eines von
template,htmloderurl. - 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,
htmlundurlerzeugenpdf,png,jpgoderwebp; eine Word-Vorlagedocxoderpdf; eine PowerPoint-Vorlagepptxoderpdf(field: "output", mit den erlaubten Werten inallowed). versionist wederpublished, ein Channel-Name,latestnoch eine Versionsnummer, oder es istlatestmit einem Live-Schlüssel. Nur ein Test-Schlüssel rendert den neuesten Entwurf.- Eine
urloderwebhook_url, die die festen Adressregeln ablehnen: keine gültige URL, ein anderes Schema alshttps(eineurldarf auchhttpsein), ein Benutzername oder Passwort in der URL, oder ein Host, der privat, Loopback, Link-Local, eine Metadaten-Adresse einer Cloud,localhost, eine numerische Kurzform wie2130706433oder ein Name unter.internal,.local,.localhostoder.fly.devist. Diemessagebeginnt mitURL rejected:. Ein Name, der erst bei der Auflösung auf eine private Adresse zeigt, wird später abgelehnt, mitnavigation_failed. webhook_secretohnewebhook_url, oder kürzer als 16 Zeichen.validate_data: truefürhtmloder eineurl, 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 mittextundimagezugleich oder mit keinem von beiden, oder Quellen inmerge_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.uamit einem anderen Wert alstrue,falseoder{ "check": "strict" | "report" }, für ein Bild, für eine Word- oder PowerPoint-Vorlage, oder zusammen mitpost.merge_after.- Ein Query-Parameter außerhalb seines Bereichs, etwa
limit=500beiGET /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
filehat 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
detailund das Arrayissues: Jeder Eintrag nennt das Feld (path) und was daran falsch ist. In einem Batch sagtindex, 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.