ブログ · · 約 8 分で
Stripe の Webhook の仕様:再送・順番・重複・タイムアウト・IP
Stripe の
要点
- Stripe は
本番で 最長 3 日間、 指数バックオフで Webhook を 再送します。 サンドボックスでは 数時間の うちに 3 回です。 - 順番は
保証されず、 同じ イベントが 複数回届く ことがあります。 受け側は イベントの ID で 重複を 弾き、 必要なら API で 最新の 状態を 取り直します。 - 再送の
間隔の 分数と、 タイムアウトの 秒数は、 公式の ドキュメントに 記載が ありません (2026-09-27 時点) 。
Stripe は、
Stripe の
仕様の一覧
| 項目 | 仕様 | 出典 |
|---|---|---|
| 自動の |
指数バックオフで |
Webhook |
| 自動の |
数時間の |
同上 |
| 各回の |
記載なし |
同上 |
| 再送中に |
その |
同上 |
| 手動の |
ダッシュボードはstripe events resend) |
同上 |
| 手動の |
手動の |
同上 |
| 未配信の |
List Events にdelivery_success=false。 |
未配信の |
| 順番 | 生成された |
Webhook |
| 重複 | 同じ |
同上 |
| タイムアウト | 秒数の |
同上 |
| 成功の |
2xx。 |
同上 |
| TLS | TLS 1.2 と |
同上 |
| 署名 | Stripe-Signaturet= とv1=) |
同上 |
| 送信元 IP | 公開のips_webhooks.json・.txt) |
IP アドレス |
| 失敗の |
本番で |
サブスクリプションと |
| 送信先の |
最大 16 個 | Webhook |
第三者の
再送の仕組みで気をつけること
手動の処理の後も続く自動の再送
受け側の
// Express。本文は express.raw で受け取り、署名を検証してから使う
app.post('/webhooks/stripe', express.raw({ type: 'application/json' }), async (req, res) => {
let event: Stripe.Event;
try {
event = stripe.webhooks.constructEvent(req.body, req.header('stripe-signature')!, endpointSecret);
} catch {
return res.status(400).end();
}
// 同じイベント ID を 2 回目以降は処理しない(一意制約で弾く)
const inserted = await db.query(
'INSERT INTO stripe_events (id, status) VALUES ($1, $2) ON CONFLICT (id) DO NOTHING',
[event.id, 'processing'],
);
if (inserted.rowCount === 0) return res.status(200).end(); // 処理中か処理済み
await queue.add('stripe-event', { id: event.id }); // 重い処理はキューの先で
res.status(200).end();
});再送の途中の送信先の停止と取りこぼし
送信先をdelivery_success=false)
サンドボックスと本番の再送の違い
サンドボックスの
順番と重複への備え
Stripe は、customer.subscription.created・invoice.created・invoice.paid・charge.created のようにcreated はcreated を
受け側の
- イベント ID で
重複を 。弾く 処理した イベントの ID を 一意 制約つきの 表に 記録し、 入らなければ 処理しません。 - 状態は
API で 。取り直す invoice.paidを最初に 受け取った 場合でも、 その 中の ID で invoice・charge・subscription を API から 取得すれば、 先に 来るはずだった イベントに 頼らずに 済みます。 - 2 つの
別の 。イベントが 同じ出来事を 表す 場合が ある Stripe は、 2 つの Event オブジェクトが 別々に 生成される 場合が あり、 その 重複は data.objectのオブジェクト ID と event.typeで見分けるよう 書いています。
重複の
重い処理の前の 2xx の応答
Stripe は、
送信元 IP で絞る場合
Stripe はhttps://stripe.com/files/ips/ips_webhooks.json と.txt でも
自社が送る側になるとき
Stripe の
Webhook Admin は、
自社の
よくある質問
Stripe の Webhook の再送を止めるにはどうすればよいですか。
送信先が
再送の間隔は何分ですか。
公式の
サンドボックスの再送は本番と同じですか。
違います。