accepts 里有什么、PAYMENT-SIGNATURE 又是怎样让同一个 API 请求变成已支付请求的。
准备工作
你需要准备:
X402 调用 Ace Data Cloud API 时不需要 API Token。SDK 第一次请求不带
Authorization,Gateway 会返回 402 Payment Required 和支付要求;SDK 签名后自动重试。
安装 SDK
源码和包地址:- SDK 仓库:https://github.com/AceDataCloud/SDK
- X402 Client 仓库:https://github.com/AceDataCloud/X402Client
- npm:
@acedatacloud/sdk、@acedatacloud/x402-client - PyPI:
acedatacloud、acedatacloud-x402
acedatacloud-x402 中。
干净临时环境的安装和导入检查输出:
- npm 包和 PyPI 包都是真实发布包,不是文档里的占位名称。
acedatacloud-x402[cli]会安装 CLI,approve-permit2子命令可用于upto场景的 Permit2 授权。
第一次请求会返回 402
你可以先用curl 看看未支付请求返回什么。下面示例不会产生扣费,因为它没有携带 PAYMENT-SIGNATURE:
accepts 数组,常见结构如下:
PAYMENT-REQUIRED 响应头中,便于客户端不解析 body 就读取支付要求。
生产 API 未支付请求的程序输出摘要如下:
- 第一次请求没有携带
Authorization或PAYMENT-SIGNATURE,所以返回 HTTP 402,不会产生扣费。 accepts是本次请求唯一可信的签名依据,包含可选网络、scheme、金额上限、收款地址和资产地址。network是 CAIP-2 标识,客户端选网时必须按 CAIP-2 字符串匹配。- 这次
gpt-4o-mini最小聊天请求的上限金额是95215atomic USDC,也就是0.095215USDC。 - 每次请求都应该读取当次 402 响应,不要把示例金额硬编码进业务代码。
用 SDK 完成支付重试
下面是最小 TypeScript 示例。它指定network: 'skale',handler 会从本次 402 响应中选择 SKALE 的 payment requirement;实际金额和收款地址仍以 accepts 为准:
content ADC_TS_SDK_X402_OK是模型按提示词返回的固定字符串,说明付费重试后请求真实进入了模型 API。payer是本地签名钱包地址,私钥没有发送给 Ace Data Cloud。- SDK 完成了 402 解析、
PAYMENT-SIGNATURE签名和原请求重试;业务代码仍按普通 SDK 调用方式写。
- SDK 发送一次普通 API 请求,不带
Authorization。 - Gateway 返回
402 Payment Required和accepts。 createX402PaymentHandler选择network = 'skale'的 payment requirement 并签出PAYMENT-SIGNATURE。- SDK 用同一个请求体重试,Gateway 调用 Facilitator 验证并结算后放行到目标 API。
查看 Facilitator 支持能力
X402 API 不依赖资源目录。客户端直接调用已知 API,并以该请求实时返回的402 Payment Required 和 accepts 作为唯一价格与签名依据。
Facilitator 的能力声明位于:
/supported、/verify、/settle 和当前启用的支付网络,不列出 API 资源。
Ace Data Cloud 的生产 Facilitator 地址为:
kinds 会列出 Facilitator 支持的网络和 scheme。实际调用时仍以 API 返回的 accepts 为准。
Facilitator /supported 输出:
/supported说明 Facilitator 具备这些网络和 scheme 的验证、结算能力。- Base、SKALE 和 Solana 都支持
exact;upto目前只在 Base 上提供。 - 具体 API 是否允许某个网络,仍以该 API 的 402
accepts为准。

