kokiwa

API 參考

所有接口都從你的服務端調用,請求和返回都是 JSON。Webhook 地址和 API key 在商戶後台管理。

想直接複製可用的程式碼? 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}查詢用戶(可選)

基本約定

地址https://api.kokiwa.com,主網和測試網相同。
認證請求頭 Authorization: Bearer sk_…。sk_live_ 開頭的 key 訪問主網,sk_test_ 開頭的訪問測試網,兩邊數據完全分開。一個 key 只能訪問它所屬的項目。
金額代幣數量的字符串,例如 "25.00"。請求最多 6 位小數;返回保留鏈上的完整精度,小數位數不固定。只有 transaction.raw_amount 是鏈上原始值。
時間ISO 8601 UTC,例如 2026-11-02T08:30:00Z。
地址格式EVM 地址以 EIP-55 校驗和格式返回,請原樣展示;比對時忽略大小寫。
冪等POST 請求可帶 Idempotency-Key(最長 255 字符)。同一個 key 重試會返回第一次的結果,響應頭帶 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。
401unauthorized缺少 API key,或 key 無效、已撤銷。
403project_disabled項目已被停用。
404not_found資源不存在,或不屬於這個項目。
409request_in_progress同一個 Idempotency-Key 的請求還在處理,稍後重試。
422idempotency_key_reused同一個 Idempotency-Key 用於了不同的請求內容。
500internal_error服務端錯誤,稍後用同一個 Idempotency-Key 重試。

支付單

一張支付單是一筆要用戶支付的訂單。用戶在收銀台付款,結果通過 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,原樣出現在查詢結果和 Webhook 裡,適合放訂單號。
success_url付款成功後收銀台跳轉的 https 地址。
cancel_url用戶點「取消」時跳轉的 https 地址。

低於最低收款金額的鏈會被排除;所有鏈都不滿足時返回錯誤。默認最低金額是 5 美元,你的費率見後台項目的「費率」部分。

指定每條鏈的代幣和金額

需要同時收多個幣種,或者每條鏈金額不同時,用 options 代替 currency、amount 和 chains。最多 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用戶可以選擇的付款方式,每項一條鏈的一個代幣。
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;這個地址累積到最低金額後一起歸集到你的收款地址,只收一次固定手續費。

入帳

入帳(deposit)是一筆計入的鏈上付款,來自支付單或充值地址。一張支付單可以有多筆入帳。

{
  "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用戶付款的鏈上交易,可以在區塊瀏覽器上核對。同一筆交易有多筆轉帳時,用 hash + log_index 區分。from 不一定是用戶本人的錢包,從交易所提幣時是交易所的地址。 raw_amount 是這筆轉帳的鏈上原始值(代幣最小單位),只用於和區塊瀏覽器核對。
settlement款項到你收款地址的交易,未結算時為 null。by 為 payment(付款交易本身完成結算)、kokiwa(kokiwa 歸集)或 owner(你用自己的錢包取回,不收手續費)。一起歸集的入帳 tx_hash 相同。
status說明
confirmed已在鏈上確認,等待歸集到你的收款地址。可以給用戶入帳。
held已在鏈上確認,金額太小,累積中。可以給用戶入帳。
settled已到你的收款地址。

查詢一筆入帳

GET/v1/deposits/{id}

列出入帳

GET/v1/deposits

按時間從新到舊返回。

查詢參數說明
customer只看某個用戶。
tx_hash按付款交易或結算交易的哈希查找。
limit每頁條數,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。

這裡是可以填寫的全部範圍,不代表某個項目都能使用。每個商戶的配置不同,實際可用的鏈和幣種請用下面的接口查詢。

查詢項目可用的鏈和代幣

GET/v1/chains

返回這個 key 所屬的項目在當前網絡的收款能力。

{
  "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