フォーム ID

エラー

Ikiform が返すすべてのエラーコードと、その HTTP ステータス、原因、対処。

フォームの送信と REST API は、同じエラーの形式を共有します。JSON のリクエストには対応する HTTP ステータスでこの形式が返り、ブラウザーからのフォーム送信には、同じメッセージとステータスでホストされたエラーページが表示されます。

エラーの形式

エラー
{
  "ok": false,
  "error": {
    "code": "rate_limited",
    "message": "Too many requests. Please slow down."
  },
  "request_id": "req_01k7v2c9t3e8m5q4x6z0a1b2c3"
}
  • error.code は安定しているので、分岐にはこれを使ってください。error.message は人が読むための平易な英語で、変わることがあります。
  • error.fields はバリデーションエラーのときに含まれ、フィールド ID をキーに、それぞれメッセージの一覧を持ちます。ボディ全体に関するエラーはキー _form を使います。
  • error.challenge_url は challenge_required のときに含まれます。
  • request_id は、すべてのレスポンスに付く X-Request-Id ヘッダーと一致します。
  • レート制限のレスポンスには、秒数を示す Retry-After が付きます。どちらのヘッダーもブラウザーのコードから読み取れます。

コード

ステータスコード発生する場所
400invalid_body送信
400invalid_requestAPI
401unauthorizedAPI
402plan_required送信
403forbidden両方
403origin_not_allowed送信
403form_paused送信
403captcha_failed送信
403challenge_required送信
404not_found両方
405method_not_allowedAPI
409idempotency_in_progress送信
413payload_too_large送信
415unsupported_media_type送信
415unsupported_charset送信
422validation_failed送信
422files_not_supported送信
422too_deep送信
422idempotency_mismatch送信
429rate_limited両方
429quota_exceeded送信
500server_error両方

400 invalid_body

メッセージThe request body could not be read.
原因JSON や multipart の形式が不正、オブジェクトではなく JSON の配列や文字列を送った、または冪等キーが 255 文字を超えている。
対処JSON のオブジェクトを 1 つ送るか、ブラウザーや FormData にボディを組み立てさせてください。

400 invalid_request

メッセージThe request is invalid.
原因limit、status、form_id、cursor のいずれかが無効です。メッセージにそのパラメーター名が入ります。
対処limit は 1〜100、status は received か spam、実在する frm_ の ID を使い、カーソルは返されたとおりに使ってください。

401 unauthorized

メッセージA valid API key is required.
原因Authorization ヘッダーがない、Bearer トークンではない、またはキーが存在しない、無効化された、期限切れ。
対処有効なシークレットキーで Authorization: Bearer ik_sk_... を送ってください。

402 plan_required

メッセージThis form isn't accepting submissions right now.
原因ワークスペースに有効なプランがありません。これはお支払いの仕組みが有効になって初めて起こりえます。
対処ダッシュボードの Settings でプランを選んでください。

403 forbidden

メッセージYou do not have access to this resource.
原因API キーの形式が不正、別のワークスペースのもの、REST API で公開可能キーを使っている、または必要なスコープがない。
対処このワークスペースの、メッセージに示されたスコープを持つシークレットキーを使ってください。

403 origin_not_allowed

メッセージThis form does not accept submissions from this site.
原因フォームの許可ドメイン外のサイトから送信され、フォームが不一致を拒否する設定になっている。または、キーに登録されていないドメインから公開可能キーが使われた。
対処サイトを Allowed domains(許可ドメイン)かキーのドメインに追加してください。サーバーからの送信には、シークレットキーを使ってください。

403 form_paused

メッセージThis form is not accepting submissions right now.
原因ダッシュボードでフォームが一時停止されている。
対処フォームを再開してください。

403 captcha_failed

メッセージThe captcha check failed. Please try again.
原因Turnstile のトークンがない、期限切れ、使用済み、または検証に失敗した。
対処送信ごとに新しいトークンを取得してください。独自のキーを使う場合は、サイトキーがシークレットと対応しているか確認してください。

403 challenge_required

