テスト用Stripe互換モックAPI(無料)
Stripeのレスポンス形状に揃えたモックエンドポイント。連携テスト、チェックアウトUIの試作、Webhookハンドラの検証を、本物のStripeキーに触れずに行えます。
概要
StripeのパブリックREST APIと同じ形状のJSONを返すHTTP APIです。フィールド名、IDプレフィックス(cus_、ch_、pi_、sub_、in_)、カーソルページネーション、整数の通貨最小単位、Unixタイムスタンプ、Stripe形式のエラーエンベロープまで揃えています。読み取りは決定的(deterministic)で、毎回同じデータが返るためスナップショットテストに使えます。書き込みは形状の正しいオブジェクトを返しますが、保存はされません。
ユースケース:消費するJSONの形状を実際に叩いて確認する、Webhookの署名検証をend-to-endでテストする、実Stripeのテストカードでは出しづらい失敗パターン(card_declined / rate_limited / timeout)をシミュレートする、Stripeアカウントを開設する前にフローをデモするなど。
クイックスタート
最初の3件のchargeを取得してみてください。認証は不要です。
curl
curl https://mockapihub.com/api/stripe/charges?limit=3JavaScript
const res = await fetch(
"https://mockapihub.com/api/stripe/charges?limit=3"
);
const { data, has_more } = await res.json();
console.log(data[0].id); // -> "ch_..."Python
import requests
res = requests.get(
"https://mockapihub.com/api/stripe/charges",
params={"limit": 3},
)
data = res.json()["data"]
print(data[0]["id"]) # -> "ch_..."利用可能なエンドポイント
| メソッド | パス | 説明 |
|---|---|---|
| GET | /api/stripe/customers | 顧客一覧(カーソルページネーション)。 |
| GET | /api/stripe/customers/:id | 顧客を1件取得。 |
| POST | /api/stripe/customers | 顧客を作成(永続化されません)。 |
| GET | /api/stripe/charges | 課金一覧。 |
| GET | /api/stripe/charges/:id | 課金を1件取得。 |
| POST | /api/stripe/charges | 課金を作成(永続化されません)。 |
| GET | /api/stripe/payment_intents | PaymentIntent一覧。 |
| GET | /api/stripe/payment_intents/:id | PaymentIntentを1件取得。 |
| POST | /api/stripe/payment_intents | PaymentIntentを作成。 |
| POST | /api/stripe/payment_intents/:id/confirm | PaymentIntentを確定。?simulate=requires_action で3DS風のレスポンスを返します。 |
| GET | /api/stripe/subscriptions | サブスクリプション一覧。 |
| GET | /api/stripe/subscriptions/:id | サブスクリプションを1件取得。 |
| GET | /api/stripe/invoices | 請求書一覧。 |
| GET | /api/stripe/invoices/:id | 請求書を1件取得。 |
| POST | /api/stripe/webhooks/trigger | Stripe形式の署名付きイベントを指定の target_url に送信します。IPあたり毎分10回まで。 |
すべてのパスでStripeと同じカーソルパラメータ(limit、starting_after、ending_before)に対応しています。
Webhookシミュレーション
自分が管理する公開HTTPSのURLに、署名付きStripe形式イベントを送信できます。webhook.site や RequestBin と組み合わせれば、すぐに受信箱を用意できます。
# 1. Grab a free inbox URL (no signup):
# https://webhook.site/ → copy the unique URL
# 2. Tell us to send a Stripe-shaped event there:
curl -X POST https://mockapihub.com/api/stripe/webhooks/trigger \
-H 'Content-Type: application/json' \
-d '{
"event_type": "charge.succeeded",
"target_url": "https://webhook.site/<your-uuid>"
}'
# 3. Refresh webhook.site — the signed event has arrived.
# The Stripe-Signature header verifies against the secret below.公開テストシークレット(HMAC検証用):
whsec_mockapihub_demo_DO_NOT_USE_IN_PROD_5f3aBpQrS9zX1Y2Z
アルゴリズム:HMAC-SHA256(secret, "${t}.${payload}")、ヘッダ形式は t=<unix>,v1=<hex>。Stripe公式ライブラリの検証関数がそのまま通ります。
制限:トリガー呼び出しはIPあたり毎分10回、1回あたり最大5イベントまで。target_url は公開HTTPSのみ許可。プライベート/内部アドレスはリクエスト時点とDNS解決後の二段階で拒否します。
対応イベントタイプ: charge.succeeded, charge.failed, customer.created, payment_intent.succeeded, payment_intent.payment_failed, invoice.paid, customer.subscription.created, customer.subscription.deleted
失敗シミュレーション
カオスクエリパラメータは /api/stripe/* のすべてのエンドポイントで使えます。特殊なStripeテストカードやテストクロックを用意せずに、自分のコードのエラー処理パスを実行できます。
| クエリパラメータ | 効果 |
|---|---|
| ?simulate=card_declined | 402 — card_error / generic_decline |
| ?simulate=insufficient_funds | 402 — card_error / insufficient_funds |
| ?simulate=rate_limited | 429 — rate_limit_error |
| ?simulate=timeout | 504 — 5秒待機後に api_error を返します。 |
| ?delay=1500 | 応答前に N ミリ秒スリープ(0〜10000にクランプ)。 |
| ?fail_rate=0.3 | リクエストの30%が500 api_error になります。 |
例: curl https://mockapihub.com/api/stripe/charges?simulate=card_declined は code: card_declined を含むStripe形式の402を返します。
実Stripe APIとの違い
- 永続化されません。 読み取りは決定的(同じデータが返る)。書き込みは形状の正しいレスポンスを返しますが、その後のGETでは見つかりません。
- 実認証はありません。 全エンドポイントは公開です。sk_test_* キー、Bearerトークン、idempotency-keyの検証などは行いません。
- 実際の決済は発生しません。 課金が「成功」するのは私たちがそう言うからで、カード決済処理には到達しません。
- 対応リソースは限定的です。 customers / charges / payment_intents / subscriptions / invoices と Webhookのみが対象です。
- レスポンス形状は実Stripeから乖離する可能性があります。 Stripeは新フィールドを継続的に追加しているため、すべてのマイナーバージョンに完全追随はできません。最終確認日:2026-05-13。
よくあるユースケース
- Stripeアカウントなしで、Webhookの署名検証をテストする。
- Stripe SDKを採用する前、またはアカウント審査待ちの間に、チェックアウトUIを試作する。
- card_declined / rate_limited / タイムアウト などの失敗パスを、テストカードのやりくりなしで実行する。
- Stripe形式のJSONを扱うコードの、決定的なCIフィクスチャとして使う。
- デモ環境 — セールスエンジニアがキー・ダッシュボード・ライブアカウントなしでStripe連携をデモする。
よくある質問
Stripe公式SDKをこのモックAPIに向けられますか?
直接は向けられません。公式SDKは api.stripe.com にハードコードされています。fetch / axios / requests / curl などの汎用HTTPクライアントから https://mockapihub.com/api/stripe/<resource> を呼び出して、コードが消費する形状を検証してください。エンドツーエンドのSDKテストにはStripe公式のテストモードキーを使ってください。
データはリクエスト間で永続化されますか?
いいえ。GETは毎回同じ決定的なデータを返します。POSTはStripe形式のレスポンスを新しいIDで返しますが、保存はされません。そのIDを後からGETすると404になります。これがモックの契約です。テストが永続化に依存しないようにしてください。
トリガーされたWebhookの Stripe-Signature ヘッダはどう生成されますか?
HMAC-SHA256 を `${timestamp}.${json_payload}` に対して計算し、t=<unix>,v1=<hex> の形式にします。Stripeのアルゴリズムと同一なので、Node の stripe.webhooks.constructEvent() や Python の stripe.Webhook.construct_event() が、下記の公開テストシークレットを使ってそのまま検証できます。
なぜAPIキーやサインアップがないのですか?
無料の公開テストサービスだからです。アカウントもキーもなく、読み取りにはレート制限もありません。唯一の制限はWebhookトリガーエンドポイント(IPあたり毎分10回)で、外向きHTTPS POSTの悪用を防ぐためです。
作成されたオブジェクトにカスタムフィールドを足せますか?
POSTで送ったフィールドはレスポンスでそのまま返るので、シリアライズ/デシリアライズ経路をエンドツーエンドでテストできます。ただし保存はされません。次のGETでは元の決定的なデータが返ります。リクエスト形状のテストには有効ですが、状態ストアではありません。
モック対象外のエンドポイントについては?
現時点では customers / charges / payment_intents / subscriptions / invoices と Webhookトリガーを提供しています。Radar / Terminal / Identity / Issuing / Connect はまだ未対応です。必要であれば github.com/nepalibidur14/freeapi にIssueを立ててください。