批量查询多个会员的个人线开户进度
商户自身
一次查询同一商户名下多个会员的 VP 开户状态。
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
members |
string[] | 必填 | 商户会员标识数组;支持 external_member_id 和 mem_<uuid> 混合传入。 |
响应
200批量结果。每一项与入参逐条对应。
{
"items": [
{
"query": "vp-a",
"member_id": "mem_7a3b7e6d-1111-2222-3333-444444444444",
"external_member_id": "vp-a",
"application": {
"id": "vpa_12",
"status": "reviewing",
"reviewed_at": "",
"created_at": "2026-08-13T20:00:00.000Z"
},
"stage": "reviewing"
},
{
"query": "missing-member",
"error": "member_not_found",
"application": null
}
]
}400
invalid_request —— members 缺失、为空、超过 100,或含空字符串403
insufficient_scope 缺 remittances:read深入说明
为什么是新端点,不是改老的 GET
现有 GET /v1/remit/vp/applications 的契约是“x-on-behalf-of 绑定一个会员”。这条批量端点改用 body 传一组会员标识,避免把单会员中间件与审计语义扭成多值。
支持两种会员标识
members[] 里每一项都可以是:
- 商户自己的
external_member_id - 我方返回过的
mem_<uuid>
返回顺序与入参一致
为了让调用方可以直接把响应按索引回填到自己的批任务里,返回结果保持与members[] 相同的顺序。
单条不存在不拖垮整批
某个会员不存在,或不属于当前商户时,只在该项返回error: "member_not_found";整批仍返回 200。
请求
curl -X POST 'https://api.zinfra.vip/v1/remit/vp/applications/query' \
-H 'x-auth-token: Bearer $TOKEN' \
-H 'content-type: application/json' \
-d '{
"members": [
"vp-a",
"mem_7a3b7e6d-1111-2222-3333-444444444444",
"missing-member"
]
}'const res = await fetch("https://api.zinfra.vip/v1/remit/vp/applications/query", {
method: "POST",
headers: {
"x-auth-token": "Bearer $TOKEN",
"content-type": "application/json",
},
body: JSON.stringify({
"members": [
"vp-a",
"mem_7a3b7e6d-1111-2222-3333-444444444444",
"missing-member"
]
}),
});
// 金额按字符串读,别让它变成 number
const data = await res.json();import requests
res = requests.post(
"https://api.zinfra.vip/v1/remit/vp/applications/query",
headers={
"x-auth-token": "Bearer $TOKEN",
"content-type": "application/json",
},
json={
"members": [
"vp-a",
"mem_7a3b7e6d-1111-2222-3333-444444444444",
"missing-member"
]
},
)
# 金额用 Decimal(str(...)),不要 float
data = res.json()req, _ := http.NewRequest("POST", "https://api.zinfra.vip/v1/remit/vp/applications/query",
strings.NewReader(`{
"members": [
"vp-a",
"mem_7a3b7e6d-1111-2222-3333-444444444444",
"missing-member"
]
}`))
req.Header.Set("x-auth-token", "Bearer $TOKEN")
req.Header.Set("content-type", "application/json")
res, err := http.DefaultClient.Do(req)
// 金额字段用 string 接,不要 float64HttpRequest req = HttpRequest.newBuilder()
.uri(URI.create("https://api.zinfra.vip/v1/remit/vp/applications/query"))
.header("x-auth-token", "Bearer $TOKEN")
.header("content-type", "application/json")
.method("POST", HttpRequest.BodyPublishers.ofString("""
{
"members": [
"vp-a",
"mem_7a3b7e6d-1111-2222-3333-444444444444",
"missing-member"
]
}
"""))
.build();
// 金额字段用 String / BigDecimal,不要 double$ch = curl_init('https://api.zinfra.vip/v1/remit/vp/applications/query');
curl_setopt_array($ch, [
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'x-auth-token: Bearer $TOKEN',
'content-type: application/json',
],
CURLOPT_POSTFIELDS => <<<'JSON'
{
"members": [
"vp-a",
"mem_7a3b7e6d-1111-2222-3333-444444444444",
"missing-member"
]
}
JSON,
]);
$res = curl_exec($ch);
// 金额用 bcmath / 字符串,不要 floatval
200
{
"items": [
{
"query": "vp-a",
"member_id": "mem_7a3b7e6d-1111-2222-3333-444444444444",
"external_member_id": "vp-a",
"application": {
"id": "vpa_12",
"status": "reviewing",
"reviewed_at": "",
"created_at": "2026-08-13T20:00:00.000Z"
},
"stage": "reviewing"
},
{
"query": "missing-member",
"error": "member_not_found",
"application": null
}
]
}