kokiwa

API リファレンス

すべてのエンドポイントはサーバーから呼び出します。リクエストとレスポンスは JSON です。Webhook の URL と API キーはマーチャント管理画面で管理します。

そのまま使えるコードが必要ですか? Node.js、Python、PHP、Go、Javaの組み込みサンプル

エンドポイント用途
POST /v1/payment_intents支払いを作成
GET /v1/payment_intents/{id}支払いを取得
POST /v1/deposit_addressesユーザーの入金アドレスを取得
GET /v1/deposits入金記録の一覧
GET /v1/deposits/{id}入金記録を取得
GET /v1/chainsプロジェクトで使えるチェーンとトークンを取得
PUT /v1/customers/{external_id}ユーザーにタグとメモを付ける(任意)
GET /v1/customers/{external_id}ユーザーを取得(任意)

基本ルール

URLhttps://api.kokiwa.com。メインネットとテストネットで共通です。
認証ヘッダー Authorization: Bearer sk_…。sk_live_ で始まるキーはメインネット、sk_test_ で始まるキーはテストネットにアクセスし、データは完全に分かれています。キーは所属するプロジェクトにのみアクセスできます。
金額トークン数量の文字列です。例:"25.00"。リクエストは小数点以下 6 桁まで、レスポンスはオンチェーンの精度をそのまま保つため桁数は一定ではありません。オンチェーンの生の値は transaction.raw_amount だけです。
時刻ISO 8601 UTC。例:2026-11-02T08:30:00Z。
アドレス形式EVM アドレスは EIP-55 チェックサム形式で返します。そのまま表示し、比較では大文字小文字を無視してください。
冪等性POST リクエストには Idempotency-Key(最大 255 文字)を付けられます。同じキーで再試行すると最初の結果が返り、レスポンスヘッダーに Idempotent-Replayed: true が付きます。

エラー

失敗時は 4xx または 5xx を返します。エラーの種類は code で判断し、message は調査用にのみ使ってください。

{
  "error": {
    "code": "amount_below_minimum",
    "message": "options[0].amount is below the minimum",
    "details": { "min_amount": "5.00" }
  }
}
HTTPcode意味
400invalid_*パラメーターが不正です。message がフィールドを示します。
400chain_not_enabledこのチェーンに有効な受取アドレスがないか、受け取りがオフです。
400chain_not_availableこのチェーンは現在受け取りできません。
400chain_not_supportedこのチェーンに入金アドレスはありません。
400token_not_enabledプロジェクトがこのトークンを選択していません。
400currency_not_availableプロジェクトはどのチェーンでもこの通貨を受け取れません。
400deposits_disabledプロジェクトが入金アドレスをオフにしています。
400amount_below_minimum最低受取額を下回っています。最低額は details.min_amount を参照。
401unauthorizedAPI キーがないか、無効または失効しています。
403project_disabledプロジェクトは停止されています。
404not_foundリソースが存在しないか、このプロジェクトのものではありません。
409request_in_progress同じ Idempotency-Key のリクエストを処理中です。少し後で再試行してください。
422idempotency_key_reused同じ Idempotency-Key が異なるリクエストに使われました。
500internal_errorサーバーエラーです。後で同じ Idempotency-Key で再試行してください。

支払い

支払いは、ユーザーに支払ってもらう 1 件の注文です。ユーザーはチェックアウトで支払い、結果は Webhook で通知されます。

支払いを作成

POST/v1/payment_intents
パラメーター説明
currency 必須通貨。例:USDT。GET /v1/chains の currencies を参照。
amount 必須トークン数量。小数点以下 6 桁まで。例:"25.00"。
chains受け取るチェーンを限定します。例:["bsc", "base"]。既定はプロジェクトがこの通貨を受け取れるすべてのチェーンです。
customer自社システムのユーザー ID。1〜128 文字の英数字と _ - . : @。
expires_in有効期間(秒)。60〜604800(7 日)、既定は 1800(30 分)。
metadata任意の JSON オブジェクト。最大 50 キー、8KB。API と Webhook でそのまま返ります。注文番号などに使えます。
success_url支払い完了後にチェックアウトが移動する https URL。
cancel_urlユーザーが「キャンセル」を押したときに移動する https URL。

最低受取額を下回るチェーンは除外され、すべて下回る場合はエラーになります。既定の最低額は 5 米ドルです。手数料は管理画面のプロジェクトの「手数料」で確認できます。

チェーンごとにトークンと金額を指定する

複数の通貨を受け取る場合や、チェーンごとに金額が異なる場合は、currency、amount、chains の代わりに options を使います。最大 16 項目で、token はシンボルかコントラクトアドレスです。