メッセージComplete the human check, then send the form again.
原因フォームが Ikiform の人間確認を使っていて、トークンのない JSON の送信が届いた。
対処SDK の challenge(formId) を呼び出してトークンを渡すか、error.challenge_url を使ってください。サーバーからの送信なら、代わりにシークレットキーを送れます。

404 not_found

メッセージNot found.
原因フォームが存在しない、削除または無効化された、または ID やルートが間違っている。/f/<formId> への GET でも返されます。
対処フォームの概要からエンドポイントをコピーし、タブで開くのではなく POST してください。

405 method_not_allowed

メッセージThis method is not allowed here.
原因サーバー間専用の REST API に対する、ブラウザーのプリフライト。
対処/api/v1 はバックエンドから呼び出してください。

409 idempotency_in_progress

メッセージA request with this idempotency key is still being processed.
原因この冪等キーのリクエストがまだ処理中です。
対処少し待ってから同じキーでリトライしてください。最初の応答が返ります。

413 payload_too_large

メッセージThe submission is too large.
原因ボディ、フィールド名、値、フィールドの数のいずれかが上限を超えている。どれかはメッセージに示されます。
対処制限を参照してください。長いテキストは複数のフィールドに分けるか、ファイルは別の場所に保存してリンクを送ってください。

415 unsupported_media_type

メッセージSend the form as urlencoded, multipart or JSON.
原因Content-Type が urlencoded、multipart、JSON のいずれでもない、または指定されていない。
対処JSON を送るときは Content-Type: application/json を設定してください。

415 unsupported_charset

メッセージOnly UTF-8 is supported.
原因ボディが UTF-8 ではない、または別の文字コードを宣言している。
対処UTF-8 でエンコードしてください。古い HTML フォームには accept-charset="utf-8" を追加してください。

422 validation_failed

メッセージSome fields are invalid.
原因フィールドがバリデーションに失敗した。error.fields はフィールド ID をメッセージに対応づけます。
対処メッセージをフィールドの横に表示してください。フィールドを参照してください。

422 files_not_supported

メッセージFile uploads are not supported yet.
原因送信にファイルが含まれている。ファイルのアップロードはまだ実装されていません。
対処ファイルの入力欄を削除するか、ファイルは別の場所にアップロードしてリンクを送信してください。

422 too_deep

メッセージThe JSON body is nested too deeply.
原因JSON のボディが、トップレベルのオブジェクトを含めて 3 階層を超えてネストしている。
対処{ "address_city": "London" } のように、データを平らにしてください。

422 idempotency_mismatch

メッセージThis idempotency key was already used with a different payload.
原因この冪等キーは、直近 24 時間以内にこのフォームで、異なるフィールドとともにすでに使われている。
対処新しいデータには新しいキーを使ってください。同じキーは完全に同じリトライにだけ使ってください。

429 rate_limited

メッセージToo many requests. Please slow down.
原因レート制限を超えた。Retry-After に待つべき秒数が示されます。
対処待ってからリトライしてください。本物の訪問者が制限に達する場合は、フォームのレート制限を変更してください。

429 quota_exceeded

メッセージThis form isn't accepting submissions right now.
原因ワークスペースが今月、月間の送信数の上限の 2 倍を受信した。
対処アップグレードするか、翌月まで待ってください。月間の使用量を参照してください。

500 server_error

メッセージSomething went wrong on our side.
原因Ikiform 側で問題が発生した。
対処バックオフと冪等キーを使ってリトライしてください。問題が続く場合は、request_id を伝えてください。

エラーにならないもの

  • スパムにも、本物の送信と同じ 201 またはリダイレクトが返ります。ダッシュボードのスパムフィルターの下で確認してください。
  • 許可されていない _redirect は無視され、ブラウザーはホストされたサンクスページに移動します。
  • 有効なメールアドレス 1 つではない _replyto は無視されます。

リトライ

  • 429 は Retry-After の後に、500、409、ネットワークエラーはバックオフを付けてリトライしてください。冪等キーを送れば、リトライで重複が作られることはありません。
  • その他の 4xx エラーは、そのままリトライしないでください。先にリクエストを直してください。