Appearance
钱包与地址
每个用户在每个链族(EVM、TRON、BTC、SOL)下可以有多个钱包,默认最多 10 个(按链族分别计数,租户可下调)。每个钱包有一个充值地址;同一 EVM 钱包在所有已开通的 EVM 网络上使用同一地址。余额按钱包 + 资产记账。
用户在某链族下的第一个钱包自动成为默认钱包。一次调用获取充值地址 和按用户站内转账(END_USER)都使用默认钱包。大多数交易所只需要默认钱包,不必直接调用本页的创建接口。
钱包对象
| 字段 | 类型 | 说明 |
|---|---|---|
id | string (UUID) | 钱包 ID |
tenantId | string (UUID) | 所属租户 |
userId | string (UUID) | 平台内部用户 ID |
chainFamily | string | EVM / TRON / BTC / SOL |
name | string | 钱包名称(最多 40 字符),默认为 "<链族> <序号>",如 "EVM 1" |
seq | integer | 该用户在该链族下的钱包序号,从 1 开始 |
isDefault | boolean | 是否为该链族的默认钱包 |
status | string | 见下表 |
address | string | null | 充值地址;分配完成前为 null |
createdAt | string | 创建时间(RFC 3339) |
| 钱包状态 | 含义 |
|---|---|
PROVISIONING | 创建中,地址分配后自动变为 ACTIVE(通常数秒) |
ACTIVE | 正常 |
HIDDEN | 被用户在 C 端隐藏;仍可接收本人其他钱包的转账 |
FROZEN | 已冻结:不能转出;到账的充值不会自动入账,转人工处理 |
CLOSED | 已关闭 |
创建钱包
http
POST /v1/wallets为用户在指定链族下新建一个钱包。若 customerRefId 对应的用户不存在,会先创建用户(不带邮箱)。钱包创建后异步分配地址,分配完成时推送 WALLET_CREATED 回调。
请求头
| 头 | 必填 | 说明 |
|---|---|---|
X-API-Key、Authorization | 是 | 见 认证与签名 |
Idempotency-Key | 是 | 幂等键,1–128 字符 [A-Za-z0-9_-:.],见 幂等 |
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
customerRefId | string | 是 | 交易所侧用户 ID(1–128 字符) |
chainFamily | string | 是 | EVM / TRON / BTC / SOL |
name | string | 否 | 钱包名称,超过 40 字符会被截断 |
json
{ "customerRefId": "u-10001", "chainFamily": "TRON", "name": "trading" }响应 202 Accepted:钱包对象,此时 status = "PROVISIONING"、address = null。
json
{
"id": "0192a4c2-0c11-7f03-8a77-0b1c2d3e4f50",
"tenantId": "0191f0aa-1b2c-7d3e-8f40-5a6b7c8d9e0f",
"userId": "0192a4c1-7a3e-7c51-9a64-2f0d3b8e4a10",
"chainFamily": "TRON",
"name": "trading",
"seq": 1,
"isDefault": true,
"status": "PROVISIONING",
"address": null,
"createdAt": "2026-10-03T05:01:12.481902Z"
}之后用 GET /v1/wallets/{id} 或 GET /v1/wallets/{id}/addresses 轮询,或等待 WALLET_CREATED 回调。
常见错误
| HTTP | code | 场景 |
|---|---|---|
| 422 | BAD_REQUEST | 缺少或非法 Idempotency-Key;customerRefId 长度不对;chainFamily 取值非法 |
| 403 | FORBIDDEN | 用户已冻结(user is not active) |
| 409 | IDEMPOTENCY_CONFLICT | 同一幂等键对应不同请求体,或上一次请求仍在处理 |
| 422 | NETWORK_DISABLED | 本租户在该链族下没有可开新钱包的网络(<FAMILY> wallets are not open) |
| 422 | WALLET_LIMIT_REACHED | 该用户在该链族下钱包数已达上限(at most 10 EVM wallets per user) |
| 429 | RATE_LIMITED | 该用户 24 小时内新建钱包过多(默认 5 个) |
钱包列表
http
GET /v1/wallets?customerRefId=u-10001&limit=50&before=<nextBefore>查询参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
customerRefId | string | 否 | 只返回该用户的钱包 |
limit | integer | 否 | 1–200,默认 50 |
before | string (UUID) | 否 | 上一页的 nextBefore |
响应 200 OK。列表项与钱包对象相同,但不含 tenantId,另含 customerRefId:
json
{
"items": [
{
"id": "0192a4c1-8b10-7e22-b3a1-6f1e2d3c4b5a",
"userId": "0192a4c1-7a3e-7c51-9a64-2f0d3b8e4a10",
"customerRefId": "u-10001",
"chainFamily": "EVM",
"name": "EVM 1",
"seq": 1,
"isDefault": true,
"status": "ACTIVE",
"address": "0x8ba1f109551bd432803012645ac136ddd64dba72",
"createdAt": "2026-10-03T04:55:50.002311Z"
}
],
"nextBefore": null
}查询钱包
http
GET /v1/wallets/{id}响应 200 OK:钱包对象。
常见错误:404 NOT_FOUND(wallet not found,包括钱包不属于本租户)。
查询钱包余额
http
GET /v1/wallets/{id}/assets响应 200 OK:数组,每个有过记账的资产一项。
json
[
{ "assetId": "ETH", "available": "250000000000000000", "frozen": "0" },
{ "assetId": "USDT_ERC20", "available": "75000000", "frozen": "10000000" }
]| 字段 | 说明 |
|---|---|
assetId | 资产 ID |
available | 可用余额(最小单位字符串)。注意本接口字段名不带 Raw 后缀 |
frozen | 冻结余额(最小单位字符串) |
常见错误:404 NOT_FOUND。
查询钱包充值地址
http
GET /v1/wallets/{id}/addresses按网络列出该钱包的充值地址,以及每个网络上可充值的资产、最小充值额与充值手续费。只包含钱包所属链族中、本租户已开通且允许充值的网络。
响应 200 OK
json
[
{
"walletId": "0192a4c1-8b10-7e22-b3a1-6f1e2d3c4b5a",
"networkKey": "ethereum",
"networkName": "Ethereum",
"address": "0x8ba1f109551bd432803012645ac136ddd64dba72",
"watchStatus": "ACTIVE",
"confirmations": { "mode": "confirmations", "n": 12 },
"supportedAssets": [
{
"assetId": "USDT_ERC20",
"symbol": "USDT",
"name": "Tether USD",
"decimals": 6,
"minDepositRaw": "1000000",
"depositFeeRaw": "500000",
"depositPaused": false,
"iconUrl": null
}
]
}
]| 字段 | 说明 |
|---|---|
address | 该网络上的充值地址。仅当钱包为 ACTIVE 且该网络的监听状态为 ACTIVE / DEGRADED 时返回,否则为 null(请勿展示给用户) |
watchStatus | 地址在该网络上的监听状态:ALLOCATED、REGISTERING、ACTIVE、DEGRADED(监听降级,仍会入账但可能延迟)、FROZEN;未注册时为 null |
confirmations | 该网络的入账条件:{"mode":"confirmations","n":N}(N 个确认)、{"mode":"finalized"} 或 {"mode":"solidified"}(链上最终确定) |
supportedAssets[].minDepositRaw | 最小充值额;低于此金额的充值不会自动入账 |
supportedAssets[].depositFeeRaw | 当前充值手续费,入账时从充值金额中扣除 |
supportedAssets[].depositPaused | true 表示该资产暂停充值:到账后不会自动入账,转人工处理 |
常见错误:404 NOT_FOUND。