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} | ユーザーを取得(任意) |
基本ルール
| URL | https://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" }
}
}| HTTP | code | 意味 |
|---|---|---|
| 400 | invalid_* | パラメーターが不正です。message がフィールドを示します。 |
| 400 | chain_not_enabled | このチェーンに有効な受取アドレスがないか、受け取りがオフです。 |
| 400 | chain_not_available | このチェーンは現在受け取りできません。 |
| 400 | chain_not_supported | このチェーンに入金アドレスはありません。 |
| 400 | token_not_enabled | プロジェクトがこのトークンを選択していません。 |
| 400 | currency_not_available | プロジェクトはどのチェーンでもこの通貨を受け取れません。 |
| 400 | deposits_disabled | プロジェクトが入金アドレスをオフにしています。 |
| 400 | amount_below_minimum | 最低受取額を下回っています。最低額は details.min_amount を参照。 |
| 401 | unauthorized | API キーがないか、無効または失効しています。 |
| 403 | project_disabled | プロジェクトは停止されています。 |
| 404 | not_found | リソースが存在しないか、このプロジェクトのものではありません。 |
| 409 | request_in_progress | 同じ Idempotency-Key のリクエストを処理中です。少し後で再試行してください。 |
| 422 | idempotency_key_reused | 同じ Idempotency-Key が異なるリクエストに使われました。 |
| 500 | internal_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"
}
}| フィールド | 説明 |
|---|---|
method | wallet:ウォレット支払い。deposit_address:アドレスへの送金。 |
customer | 指定したユーザー ID。ない場合は null。 |
payment_intent | 所属する支払い。入金アドレスの場合は null。 |
amount、fee、net | ユーザーの支払額、手数料、あなたの受取額。held の間は fee が 0 で、回収時に確定します。 |
usd_value | amount を 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 | 支払いまたは決済トランザクションのハッシュで検索。 |
limit | 1 ページの件数。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 | ブロックチェーン | 通貨 | 支払い方法 |
|---|---|---|---|
bsc | BNB Chain | USDT, USDC | wallet, deposit_address |
ethereum | Ethereum | USDT, USDC | wallet |
arbitrum | Arbitrum | USDT, USDC | wallet |
base | Base | USDT, USDC | wallet |
polygon | Polygon | USDT, USDC | wallet |
optimism | Optimism | USDT, USDC | wallet |
ton | TON | USDT | wallet |
solana | Solana | USDT, USDC | wallet |
テストネットは 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[].chain | chain と 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(チェーン別の入金アドレス)を返します。