先看报价单位是"单次调用费用"还是"上限预授权",你看到的异常扣款很可能是把upto方案的上限金额当成了实际扣款金额。
前几天一个做AI数据抓取的朋友跑过来给我看账单:调一个天气查询API,标价0.005 U/次,结果钱包被扣了0.5 U。他截图给我看x402的报价,maxAmountRequired写着0.5 USDC,他没多想就签了。问题就出在这里——这个API走的是upto计费模式,0.5 U是上限,不是实际价格。
x402 报价的两种模式
这是整个误会的源头。
exact(固定价):处理前价格就确定了。报价多少,最后就扣多少。适合图片生成、文件下载、搜索结果这类产出固定的服务。
upto(用量后置计量):处理前只给一个"最高上限",实际用量结束后按真实消耗结算。聊天补全、数据流式输出、长时间运行的计算任务常用这种模式。
关键是:upto模式下,你签名授权的是上限金额,不是实际扣款金额。 但钱包弹窗里显示的maxAmountRequired就是你签的那个数,很多用户看到这个数字就以为会扣这么多。
某数据API平台的官方价格说明明确区分了这两种形态:exact模式下maxAmountRequired就是应付金额,upto模式下先授权上限,实际按用量结算,且不超过该上限。
搞清楚你遇到的是哪种情况
情况A:你看到的是上限,但以为会被扣这么多
表现:钱包弹窗显示0.5 U,你签了,最后钱包实际只扣了0.005 U。
问题在哪:你没看错报价,但看错了模式。upto模式的授权金额是"最高可扣",实际扣款在服务完成后才发生。
怎么做:查看服务响应里的cost.amount字段,或者x402结算后的settlement明细。那里显示的是真实扣款金额,不是授权上限。
完成标准:找到实际扣款记录,确认金额远低于签名时的maxAmountRequired。
情况B:你真的被扣了上限金额
表现:钱包扣款金额 = maxAmountRequired,而且没退回来。
可能原因:
这是exact模式,报价就是真实价格——那说明这个API本来就这么贵,你没看错单位,只是对价格预期有误
这是upto模式,但你的用量确实跑到了上限——比如聊天的token数达到了模型上限
服务端异常导致结算时没按实际用量修正,直接按上限扣了
怎么做:
去服务提供方的Dashboard或调用日志里查本次请求的"实际用量"和"结算金额"
对比实际用量 × 单价 是否等于扣款金额
如果实际用量对应的费用远低于扣款,拿日志找服务商对账
高危提醒:x402协议里upto模式下,如果上游服务返回4xx或5xx错误,结算会被跳过,不扣款。但如果你签了上限授权之后服务正常返回了2xx,结算就会触发——不管实际用量是多少,扣款按实际用量算,但前提是服务端正确实现了计量逻辑。如果服务端实现有bug,把maxAmountRequired当固定金额处理了,那你会被多扣。
步骤1:查实际结算金额
怎么看:
如果是通过facilitator处理的,去facilitator的Dashboard查settlement详情
如果服务商提供了x402scan之类的查询工具,输入你的支付标识符,可以看到完整结算记录
直接在区块链浏览器上查收款地址的交易,看实际到账金额
完成标准:拿到实际结算金额,区分"授权上限"和"真实扣款"。
步骤2:对照服务商的计价规则
找到你调用服务的官方价格说明。
查什么:
该服务的计价单位:是按次、按token数、按计算时间还是按数据量
如果是聊天类API,查该模型的1M token输入/输出单价
确认你的调用用量,乘以单价,看是否匹配扣款金额
完成标准:能列出一个简单的计算式:实际用量 × 单价 = 实际扣款金额。
验证收尾
把"签名的上限"和"实际结算金额"放在一起对比。
核验渠道:
钱包里看最终扣款金额
服务商日志里看本次调用的实际用量
如果是upto模式,确认maxAmountRequired只用于预授权,不是最终扣款
如果实际扣款远低于签名上限,说明你遇到了upto的正常用法,虚惊一场。如果实际扣款等于上限且用量没跑到上限,保留日志去联系服务商技术支持对账。



