Formular-ID

Fehler

Jeder Fehlercode, den Ikiform zurückgibt, mit HTTP-Status, Ursache und Lösung.

Formular-Einsendungen und die REST-API teilen sich eine Fehlerhülle. JSON-Requests erhalten sie mit dem passenden HTTP-Status; Formular-Posts aus dem Browser erhalten eine gehostete Fehlerseite mit derselben Meldung und demselben Status.

Die Fehlerhülle

Fehler
{
  "ok": false,
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Please slow down."
  },
  "request_id": "req_01k7v2c9t3e8m5q4x6z0a1b2c3"
}
  • error.code ist stabil; verzweige danach. error.message ist einfaches Englisch für Menschen und kann sich ändern.
  • error.fields ist bei Validierungsfehlern vorhanden, nach Feld-ID geschlüsselt, jeweils mit einer Liste von Meldungen. Fehler, die den ganzen Body betreffen, nutzen den Schlüssel _form.
  • error.challenge_url ist bei challenge_required vorhanden.
  • request_id entspricht dem Header X-Request-Id, den jede Antwort trägt.
  • Antworten mit Rate-Limit tragen Retry-After in Sekunden. Beide Header sind aus Browser-Code lesbar.

Codes

StatusCodeWo
400invalid_bodyAbsenden
400invalid_requestAPI
401unauthorizedAPI
402plan_requiredAbsenden
402test_limit_reachedAbsenden
403forbiddenBeide
403origin_not_allowedAbsenden
403form_pausedAbsenden
403captcha_failedAbsenden
403challenge_requiredAbsenden
404not_foundBeide
405method_not_allowedAPI
409idempotency_in_progressAbsenden
413payload_too_largeAbsenden
415unsupported_media_typeAbsenden
415unsupported_charsetAbsenden
422validation_failedAbsenden
422files_not_supportedAbsenden
422too_deepAbsenden
422idempotency_mismatchAbsenden
429rate_limitedBeide
429quota_exceededAbsenden
500server_errorBeide

400 invalid_body

MeldungThe request body could not be read.
UrsacheFehlerhaftes JSON oder Multipart, ein JSON-Array oder -String statt eines Objekts, oder ein Idempotenzschlüssel mit mehr als 255 Zeichen.
LösungSende ein einzelnes JSON-Objekt, oder lass den Browser oder FormData den Body bauen.

400 invalid_request

MeldungThe request is invalid.
Ursachelimit, status, form_id oder cursor ist ungültig. Die Meldung nennt den Parameter.
LösungNutze limit 1 bis 100, status received oder spam, eine echte frm_-ID und Cursor genau so, wie sie zurückgegeben wurden.

401 unauthorized

MeldungA valid API key is required.
UrsacheKein Header Authorization, kein Bearer-Token, oder ein unbekannter, widerrufener oder abgelaufener Schlüssel.
LösungSende Authorization: Bearer ik_sk_... mit einem gültigen Secret Key.

402 plan_required

MeldungThis form isn't accepting submissions right now.
UrsacheDer Workspace hat keinen aktiven Tarif. Posts von einer Live-Site werden gespeichert und 30 Tage lang zurückgehalten, bis zu 100 pro Monat, und die Meldung sagt dann, dass die Einsendung gespeichert wurde. Spam und Posts darüber hinaus werden nicht gespeichert.
LösungWähle einen Tarif oder kauf ein Einsendungspaket unter Settings › Plan and usage. Zurückgehaltene Einsendungen kommen an, sobald eines davon startet. Siehe Testen ohne Tarif.

402 test_limit_reached

MeldungThis workspace used its test submissions for this month. Pick a plan to keep sending.
UrsacheDer Workspace hat keinen Tarif und diesen Monat schon 50 Test-Einsendungen von localhost erhalten.
LösungWähle einen Tarif oder warte auf den nächsten Monat. „Test senden“ im Dashboard funktioniert weiterhin.

403 forbidden

MeldungYou do not have access to this resource.
UrsacheDer API-Schlüssel ist fehlerhaft, gehört zu einem anderen Workspace, ist bei der REST-API ein Publishable Key oder hat nicht den nötigen Scope.
LösungNutze einen Secret Key aus diesem Workspace mit dem Scope, den die Meldung nennt.

403 origin_not_allowed

MeldungThis form does not accept submissions from this site.
UrsacheDer Post kam von einer Site außerhalb der erlaubten Domains des Formulars und das Formular lehnt Abweichungen ab, oder ein Publishable Key wurde von einer Domain verwendet, die nicht beim Schlüssel eingetragen ist.
LösungFüge die Site zu Allowed domains oder zu den Domains des Schlüssels hinzu. Für Posts vom Server nutze einen Secret Key.

403 form_paused

MeldungThis form is not accepting submissions right now.
UrsacheDas Formular ist im Dashboard pausiert.
LösungSetze das Formular fort.

403 captcha_failed