"options": [
  { "chain": "bsc", "token": "USDT", "amount": "25.00" },
  { "chain": "bsc", "token": "USDC", "amount": "25.00" }
]

レスポンス

201 と支払いオブジェクトを返します。checkout_url をユーザーに開いてもらいます。

{
  "id": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "object": "payment_intent",
  "status": "pending",
  "livemode": true,
  "customer": "user_42",
  "checkout_url": "https://pay.kokiwa.com/p/pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "metadata": { "order_id": "10086" },
  "success_url": "https://your-shop.com/orders/10086",
  "cancel_url": null,
  "created_at": "2026-11-02T08:30:00Z",
  "expires_at": "2026-11-02T09:00:00Z",
  "paid_at": null,
  "paid_option": null,
  "options": [
    {
      "id": "pio_5Hq2Tz8rLw0aVb3Kc9XyN1",
      "chain": "bsc",
      "token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
      "amount": "25.00",
      "received": "0.00",
      "deposit_address": "0x8b1F…c04E"
    },
    {
      "id": "pio_2Mn7Xc4bQe6uJs1Ga8RvK3",
      "chain": "base",
      "token": { "symbol": "USDT", "address": "0xfde4…9bb2", "decimals": 6 },
      "amount": "25.00",
      "received": "0.00",
      "deposit_address": null
    }
  ],
  "deposits": []
}
フィールド説明
optionsユーザーが選べる支払い手段。1 項目が 1 チェーンの 1 トークンです。
options[].receivedこの項目で受け取った金額。
options[].deposit_addressこの支払い専用の送金アドレス。自社のページに表示することもできます。この方法がない場合は null です(BNB Chain 以外、または金額が小さすぎる場合)。
paid_optionユーザーが実際に支払った options[].id。
depositsこの支払いで受け取った入金記録。古い順です。入金オブジェクトを参照。
livemodeメインネットは true、テストネットは false。

支払いを取得

GET/v1/payment_intents/{id}

支払いオブジェクトを返します。照合や、Webhook が届かないときの状態確認に使います。

支払いのステータス

status説明
pending支払い待ち。
partially_paid専用アドレスへの送金が不足し、amount − received が未払いです。発送せず、残りが支払われると paid になります。
paid全額受け取り済みで、発送できます。超過分も received に含まれ、kokiwa は自動返金しません。
expired支払われず期限切れ。
paid_late期限後に専用アドレスへ着金しました。資金はあなたに届いているので、発送か返金かを判断してください。

入金アドレス

顧客の入金アドレスを取得

POST/v1/deposit_addresses
パラメーター説明
customer 必須自社システムのユーザー ID。ルールは支払いと同じです。初回に自動で作成されます。
chain現在は bsc のみで、既定値でもあります。
{
  "object": "deposit_address",
  "customer": "user_42",
  "chain": "bsc",
  "address": "0x3c9A…71d2",
  "tokens": [
    { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18, "min_settle_amount": "5.00" }
  ]
}

同じユーザーには常に同じアドレスを返すので、長期間表示できます。tokens に記載のトークンだけが入金処理されます。

送金ごとに deposit.confirmed を送ります。min_settle_amount 未満の送金も入金され、ステータスは held です。このアドレスの累計が最低額に達すると受取アドレスへまとめて回収し、固定手数料は 1 回分だけかかります。

入金記録

入金記録(deposit)は、計上された 1 件のオンチェーン支払いで、支払いまたは入金アドレスから発生します。1 つの支払いに複数ある場合があります。

