チームが本当に使いたくなるAPI
予測可能なREST、冪等性キー、署名付きWebhook、シミュレートされた決済レールを備えたサンドボックス。1フランも動かす前に、エンドツーエンドで連携を完成できます。
最初の決済受付をリクエスト1回で
クリーンなREST、予測可能なJSONエンベロープ、すべてのレスポンスにリクエストID。サンドボックスは本番環境の完全なミラーです: 同じAPI、同じステータス、同じWebhook。
- アプリごとにスコープされたサンドボックスキーと本番キー
- リプレイ保護付きのHMAC署名Webhook
- 資金を動かすすべての呼び出しに冪等性キー
- 修正すべき箇所を正確に伝える型付きエラー
- OpenAPI 仕様、Postman コレクション、llms.txt をすべて公開
- CRM・ERP・ショップ用コネクタ向けのホスト型チェックアウトセッションとフラットなコールバック
curl https://api.capayglobal.com/v1/collections \
-H "Authorization: Bearer sk_test_..." \
-H "Idempotency-Key: 9f1c-collect-01" \
-H "Content-Type: application/json" \
-d '{
"amount": "2500",
"currency": "XAF",
"country": "CM",
"method": "mobile_money",
"msisdn": "2376XXXXXXXX",
"merchant_reference": "order-1042"
}'{
"status": "success",
"data": {
"id": "col_9xKQ2mD41Vb8",
"object": "collection",
"status": "pending",
"amount": "2500",
"currency": "XAF",
"country": "CM",
"method": "mobile_money",
"merchant_reference": "order-1042",
"fees": {
"platform_fee": "50",
"provider_fee": "0",
"total_fee": "50",
"bearer": "merchant"
},
"net_amount": null,
"livemode": false,
"created_at": "2026-08-30T12:04:11Z"
},
"request_id": "req_b0f3d2c1"
}最初の集金
1 回のリクエストで決済インテントを作成し、リクエスト id を返し、モバイルマネーでは支払者の端末に確認を送ります。サンドボックスは本番とまったく同じ挙動です。
curl -X POST https://api.capayglobal.com/v1/collections \
-H "Authorization: Bearer sk_test_XXXXXXXXXXXX" \
-H "Idempotency-Key: col-order-10482-a1b2c3" \
-H "Content-Type: application/json" \
-d '{
"amount": "5000",
"currency": "XAF",
"country": "CM",
"method": "mobile_money",
"msisdn": "+237650000001",
"merchant_reference": "order-10482"
}'{
"status": "success",
"data": {
"id": "col_7Qm3k1Xa9Zr4",
"object": "collection",
"status": "pending",
"amount": "5000",
"currency": "XAF",
"auth_model": "STK_PROMPT",
"livemode": false
},
"request_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6"
}サーバー SDK
同じ REST API の薄い型付きラッパーで、冪等性と署名検証を内蔵しています。
import { Capay } from '@capay/sdk';まだ npm には公開していません。上のインポート行は確定しているため、公開後もインテグレーションは変わりません。
ガイドを読むfrom capay import Capayまだ PyPI には公開していません。上のインポート行は確定しているため、公開後もインテグレーションは変わりません。
ガイドを読むuse Capay\CapayClient;まだ Packagist には公開していません。上のインポート行は確定しているため、公開後もインテグレーションは変わりません。
ガイドを読むすべての webhook を検証
署名は生のボディに対して計算し一定時間で比較します。300 秒より古いタイムスタンプは拒否します。検証していない webhook を信用しないでください。
# T is the t= value from X-Capay-Signature; delivery.json is the raw body as received.
T=1767225600
SECRET=whsec_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
{ printf '%s.' "$T"; cat delivery.json; } \
| openssl dgst -sha256 -hmac "$SECRET" -r | cut -d' ' -f1
# Compare the printed hex with each v1= value in the header (either may match
# during a secret rotation), and reject the delivery if |now - T| > 300 s.X-Capay-Signature: t=1767225600,v1=6f8b4c2d9e0a1b3c5d7e9f0a2b4c6d8e0f1a3b5c7d9e1f0a2b4c6d8e0f1a3b5c
X-Capay-Event-Id: evt_2n4Kq8Zr41Xa
X-Capay-Event-Type: collection.completed失敗した配信は固定間隔で再試行します: 1m, 5m, 30m, 2h, 6h, 12h, 24h, 24h。連続 8 回失敗したエンドポイントは無効化され通知されるので、死んだエンドポイントが黙ってイベントを飲み込むことはありません。
署名シークレットは同時に 2 つ有効にできるため、イベントを落とさずローテーションできます。300 秒の窓の外はすべて拒否し、イベント id を保存して再送を無害にしてください。
その他のツール
機械可読の仕様、そのまま取り込めるコレクション、そしてそれらを読むツール。