開発者/はじめに
CardV Merchant API
CardVは、ギフトカード、ゲームのチャージ、eSIMなどのプリペイド型デジタル商品を法人向けに販売しています。Merchant APIを使うと、貴社のサーバーからこれらの商品を自動で購入できます。残高の確認、商品の検索、価格の確認、注文、コードの受け取りまでをAPIで行えます。代金は、CardVに前払いでチャージしたウォレットから支払われます。入金や注文履歴の確認など、それ以外の操作はMerchant Portal(管理画面)で行います。
#ドキュメント一覧
| ドキュメント | 内容 |
|---|---|
| 認証 | リクエストヘッダー、注文の署名、APIキーの設定 |
| 商品と注文 | 残高、商品、価格、注文、コード |
| 共通ルール | 金額、日時、ID、レート制限、エラー |
| Webhook | 貴社サーバーに届く注文の通知 |
| Sandbox | テスト方法と本番開始前のチェックリスト |
| セキュリティ | APIキーとコードの守り方 |
#環境
| Live | Sandbox | |
|---|---|---|
| APIのベースURL | https://b2b.cardv.net/api/v1 | https://sandbox.cardv.net/api/v1 |
| Merchant Portal | https://b2b.cardv.net/portal/ | 同じPortalで Sandbox に切り替え |
Sandboxは、テスト用の資金で動くCardVの独立したテスト環境です。APIキー、残高、注文、商品IDは環境ごとに別々です。
#クイックスタート
申し込み:Portalでマーチャントアカウントを申し込み、メールアドレスを確認します。
審査を待つ:CardVが貴社の事業内容を審査します。承認されると、
M00000001のようなMerchant IDが発行されます。Sandboxを開く:Portalにサインインし、画面上部で Sandbox を選びます。テスト用の資金として1,000 USDが入っています。
APIキーを作成する:Portalで Integrations → API keys を開きます。キーを作成し、CardVからメールで届く確認コードを入力してキーを表示します。表示したキーはシークレット管理ツールに保存してください。
残高を確認する:
export CARDV_BASE=https://sandbox.cardv.net export CARDV_MERCHANT_ID=M00000001 # yours export CARDV_API_KEY=cvb2b_... # from your secret store AUTH=(-H "X-Merchant-Id: $CARDV_MERCHANT_ID" -H "X-Api-Key: $CARDV_API_KEY") curl -sS "$CARDV_BASE/api/v1/balance" "${AUTH[@]}"商品を探す:
curl -sS "$CARDV_BASE/api/v1/skus?search=steam&limit=20" "${AUTH[@]}""availability": "available"の商品を選び、そのsku_idを控えておきます。価格を確認する:
curl -sS "$CARDV_BASE/api/v1/skus/S000001/quote?quantity=1" "${AUTH[@]}"merchant_priceを控えておきます。これが1個あたりの購入価格です。注文する:この呼び出しには署名が必要です。認証のサンプルコードに、次のリクエスト本文を入れて送信します。
{ "external_order_id": "TEST-0001", "items": [ {"sku_id": "S000001", "quantity": 1, "expected_unit_price": "9.2500"} ] }成功するとHTTP 201が返り、
O-00001234のようなCardVの注文IDが発行されます。コードを受け取る:ステータスが
succeededになるまでGET/api/v1/orders/O-00001234を呼び出します。コードはitems[].deliveries[].display_fieldsに入っています。注文の完了はWebhookで受け取ることもできます。本番を開始する:Sandboxのチェックリストをすべて終えてから、本番に切り替えます。
上記のIDと価格は例です。実際には、貴社のカタログで返される値を使ってください。
#APIの概要
エンドポイントは7つです。パスはすべて /api/v1 から始まります。
| エンドポイント | 用途 | 署名 |
|---|---|---|
GET/account | 会社情報とAPIの利用状況 | 不要 |
GET/balance | 使える残高 | 不要 |
GET/skus | 購入できる商品の一覧(貴社の価格付き) | 不要 |
GET/skus/{sku_id} | 1つの商品の詳細 | 不要 |
GET/skus/{sku_id}/quote | 指定した数量での現在の価格 | 不要 |
POST/orders | 注文(ウォレットから支払い) | 必要 |
GET/orders/{order_id} | 注文のステータスとコード | 不要 |
これ以外のエンドポイントをAPIキーで呼び出すと、HTTP 403が返ります。
{"detail": "This operation is only available in the Merchant Portal."}携帯電話のチャージ(通話料のチャージ)はAPIでは利用できません。
#ID
| 種類 | 例 | 補足 |
|---|---|---|
| Merchant ID | M00000001 | 貴社のIDです。変わることはありません。 |
| SKU(購入できる商品) | S000456 | 価格の確認と注文に使います。 |
| CardVの注文ID | O-00001234 | 自社の注文と一緒に保存してください。 |
| 自社の注文番号 | SHOP-10001 | 貴社が自由に決める番号です(external_order_id)。 |
IDは文字列として保存し、中身を解析しないでください。詳しくは共通ルールをご覧ください。
#Merchant Portalで行う操作
- ウォレットへの入金と、残高が少なくなったときのメール通知
- 注文履歴の確認、検索、CSVの書き出し
- 注文の請求書
- ウォレットの取引履歴と照合
- Webhookの設定、送信履歴、再送
- APIキー
- IP許可リスト
- チームメンバーと権限
- 監査ログ
- 2段階認証(2FA)
- LiveとSandboxの切り替え
#互換性とサポート
レスポンスのフィールドやステータスの値は、予告なく追加されることがあります。知らないフィールドは無視してください。知らない注文ステータスは「まだ完了していない」ものとして扱ってください。エラーメッセージの文言には依存しないでください。
お問い合わせは [email protected] まで、Merchant ID、環境、注文ID、日時(UTC)、HTTPステータスを添えてご連絡ください。APIキー、署名、Webhookのシークレット、カードのコードは絶対に送らないでください。
連携についてご不明な点は、Merchant ID と注文 ID またはリクエスト ID を添えて [email protected] までお問い合わせください。