ブログ · · 約 10 分で
Webhook の応答コードの意味:受ける側が返す値と送る側の扱い
Webhook を
要点
- 受け取れたら
2xx、 署名が 不正なら 400 か 401、 後で 送り直してほしい ときは 5xx を 返します。 200 と 204 に 扱いの 違いは ありません。 - 主要な
送る 側は 2xx だけを 成功とし、 3xx の リダイレクトは 追わずに 失敗と して 扱います。 - 410 で
送信先を 止めるか、 429 で 送る 速さを 落とすかは 送る 側ごとに 違うので、 相手の 仕様を 確かめてから 使います。
Webhook を
受ける側が返すコード
| 状況 | 返すコード | 送る |
|---|---|---|
| 受け取って |
200 か |
成功。 |
| 同じ |
200 か |
成功。 |
| 署名が |
400 か |
失敗。 |
| 知らない |
200 か |
成功。 |
| データベースが |
500・503 | 失敗。 |
| 処理が |
失敗。 |
|
| もう |
410 | 送る |
表の
- 重複には
2xx を 。返します 4xx を 返すと、 送る 側は 失敗と して 再送を 続けます。 - 知らない
イベントの 。種類にも 2xx を 返します 送る 側が 新しい 種類を 追加した ときに、 受ける 側が 失敗を 返し続ける ことに なるからです。 - 署名が
合わない 。ときの 4xx も、 多くの 送る 側は 再送します 鍵を 直せば 次の 再送で 通るので、 署名の 失敗を 「永久の 失敗」 と 考える 必要は ありません。
200 と 204 の違い
扱いの200 が2xx と
応答の
主要な送る側の扱い
2026-09-27 に
| 送る |
成功 | 3xx | 2xx 以外の |
タイムアウト |
|---|---|---|---|---|
| Stripe | 2xx | 失敗 | 本番は |
記載なし |
| Shopify | 200 番台 | 記載なし | 4 時間で |
5 秒 |
| GitHub | 2XX | 2XX 以外と |
自動の |
10 秒 |
| Slack |
2xx | 3 回以上の |
すぐx-slack-no-retry: 1 で |
3 秒 |
| LINE | 200 番台 | 記載なし | 再送は |
2 秒でrequest_timeout |
| Standard Webhooks |
2xx | 失敗。 |
410 は |
記載なし |
出典: Stripe、
表から
- Slack は、
失敗の 。多い アプリの イベントの 配信を 止めます 60 分間の 配信の 95% 以上が 失敗の 条件 (証明書の 検証の 失敗、 3 秒を 超える 応答、 3 回以上の リダイレクト、 2xx 以外の 応答) に 当たると、 イベントの 購読が 無効に なります。 - Slack だけが
「再送しないで」 。を 受ける 側から 伝えられます 2xx 以外の 応答に x-slack-no-retry: 1を付けると 再送されません。 - Shopify は
購読 。その ものを 消します Admin API で 作った 購読は、 8 回続けて 失敗すると 自動で 削除されます。 - LINE は
タイムアウトが 。短い エラーの 統計で、 2 秒以内に 応答が なかった ものを request_timeoutに分類しています。 LINE は、 タイムアウトの 場合でも ボットの サーバー側では 受け取れている ことが あると 注意しています。
5xx と 4xx の使い分け
送る
- 4xx: 要求
その ものに 問題が ある (署名が 合わない、 本文が 壊れている) 。 送り直しても 同じ 結果に なる 見込みが 高い。 - 5xx: 受ける
側の 都合で 処理できなかった (データベースの 障害、 依存先の 停止) 。 時間を 置けば 通る 見込みが ある。
署名の
429 と Retry-After
受けるRetry-After をRetry-After に
リダイレクトと Google Apps Script の 302
送る
Google Apps Scriptscript.googleusercontent.com のdoPost が
GitHub から
送る側として決めること
自社が
- 成功と
みなすコード (2xx だけに するのが 一般的) - リダイレクトを
追うか (追わないのが 一般的) - 410 で
送信先を 止めるか、 他の 失敗と 同じく 再送するか - 429 と
Retry-Afterに従うか
再送の
Webhook Admin の扱い
Webhook Admin は
- 2xx だけを
成功とします。 - リダイレクトは
追わず、 3xx は 失敗と して 再送します。 - 410 も
失敗と して 再送します。 410 を 受けても 送信先は 自動では 止めず、 失敗が 5 日続いた ときに 止めます。 - 429 も
他の 失敗と 同じ 再送の 予定 (すぐ ・5 秒・5 分・30 分・2 時間・5 時間・10 時間・10 時間) で 送り直します。 Retry-Afterは見ません。 代わりに、 同じ 送信先に 同時に 送る 数を 10 本までにし、 5 回続けて 失敗したら 30 秒送らずに 様子を 見ます。 - タイムアウトは
15 秒です。 応答の 本文の 先頭 1,024 バイトを 配信の 記録に 残します。
API の
よくある質問
200 と 204 はどちらを返せばよいですか。
どちらでも
410 を返すと送信は止まりますか。
送る
Google Apps Script で受けると 302 になるのはなぜですか。
Apps Script の