MeldungThe captcha check failed. Please try again.
UrsacheDas Turnstile-Token fehlt, ist abgelaufen, wurde schon verwendet oder konnte nicht verifiziert werden.
LösungHol dir für jedes Absenden ein neues Token. Bei eigenen Schlüsseln prüf, ob der Site Key zum Secret passt.

403 challenge_required

MeldungComplete the human check, then send the form again.
UrsacheDas Formular nutzt die Ikiform-Menschlichkeitsprüfung und ein JSON-Post kam ohne Token an.
LösungRuf challenge(formId) aus dem SDK auf und übergib das Token, oder nutze error.challenge_url. Posts vom Server können stattdessen einen Secret Key senden.

404 not_found

MeldungNot found.
UrsacheDas Formular existiert nicht, wurde gelöscht oder deaktiviert, oder die ID oder Route ist falsch. Wird auch bei einem GET an /f/<formId> zurückgegeben.
LösungKopiere den Endpunkt aus der Übersicht des Formulars und sende per POST, statt ihn in einem Tab zu öffnen.

405 method_not_allowed

MeldungThis method is not allowed here.
UrsacheEin Browser-Preflight an die REST-API, die nur von Server zu Server funktioniert.
LösungRuf /api/v1 aus deinem Backend auf.

409 idempotency_in_progress

MeldungA request with this idempotency key is still being processed.
UrsacheEin Request mit diesem Idempotenzschlüssel wird noch verarbeitet.
LösungWarte einen Moment und versuch es mit demselben Schlüssel erneut; du erhältst die erste Antwort.

413 payload_too_large

MeldungThe submission is too large.
UrsacheDer Body, ein Feldname, ein Wert oder die Anzahl der Felder liegt über dem Limit. Die Meldung sagt, welches.
LösungSiehe Limits. Verteile langen Text auf mehrere Felder oder speichere Dateien woanders und sende einen Link.

415 unsupported_media_type

MeldungSend the form as urlencoded, multipart or JSON.
UrsacheDer Content-Type ist nicht urlencoded, Multipart oder JSON, oder er fehlt.
LösungSetze Content-Type: application/json, wenn du JSON sendest.

415 unsupported_charset

MeldungOnly UTF-8 is supported.
UrsacheDer Body ist nicht UTF-8 oder deklariert einen anderen Zeichensatz.
LösungKodiere als UTF-8. Füge alten HTML-Formularen accept-charset="utf-8" hinzu.

422 validation_failed

MeldungSome fields are invalid.
UrsacheFelder haben die Validierung nicht bestanden. error.fields ordnet Feld-IDs Meldungen zu.
LösungZeig die Meldungen neben den Feldern an. Siehe Felder.

422 files_not_supported

MeldungFile uploads are not supported yet.
UrsacheDer Post enthält eine Datei. Datei-Uploads sind noch nicht gebaut.
LösungEntferne Datei-Inputs, oder lade Dateien woanders hoch und sende den Link.

422 too_deep

MeldungThe JSON body is nested too deeply.
UrsacheDer JSON-Body ist mehr als 3 Ebenen tief verschachtelt, das Objekt auf oberster Ebene mitgezählt.
LösungMach die Daten flach, zum Beispiel { "address_city": "London" }.

422 idempotency_mismatch

MeldungThis idempotency key was already used with a different payload.
UrsacheDieser Idempotenzschlüssel wurde für dieses Formular in den letzten 24 Stunden schon mit anderen Feldern verwendet.
LösungNutze einen neuen Schlüssel für neue Daten. Behalte denselben Schlüssel nur für exakte Wiederholungen.

429 rate_limited

MeldungToo many requests. Please slow down.
UrsacheRate-Limit überschritten. Retry-After gibt an, wie viele Sekunden du warten sollst.
LösungWarte und versuch es erneut. Wenn echte Besucher darauf stoßen, ändere das Rate-Limit des Formulars.

429 quota_exceeded

MeldungThis form isn't accepting submissions right now.
UrsacheDer Workspace hat diesen Monat das Doppelte seines monatlichen Einsendungslimits erhalten.
LösungUpgrade oder warte auf den nächsten Monat. Siehe Monatliche Nutzung.

500 server_error

MeldungSomething went wrong on our side.
UrsacheBei Ikiform ist etwas fehlgeschlagen.
LösungVersuch es mit Backoff und einem Idempotenzschlüssel erneut. Wenn es weiter passiert, gib die request_id an.

Keine Fehler

  • Spam erhält dieselbe 201 oder Weiterleitung wie eine echte Einsendung. Du findest ihn im Dashboard unter dem Spamfilter.
  • Ein nicht erlaubter _redirect wird ignoriert, und der Browser landet auf der gehosteten Danke-Seite.
  • Ein _replyto, das keine einzelne gültige E-Mail-Adresse ist, wird ignoriert.

Erneute Versuche

  • Versuch 429 nach Retry-After erneut, und 500, 409 oder Netzwerkfehler mit Backoff. Sende einen Idempotenzschlüssel, damit ein erneuter Versuch nie ein Duplikat erzeugt.
  • Versuch andere 4xx-Fehler nicht unverändert erneut. Korrigiere zuerst den Request.