テスト用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=3

JavaScript

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_intentsPaymentIntent一覧。
GET/api/stripe/payment_intents/:idPaymentIntentを1件取得。
POST/api/stripe/payment_intentsPaymentIntentを作成。
POST/api/stripe/payment_intents/:id/confirmPaymentIntentを確定。?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/triggerStripe形式の署名付きイベントを指定の target_url に送信します。IPあたり毎分10回まで。

すべてのパスでStripeと同じカーソルパラメータ(limit、starting_after、ending_before)に対応しています。

Webhookシミュレーション

自分が管理する公開HTTPSのURLに、署名付きStripe形式イベントを送信できます。webhook.siteRequestBin と組み合わせれば、すぐに受信箱を用意できます。

# 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_declined402 — card_error / generic_decline
?simulate=insufficient_funds402 — card_error / insufficient_funds
?simulate=rate_limited429 — rate_limit_error
?simulate=timeout504 — 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を立ててください。

Stripe互換の無料モックAPI — テストとプロトタイピングのために | MockApiHub