{
  "id": "dep_9Kx2Pa6Wn3Ty8Lq5Rb1Ms4",
  "object": "deposit",
  "status": "settled",
  "method": "wallet",
  "chain": "bsc",
  "customer": "user_42",
  "payment_intent": "pi_7Gm4Rk2Wp9Ls1Qv8Bd3Zt6",
  "token": { "symbol": "USDT", "address": "0x55d3…7955", "decimals": 18 },
  "amount": "25.00",
  "fee": "0.0875",
  "net": "24.9125",
  "usd_value": "25.00",
  "confirmed_at": "2026-11-02T08:41:07Z",
  "transaction": {
    "hash": "0x4e7a…91c3",
    "log_index": 212,
    "block_number": 44718235,
    "block_time": "2026-11-02T08:40:58Z",
    "from": "0x1f9C…a2B0",
    "to": "0x7d3E…09f1",
    "raw_amount": "25000000000000000000"
  },
  "settlement": {
    "tx_hash": "0x4e7a…91c3",
    "by": "payment",
    "settled_at": "2026-11-02T08:40:58Z"
  }
}
フィールド説明
methodwallet:ウォレット支払い。deposit_address:アドレスへの送金。
customer指定したユーザー ID。ない場合は null。
payment_intent所属する支払い。入金アドレスの場合は null。
amount、fee、netユーザーの支払額、手数料、あなたの受取額。held の間は fee が 0 で、回収時に確定します。
usd_valueamount を kokiwa が設定したトークン価格で換算した米ドル額。
transactionユーザーの支払いのオンチェーントランザクションで、ブロックエクスプローラーで確認できます。1 つのトランザクションに複数の送金がある場合は hash + log_index で区別します。from はユーザー本人のウォレットとは限らず、取引所からの出金では取引所のアドレスです。 raw_amount はこの送金のオンチェーンの生の値(トークンの最小単位)で、ブロックエクスプローラーとの照合専用です。
settlement受取アドレスに届いたトランザクション。未決済の間は null です。by は payment(支払い自体で決済)、kokiwa(kokiwa が回収)、owner(自分のウォレットで取り戻し、手数料なし)のいずれかです。まとめて回収した入金記録は tx_hash が同じです。
status説明
confirmedオンチェーンで確定し、受取アドレスへの回収待ち。ユーザーに入金処理できます。
heldオンチェーンで確定し、少額のため蓄積中。ユーザーに入金処理できます。
settled受取アドレスに到着済み。

入金を 1 件取得

GET/v1/deposits/{id}

入金の一覧

GET/v1/deposits

新しい順に返します。

クエリパラメーター説明
customer特定のユーザーのみ。
tx_hash支払いまたは決済トランザクションのハッシュで検索。
limit1 ページの件数。1〜100、既定は 20。
starting_after前のページの最後の id。
curl "https://api.kokiwa.com/v1/deposits?tx_hash=0x4e7a…91c3" \
  -H "Authorization: Bearer $KOKIWA_KEY"

{ "object": "list", "data": [ { "id": "dep_9Kx2…", "object": "deposit", ... } ], "has_more": false }

チェーンとトークン

kokiwa が対応するチェーンと通貨は次のとおりです。chains と options[].chain には chain 列の値を、currency には通貨列の値を指定します。

chainブロックチェーン通貨支払い方法
bscBNB ChainUSDT, USDCwallet, deposit_address
ethereumEthereumUSDT, USDCwallet
arbitrumArbitrumUSDT, USDCwallet
baseBaseUSDT, USDCwallet
polygonPolygonUSDT, USDCwallet
optimismOptimismUSDT, USDCwallet
tonTONUSDTwallet
solanaSolanaUSDT, USDCwallet

テストネットは USDT のみです。トークンは tUSDT ですが、currency は USDT のままです。

これは指定できる値の全範囲で、どのプロジェクトでもすべて使えるという意味ではありません。設定は加盟店ごとに異なるため、実際に使えるチェーンと通貨は下の API で確認してください。

プロジェクトのチェーンとトークンを取得

GET/v1/chains

このキーのプロジェクトが現在のネットワークで受け取れるものを返します。

{
  "object": "list",
  "livemode": true,
  "currencies": ["USDT"],
  "data": [
    {
      "object": "chain", "chain": "bsc", "name": "BNB Smart Chain", "chain_id": 56, "testnet": false, "native": "BNB",
      "payout_registered": true, "active": true,
      "methods": { "wallet": true, "deposit_address": true },
      "tokens": [
        { "symbol": "USDT", "asset": "USDT", "address": "0x55d398326f99059fF775485246999027B3197955", "decimals": 18, "accepted": true },
        { "symbol": "USDC", "asset": "USDC", "address": "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d", "decimals": 18, "accepted": false }
      ]
    }
  ]
}
フィールド説明
currenciesいま currency に指定できる通貨。
data[].chainchain と options[].chain に使う値:bsc、ethereum、arbitrum、base、polygon、optimism、ton、solana。
data[].activeこのチェーンが今受け取れるか:受取アドレスの登録、受取方法のオン、トークンの選択がすべて済んでいること。
data[].tokens[].assetトークンの通貨。asset が同じトークンはチェーンをまたいで同等です。
data[].tokens[].acceptedプロジェクトがこのトークンを選択しているか。

顧客

任意です。customer が初めて現れたときに顧客は自動作成されます。管理画面でタグ絞り込みをしたい場合にだけ使います。

ラベルとメモを設定

PUT/v1/customers/{external_id}
パラメーター説明
tags最大 20 個のタグ。各 1〜64 文字の英数字と _ - . :。
metadata任意の JSON オブジェクト。最大 50 キー、8KB。

顧客を取得

GET/v1/customers/{external_id}

タグ、メモ、deposit_addresses(チェーン別の入金アドレス)を返します。

Connect a wallet with WalletConnect