接口详情
GET /v1/billing-bridge/keys
List the reseller billing bridge keys
- operationId
listResellerBillingBridgeKeys- 认证
- 登录会话:主控登录后的 Bearer 会话,由客户本人在自己的主控里使用;插件不能要求客户交出会话。
- 所需权限
全部需要:reseller.customers.manage
说明(契约原文)
Bearer session of the active reseller (tenant session, reseller.customers.manage; 403 reseller_inactive when the tenant is not an active reseller). Lease feature module.billing.bridge (403 entitlement_feature_denied when the plugin is not enabled). Keys are paged by (created_at DESC, id DESC); the secret is never returned here.
参数
listResellerBillingBridgeKeys 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
limit | query | integer | 否 | — |
|---|
cursor | query | string | 否 | — |
|---|
响应
listResellerBillingBridgeKeys 响应| 状态码 | 说明 |
|---|
200 | One page of keys. 字段:items: array<BillingBridgeKey> next_cursor: string has_more: boolean |
|---|
400 | 请求体或参数不合法。 |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
503 | A required dependency is unavailable. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/keys
Create a reseller billing bridge key
- operationId
createResellerBillingBridgeKey- 认证
- 登录会话:主控登录后的 Bearer 会话,由客户本人在自己的主控里使用;插件不能要求客户交出会话。
- 所需权限
全部需要:reseller.customers.manage
说明(契约原文)
Bearer session of the active reseller (tenant session, reseller.customers.manage; 403 reseller_inactive when the tenant is not an active reseller), MFA step-up proof (audience billing-bridge, action billing_bridge.key.create) in step_up_token; 403 mfa_step_up_required without it. ip_allowlist is required (1–32 addresses or CIDR networks, no /0). The secret is returned once in this response and only its pepper-derived seed is stored. Audit billing_bridge.key.created.
请求体
application/json · 必填:是
createResellerBillingBridgeKey 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
name | string | 是 | — |
|---|
ip_allowlist | array<string> | 是 | — |
|---|
expires_at | string(date-time) | 否 | — |
|---|
step_up_token | string | 是 | — |
|---|
响应
createResellerBillingBridgeKey 响应| 状态码 | 说明 |
|---|
201 | The key and its one-time secret. 字段:key: BillingBridgeKey secret: string |
|---|
400 | 请求体或参数不合法。 |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
415 | Content-Type must be exactly application/json without parameters. |
|---|
503 | A required dependency is unavailable. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/keys/{id}/revoke
Revoke a reseller billing bridge key
- operationId
revokeResellerBillingBridgeKey- 认证
- 登录会话:主控登录后的 Bearer 会话,由客户本人在自己的主控里使用;插件不能要求客户交出会话。
- 所需权限
全部需要:reseller.customers.manage
说明(契约原文)
Step-up action billing_bridge.key.revoke bound to the key id. Revocation is final. Audit billing_bridge.key.revoked.
参数
revokeResellerBillingBridgeKey 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
id | path | string(uuid) | 是 | — |
|---|
请求体
application/json · 必填:是
revokeResellerBillingBridgeKey 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
expected_revision | integer(int64) | 是 | — |
|---|
step_up_token | string | 是 | — |
|---|
响应
revokeResellerBillingBridgeKey 响应| 状态码 | 说明 |
|---|
200 | The revoked key. 字段:id: string(uuid) key_id: string owner_scope_id: string(uuid) owner_kind: string: platform / reseller name: string ip_allowlist: array<string> status: string: active / revoked expires_at: string(date-time) last_used_at: string(date-time) created_by: string(uuid) revision: integer(int64) created_at: string(date-time) updated_at: string(date-time) revoked_at: string(date-time) |
|---|
400 | 请求体或参数不合法。 |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
404 | 请求的资源不存在。 |
|---|
409 | 请求的状态与已有资源或幂等记录冲突。 |
|---|
503 | A required dependency is unavailable. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/keys/{id}/rotate
Rotate the secret of a reseller billing bridge key
- operationId
rotateResellerBillingBridgeKey- 认证
- 登录会话:主控登录后的 Bearer 会话,由客户本人在自己的主控里使用;插件不能要求客户交出会话。
- 所需权限
全部需要:reseller.customers.manage
说明(契约原文)
Step-up action billing_bridge.key.rotate bound to the key id. The old secret stops working at once; the new one is returned once. 409 revision_conflict on a stale expected_revision, 409 key_revoked for a revoked key. Audit billing_bridge.key.rotated.
参数
rotateResellerBillingBridgeKey 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
id | path | string(uuid) | 是 | — |
|---|
请求体
application/json · 必填:是
rotateResellerBillingBridgeKey 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
expected_revision | integer(int64) | 是 | — |
|---|
step_up_token | string | 是 | — |
|---|
响应
rotateResellerBillingBridgeKey 响应| 状态码 | 说明 |
|---|
200 | The key and its new one-time secret. 字段:key: BillingBridgeKey secret: string |
|---|
400 | 请求体或参数不合法。 |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
404 | 请求的资源不存在。 |
|---|
409 | 请求的状态与已有资源或幂等记录冲突。 |
|---|
503 | A required dependency is unavailable. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
GET /v1/billing-bridge/logs
List the reseller billing bridge call log
- operationId
listResellerBillingBridgeLogs- 认证
- 登录会话:主控登录后的 Bearer 会话,由客户本人在自己的主控里使用;插件不能要求客户交出会话。
- 所需权限
全部需要:reseller.customers.manage
说明(契约原文)
Calls made with the caller's own keys only (owner scope), newest first, cursor paged. Denied calls carry the internal reason_code the caller of the bridge never sees. Rows are kept 90 days.
参数
listResellerBillingBridgeLogs 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
limit | query | integer | 否 | — |
|---|
cursor | query | string | 否 | — |
|---|
响应
listResellerBillingBridgeLogs 响应| 状态码 | 说明 |
|---|
200 | One page of log rows. 字段:items: array<BillingBridgeLogEntry> next_cursor: string has_more: boolean |
|---|
400 | 请求体或参数不合法。 |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
503 | A required dependency is unavailable. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
GET /v1/billing-bridge/ping
Billing system TestConnection with a signed bridge key
- operationId
pingBillingBridge- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Signed with the bridge headers (billingBridgeSignature). Any authentication failure (unknown key, clock skew over 300 s, replayed nonce, wrong signature, source IP outside the allowlist, revoked or expired key, owner no longer an active reseller) is 401 unauthorized with no further detail; the reason is written to the bridge log. A valid key whose plugin is not enabled gets 403 entitlement_feature_denied. Bridge keys authenticate only /v1/billing-bridge/* facade routes; every other route rejects them.
响应
pingBillingBridge 响应| 状态码 | 说明 |
|---|
200 | The key owner and server time. 字段:owner_kind: string: platform / reseller owner_scope_id: string(uuid) module_enabled: boolean server_time: string(date-time) |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
失败时怎么办
401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。
↑ 回到列表
GET /v1/billing-bridge/products
Billing system ConfigOptions — the key owner's published packages
- operationId
listBillingBridgeProducts- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
A (reseller key): the reseller's own published packages with its wholesale cost per period; B (platform key): the platform's published packages (no wholesale_minor).
响应
listBillingBridgeProducts 响应| 状态码 | 说明 |
|---|
200 | Published packages. 字段:data: array<BillingBridgeProduct> |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/services
Billing system CreateAccount — open a CDN service for a billing service
- operationId
createBillingBridgeService- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
(owner, external_system, external_service_id) is the idempotency key of the service: repeating it with the same input returns the same service (200, created false); other input is 409 bridge_service_conflict. The customer of (external_system, external_client_id) is found or opened (A: a reseller customer, B: a platform direct customer; username {system}_{client_id}, a short suffix on a clash, random password not returned). A places the order for its customer and pays the prepaid wholesale cost (422 reseller_prepaid_insufficient, reseller_wholesale_unpriced); B opens the subscription without a charge.
参数
createBillingBridgeService 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
Idempotency-Key | header | string | 是 | {system}:{service_id}:{action}:{billing task, invoice ID or date}. A retry with the same key and body replays the result; another body with the same key is 409 bridge_service_conflict. |
|---|
请求体
application/json · 必填:是
createBillingBridgeService 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
external_system | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
external_service_id | string | 是 | — |
|---|
external_client_id | string | 是 | — |
|---|
client | object | 是 | — |
|---|
product_id | string(uuid) | 是 | — |
|---|
product_revision | integer(int64) | 否 | — |
|---|
period | string: month / quarter / year | 是 | — |
|---|
响应
createBillingBridgeService 响应| 状态码 | 说明 |
|---|
201 | Opened (created true). 字段:data: BillingBridgeService |
|---|
200 | Already opened by an earlier call (created false). 字段:data: BillingBridgeService |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
GET /v1/billing-bridge/services/{system}/{service_id}
Billing system ClientArea — one service of the key owner
- operationId
getBillingBridgeService- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
A service of another owner, or not opened, is 404 bridge_service_not_found.
参数
getBillingBridgeService 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
system | path | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
service_id | path | string | 是 | — |
|---|
响应
getBillingBridgeService 响应| 状态码 | 说明 |
|---|
200 | The service. 字段:data: BillingBridgeService |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/services/{system}/{service_id}/change
Billing system ChangePackage
- operationId
changeBillingBridgeService- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Upgrade or downgrade by the new and the current period price (same price is an upgrade), effective at once. A: between the reseller's packages, prorated wholesale difference charged or returned; B: between platform packages, no customer charge.
参数
changeBillingBridgeService 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
system | path | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
service_id | path | string | 是 | — |
|---|
Idempotency-Key | header | string | 是 | {system}:{service_id}:{action}:{billing task, invoice ID or date}. A retry with the same key and body replays the result; another body with the same key is 409 bridge_service_conflict. |
|---|
请求体
application/json · 必填:否
changeBillingBridgeService 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
product_id | string(uuid) | 是 | — |
|---|
product_revision | integer(int64) | 否 | — |
|---|
period | string: month / quarter / year | 否 | — |
|---|
响应
changeBillingBridgeService 响应| 状态码 | 说明 |
|---|
200 | The service after the action. 字段:data: BillingBridgeService |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/services/{system}/{service_id}/renew
Billing system Renew
- operationId
renewBillingBridgeService- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Extends the term by period (default the current period). A renews for its customer at the wholesale cost; B renews without a charge. A retry with the same Idempotency-Key does not renew twice.
参数
renewBillingBridgeService 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
system | path | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
service_id | path | string | 是 | — |
|---|
Idempotency-Key | header | string | 是 | {system}:{service_id}:{action}:{billing task, invoice ID or date}. A retry with the same key and body replays the result; another body with the same key is 409 bridge_service_conflict. |
|---|
请求体
application/json · 必填:否
renewBillingBridgeService 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
period | string: month / quarter / year | 否 | — |
|---|
响应
renewBillingBridgeService 响应| 状态码 | 说明 |
|---|
200 | The service after the action. 字段:data: BillingBridgeService |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/services/{system}/{service_id}/sso
Billing system ServiceSingleSignOn — one-time console sign-in link
- operationId
issueBillingBridgeSso- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Returns {url, expires_at}: url is {console}/sso/bridge?ticket=…, valid 60 seconds and once. Only the ticket's digest is stored. Audited as billing_bridge.sso.issued.
参数
issueBillingBridgeSso 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
system | path | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
service_id | path | string | 是 | — |
|---|
Idempotency-Key | header | string | 是 | {system}:{service_id}:{action}:{billing task, invoice ID or date}. A retry with the same key and body replays the result; another body with the same key is 409 bridge_service_conflict. |
|---|
请求体
application/json · 必填:否
issueBillingBridgeSso 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
redirect | string | 否 | Same-site path after sign-in (default /). |
|---|
响应
issueBillingBridgeSso 响应| 状态码 | 说明 |
|---|
200 | The sign-in link. 字段:data: object |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/services/{system}/{service_id}/suspend
Billing system Suspend — stop this service only
- operationId
suspendBillingBridgeService- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Suspends the subscription: its sites stop being published, configuration is kept, the term keeps running. Other services of the customer are untouched. Already suspended succeeds without a change.
参数
suspendBillingBridgeService 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
system | path | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
service_id | path | string | 是 | — |
|---|
Idempotency-Key | header | string | 是 | {system}:{service_id}:{action}:{billing task, invoice ID or date}. A retry with the same key and body replays the result; another body with the same key is 409 bridge_service_conflict. |
|---|
请求体
application/json · 必填:否
suspendBillingBridgeService 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
reason | string | 否 | — |
|---|
响应
suspendBillingBridgeService 响应| 状态码 | 说明 |
|---|
200 | The service after the action. 字段:data: BillingBridgeService |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/services/{system}/{service_id}/terminate
Billing system Terminate
- operationId
terminateBillingBridgeService- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Cancels the subscription (sites stop) and marks the service terminated; when the customer has no other live service of this owner, the CDN account is disabled. Later actions are 409 bridge_service_terminated.
参数
terminateBillingBridgeService 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
system | path | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
service_id | path | string | 是 | — |
|---|
Idempotency-Key | header | string | 是 | {system}:{service_id}:{action}:{billing task, invoice ID or date}. A retry with the same key and body replays the result; another body with the same key is 409 bridge_service_conflict. |
|---|
响应
terminateBillingBridgeService 响应| 状态码 | 说明 |
|---|
200 | The service after the action. 字段:data: BillingBridgeService |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
POST /v1/billing-bridge/services/{system}/{service_id}/unsuspend
Billing system Unsuspend
- operationId
unsuspendBillingBridgeService- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Republishes the subscription. Already active succeeds without a change.
参数
unsuspendBillingBridgeService 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
system | path | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
service_id | path | string | 是 | — |
|---|
Idempotency-Key | header | string | 是 | {system}:{service_id}:{action}:{billing task, invoice ID or date}. A retry with the same key and body replays the result; another body with the same key is 409 bridge_service_conflict. |
|---|
响应
unsuspendBillingBridgeService 响应| 状态码 | 说明 |
|---|
200 | The service after the action. 字段:data: BillingBridgeService |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
GET /v1/billing-bridge/settings
Read the reseller billing bridge plugin settings
- operationId
getResellerBillingBridgeSettings- 认证
- 登录会话:主控登录后的 Bearer 会话,由客户本人在自己的主控里使用;插件不能要求客户交出会话。
- 所需权限
全部需要:reseller.customers.manage
说明(契约原文)
Reseller plugin settings. sso_require_mfa defaults to false (bridge SSO skips the second factor); revision 0 means never saved. Lease feature module.billing.bridge (403 entitlement_feature_denied).
响应
getResellerBillingBridgeSettings 响应| 状态码 | 说明 |
|---|
200 | Current settings. 字段:sso_require_mfa: boolean revision: integer(int64) updated_at?: string(date-time) |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
503 | A required dependency is unavailable. |
|---|
失败时怎么办
401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
PUT /v1/billing-bridge/settings
Change the reseller billing bridge plugin settings
- operationId
putResellerBillingBridgeSettings- 认证
- 登录会话:主控登录后的 Bearer 会话,由客户本人在自己的主控里使用;插件不能要求客户交出会话。
- 所需权限
全部需要:reseller.customers.manage
说明(契约原文)
Requires a step-up proof (audience billing-bridge, action billing_bridge.settings.update, bound to the owner scope): turning MFA off weakens every bridge SSO sign-in. expected_revision is the revision read (0 for the first save); a stale revision is 409. Audited as billing_bridge.settings.updated.
请求体
application/json · 必填:是
putResellerBillingBridgeSettings 请求体| 名称 | 类型 | 必填 | 说明 |
|---|
sso_require_mfa | boolean | 是 | — |
|---|
expected_revision | integer(int64) | 是 | — |
|---|
step_up_token | string | 是 | — |
|---|
响应
putResellerBillingBridgeSettings 响应| 状态码 | 说明 |
|---|
200 | Saved settings. 字段:sso_require_mfa: boolean revision: integer(int64) updated_at?: string(date-time) |
|---|
400 | 请求体或参数不合法。 |
|---|
401 | 认证失败或会话已失效。 |
|---|
403 | 当前身份没有执行该操作的权限。 |
|---|
409 | 请求的状态与已有资源或幂等记录冲突。 |
|---|
503 | A required dependency is unavailable. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表
GET /v1/billing-bridge/usage
Billing system UsageUpdate — current billing cycle usage
- operationId
getBillingBridgeUsage- 认证
- API Key:请求头 Authorization: CdncaKey <key_id>.<secret>。有效权限是 Key 的范围与所有者当前权限的交集。
- 所需权限
契约没有单独标注权限码,权限要求见下方说明与 403 响应。
说明(契约原文)
Up to 100 ids; ids that are not the owner's opened services are left out.
参数
getBillingBridgeUsage 参数| 名称 | 位置 | 类型 | 必填 | 说明 |
|---|
external_system | query | string: whmcs / zjmf / zjmf_cbap | 是 | — |
|---|
ids | query | string | 是 | Comma-separated external_service_id (1–100). |
|---|
响应
getBillingBridgeUsage 响应| 状态码 | 说明 |
|---|
200 | Usage of the current billing cycle. 字段:data: array<BillingBridgeUsage> |
|---|
400 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
401 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
403 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
404 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
409 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
412 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
422 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
503 | {"error":{"code","message","request_id"}}. Codes: bridge_unauthenticated 401, entitlement_feature_denied 403, bridge_service_not_found 404, bridge_product_not_found 404, bridge_service_conflict 409, bridge_service_terminated 409, reseller_prepaid_insufficient 422, reseller_wholesale_unpriced 422, bridge_validation_error 400; other package commerce codes as they are. |
|---|
失败时怎么办
400 按字段说明修正参数或请求体再发;不要原样重试。401 检查凭据格式、是否过期或被轮换。403 检查 Key 范围与所有者当前权限、当前租户作用域;不要换更高权限账号绕过。404 资源不存在或不属于当前租户。409 先回读资源当前状态;同一操作重试保持原 Idempotency-Key 和原请求内容。412 版本已变:回读最新 ETag 后重新判断,再带新的 If-Match 提交。503 依赖暂不可用:稍后用原 Idempotency-Key 重试。
↑ 回到列表