Z Zise Developers

各业务线要求的 KYC 层级

GET /v1/kyc/requirements scope: kyc:read
商户自身

返回各业务线要求的 KYC 层级。别在你这边硬编码一张表 —— 门槛会变。

参数

这个端点不收任何参数 —— 路径、查询、请求体都没有。鉴权头(x-auth-token)与代会员头 (x-on-behalf-of)的通用约定见 鉴权与签名

响应

200OK
{
  "requirements": [
    {
      "business": "remittance.express",
      "required_level": 1
    },
    {
      "business": "remittance.pobo",
      "required_level": 2
    },
    {
      "business": "card",
      "required_level": 1
    },
    {
      "business": "exchange",
      "required_level": 0
    },
    {
      "business": "earn",
      "required_level": 0
    }
  ]
}
403insufficient_scopekyc:read

深入说明

覆盖哪些线(2026-08-13 补齐)

remittance.express · remittance.pobo · card · exchange · earn · withdraw · transfer.send · transfer.receive · qrpay

⚠ 后四条此前不在这张表里,而它们都有 KYC 闸 —— 照「用这个端点」去做的商户对它们查不到条目(等于 0),于是不做预校验,然后用户走完全流程才在最后一步被拒。

转账收发是两行transfer.send / transfer.receive):合成一行取严会把一个只收不发的会员判成不够格。

card 这一条按你看得见的卡产品取最低值,不是恒为 1 ——卡产品可以要求 L2。

⚠ 扫码付的 required_level 是 0,别照它放行到底

它的闸不是一个等级,是一条累计触发线:未过 L1 的会员可以一直付,直到累计消费超过 kyc_trigger_amount 那一刻才要求 L1。

所以这一条会多给两个字段:

  • kyc_trigger_amount —— 最小单位整数串(没有触发线时这个字段不出现)
  • kyc_trigger_level —— 超过之后要求的等级(1)

把它写成 required_level: 1高报,会把一个现在完全可以付款的用户挡在门外;只看 required_level: 0 则是漏判,用户会在某一笔突然被拒。两个数一起用。

这不是「这条线能不能用」

本端点只回答要几级。可用性(线有没有开通、是否被停售)走GET /v1/merchant/lines —— 一行配置都没有时这里照样给 0,不代表那条线开着。以商户自身调用(不带 x-on-behalf-of),返回的是「按你的配置,每条业务至少要几级」。拿它在下单前做预校验,比让会员撞kyc_required 再回头补件体验好得多。

五条固定出现:remittance.express(1)、remittance.pobo(2)、card(1)、exchange(读你的兑换配置)、earn(你可见的在售理财产品里最低那一档 —— 回答的是「至少要几级才能开始买」,不是「买遍全部产品要几级」)。

⚠ 顶层键是 requirements 而不是 data(历史遗留)。

这些是准入规则,属风控,你只读。数字会随后台配置变化,别写死在代码里。

请求
curl -X GET 'https://api.zise.com/v1/kyc/requirements' \
  -H 'x-auth-token: Bearer $TOKEN'
const res = await fetch("https://api.zise.com/v1/kyc/requirements", {
  method: "GET",
  headers: {
    "x-auth-token": "Bearer $TOKEN",
  },
});
// 金额按字符串读,别让它变成 number
const data = await res.json();
import requests

res = requests.get(
    "https://api.zise.com/v1/kyc/requirements",
    headers={
        "x-auth-token": "Bearer $TOKEN",
    },
)
# 金额用 Decimal(str(...)),不要 float
data = res.json()
req, _ := http.NewRequest("GET", "https://api.zise.com/v1/kyc/requirements",
    nil)
req.Header.Set("x-auth-token", "Bearer $TOKEN")
res, err := http.DefaultClient.Do(req)
// 金额字段用 string 接,不要 float64
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.zise.com/v1/kyc/requirements"))
    .header("x-auth-token", "Bearer $TOKEN")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();
// 金额字段用 String / BigDecimal,不要 double
$ch = curl_init('https://api.zise.com/v1/kyc/requirements');
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'x-auth-token: Bearer $TOKEN',
  ],
]);
$res = curl_exec($ch);
// 金额用 bcmath / 字符串,不要 floatval
200
{
  "requirements": [
    {
      "business": "remittance.express",
      "required_level": 1
    },
    {
      "business": "remittance.pobo",
      "required_level": 2
    },
    {
      "business": "card",
      "required_level": 1
    },
    {
      "business": "exchange",
      "required_level": 0
    },
    {
      "business": "earn",
      "required_level": 0
    }
  ]
}