Skip to main content
所有错误都采用相同的结构:
  • error:稳定的 snake_case 错误码——请在您的业务逻辑中使用它。
  • message:面向人类的说明——可能变化,不要解析它。
已脱敏的错误信息。 错误的 message 绝不会暴露供应商名称、基础设施细节、URL、上游原始响应体(JSON/HTML)或内部配置——无论是 API 响应、webhook 还是持久化的状态字段都不会。来自支付处理方的业务性拒绝会保留可操作的失败原因(例如某份文件或账户为何被拒绝);基础设施故障会被替换为固定的通用信息 "the payment provider could not process the request"——请使用相同的 idempotency_key 重试这些操作。
| payin_corridor_unsupported | 请求的国家/币种/方式没有可用的 payin provider — 重新读取 GET /v1/payins/methods | | 502 | deposit_account_failed | 无法配置专属收款账户;重试前先读取账户列表 |

按类别划分的错误码

身份认证与权限

OTP / 双因素认证

完整流程和详情见安全与双因素认证。

社交登录(OAuth)

完整流程和详情见社交登录。

组织管理面板

以下错误码来自组织管理界面(CBPay Admin 面板),并非上文所述的账户级 API —— 它们不会出现在账户级 /v1/* 端点中。

校验(400)

QR payin 幂等性

对于 method: "qr" 的 POST /v1/payins,idempotency_key 是可选的。 可以在 JSON body 或 Idempotency-Key 请求头中发送;两者同时存在时以 body 中的值为准。key 最多 256 个字符,且不能包含 CR/LF。平台会在服务 端按账户对 key 做命名空间隔离;集成方发送的 key 不会被改写。
  • 400 invalid_idempotency_key:key 超过 256 个字符或包含 CR/LF。修正 key 后,用修正后的请求重试。
  • 409 idempotency_conflict:相同 key 被用于不同国家、币种、方式或数值 金额。要 replay,请保留原始 payload;要创建新收款,请使用新的 key。
相同 key 与相同 payload 会返回原始收款,并带有 idempotency_hit: true,不会创建第二笔收款。金额按数值比较 (100 与 100.00 相同);glosa 只是展示文本,不参与 replay 身份。 使用 GET /v1/payins/{payinID} 查询实时状态。

资金与状态(402 / 404 / 409 / 422 / 429)

| 422 | deposit_account_not_recoverable | 待处理目的地不是可恢复的 MX/MXN/bank_transfer 工具 | | 422 | export_rejected | 处理方拒绝了该独立钱包的私钥导出 | | 422 | stored_card_corridor_mismatch | 该已保存卡片属于与本次收款不同的国家/货币走廊 | | 409 | subscription_state | 该订阅当前状态不允许该操作(例如暂停已取消的计划) | | 409 | email_required | 该登录没有真实邮箱;请通过 POST /v1/me/email/change 设置 | | 422 | payin_not_refundable | 该收款未入账或没有处理机构凭证,无法退款 | | 422 | refund_not_supported | 该通道不支持退款(QR、报备转账、专属账户、代扣)。POS 收款通过加密通道退款 | | 422 | refund_exceeds_payin | 退款超过该收款的剩余可退金额;余额未变动 | | 422 | settlement_pending | 该收款的余额仍在结算排期中,释放(到达 settle_at 或由组织管理员释放)前无法退款 | | 400 | invalid_amount | 退款的 amount 必须是以收款币种表示的正十进制数 | | 503 | refund_event_pending | 退款结果已保存,但最终事件仍在持久化。请使用相同幂等键重试;不要发送第二笔退款 | | 503 | payin_event_pending | 收款已入账,但最终事件仍在核对中。请使用相同幂等键重试;不要创建新的收款 |

合规(403 / 503)

Qscore

信用局端点的错误(指南)。

交易防火墙

被交易防火墙挂起的操作在审核时返回的错误(见指南)。挂起本身不是错误:创建请求返回 202 Accepted 并携带 status: in_review 和 review_id。

实时事件(SSE)

来自 GET /v1/events 及其历史查询的错误码。

消息签名与钱包绑定

来自钱包消息签名的错误码(EVM 上的 EIP-191、TRON 上的 TIP-191):使用隔离钱包的服务端签名(POST /v1/segregated-wallets/{id}/signatures,会生成可公开验证的签名证明),以及通过挑战绑定外部钱包(POST /v1/wallet-links/challenges → 用你的钱包签名挑战 → POST /v1/wallet-links/verify)。

服务端(5xx)

如何处理

  • 校验类 4xx:修正请求。不要原样重试。
  • 402:为账户充值后重试(仅当操作从未被创建时才使用新的幂等键)。
  • 5xx / 超时:使用相同的幂等键重试;操作绝不会重复。

Qscore 欺诈与 Index

走廊生命周期

Banking 创建恢复错误

EUR Banking 与虚拟 IBAN 错误

账户批量消息错误代码

以下代码来自组织管理 broadcast 端点,便于共享 SDK 使用统一的错误目录。

Banking EUR 与企业钱包错误

账户集成策略

争议与欺诈

SEPA 资金来源错误

这些错误会在客户 payout 或 EUR Banking 操作扣款、dispatch 之前返回:

出金限额错误

dispute_fiat_unsupported

本地保留 BOB、MXN 或 ARS 的 payin 暂不支持争议。请使用受支持的 USD 或 USDT 入账,或等待本地法币争议功能。

阿根廷银行别名与个人资料别名

Grupo CB 主协议签署仪式

以下错误适用于 POST /v1/me/contracts/envelopes/{envelopeID}/sign 和 合同信封资源。为保护隐私,message 可能是固定的泛化文本;code 是稳定 的集成契约。

环境切换

双因素与 passkey

Checkout 与 payout 文档

destination_recently_rejected

确认值只对该目的地最近一次拒绝有效。使用相同幂等键但修改 options 会返回 idempotency_conflict(409)。其他 payout 方式以及没有 近期拒绝记录的目的地继续走正常的校验和发送流程。

身份验证抗攻击加固错误

POST /v1/auth/password/forgot 为防止枚举始终返回 200。每个账户每小时静默停止实际发送(上限 5 次);POST /v1/auth/password/reset 允许每个账户每 15 分钟尝试 8 次验证码。

成员恢复链接

US/USD 出金校验

以下错误会在 ach、wire 和 swift 出金扣款前返回:
最后修改于 2026年10月17日