何が起きたのか?
402 は「将来、支払いに関わる仕組みのために確保された席だけれど、まだ正式な使い方は決まっていない」というサインです。 教室で言えば、黒板の隅に「ここはあとで使う予定」と書かれた小さな枠があって、まだ誰も使っていない——そんな静かな予約席のような状態です。
仕様としては HTTP の初期から存在しますが、標準化された使い方は定まっていません。実務では Stripe など一部の決済 API が独自に「カードの与信に失敗した」「サブスクリプション切れ」などのケースで返すことがあります。
黒板からのひとこと
学校でも、教室の片隅に「来年度の新しい部活のために残しておく棚」があったりします。今は何も置かれていないけれど、将来のために空けてある。402 はちょうどそんな空き枠で、いざ Web 上で「お金が絡む」場面が標準として定まったとき、すぐに使えるよう確保された番号です。
ですから 402 を見たときは、まず「どの API が、どの意味で返しているのか」をドキュメントで確認するのが先決になります。標準ではなく、アプリ独自のルールが書かれているはずです。
解決への歩み
大丈夫、次はこうしてみよう:
- API のドキュメントを読む:そのサービスが 402 をどんな意味で使っているか確認する
- 支払い・契約状況を確認:プランが期限切れになっていないか、カードの与信が通っているか
- レスポンスボディの説明を読む:多くは具体的な理由(失敗した請求 ID など)が書かれている
- エラー応答の方針を整理(管理者向け):標準外の利用なら、利用者向けに 402 の意味と対処を明記する
実際にはこう見える
$ リクエスト
curl -i https://example.com/some/path ↓ レスポンス
HTTP/1.1 402 Payment Required
Content-Type: text/html; charset=utf-8
<!DOCTYPE html>
<html><body><h1>402 Payment Required</h1></body></html>