AI Agent 正在从“调用内部工具”走向“自主购买外部能力”。当 Agent 消耗模型 Token、查询专业数据,或调用付费 MCP 工具时,传统的订阅页面和人工结算流程很难嵌入自动化工作流。Cloudflare 推出的 Monetization Gateway Beta 尝试用 HTTP 402 Payment Required 把计费要求直接放进请求链路,让程序能够发现价格、完成支付并重试请求。
根据已公布的信息,Cloudflare AI Gateway、Ceramic.ai、Stocktwits 等服务已经在使用 Monetization Gateway,为 Token、API 和 MCP 工具访问收费。目前该产品仍处于封闭测试阶段,美国卖家可以申请参与。
402 为什么适合 Agent 消费场景
常见 API 商业化模式依赖预充值、固定套餐或长期 API Key。这些方式适合人与 SaaS 平台之间的稳定关系,却不一定适合 Agent:一个 Agent 可能只调用某项能力一次,也可能在一次任务中动态选择多个数据源。
HTTP 402 可以把“当前请求需要付费”表示为机器可处理的状态。一个典型流程可以设计成:
- Agent 请求受保护的 API 或工具。
- 网关返回
402 Payment Required,同时提供价格、计费单位和支付方式。 - Agent 或其支付组件判断预算并完成付款。
- Agent 携带支付凭证重试请求。
- 网关验证凭证,记录消费并转发请求。
这种方式的关键不是状态码本身,而是将报价、付款证明和资源交付组合成一个可自动执行的协议。它尤其适合三类资源:
- 模型 Token:按输入、输出 Token 或一次推理任务计费。
- 数据 API:按请求、数据记录、时间范围或数据新鲜度收费。
- MCP 工具:按工具调用收费,例如搜索、分析、生成报告或执行交易前检查。
需要注意,来源摘要没有给出 Monetization Gateway Beta 的正式请求头、支付凭证格式或配置 API。下面的示例只是一个可以本地运行的 HTTP 402 原型,用于理解服务端和 Agent 的交互方式;接入实际产品时,应替换为 Beta 文档规定的接口。
可运行的 402 付费 API 原型
下面用 FastAPI 模拟一个按次收费的研究数据接口。第一次调用返回 402;客户端携带演示用支付凭证后,接口返回结果。
先安装依赖:
python -m pip install fastapi uvicorn
保存为 app.py:
from fastapi import FastAPI, Header
from fastapi.responses import JSONResponse
app = FastAPI()
PRICE_USD = "0.02"
DEMO_RECEIPT = "paid-demo-receipt"
@app.post("/tools/market-summary")
async def market_summary(
symbol: str,
x_payment_receipt: str | None = Header(default=None),
):
if x_payment_receipt != DEMO_RECEIPT:
return JSONResponse(
status_code=402,
content={
"error": "payment_required",
"resource": "market-summary",
"price": {
"amount": PRICE_USD,
"currency": "USD",
"unit": "request"
},
"payment_url": "https://payments.example.test/checkout/demo",
"retry_with_header": "X-Payment-Receipt"
},
)
return {
"symbol": symbol.upper(),
"summary": "Demo data: replace this response with the protected tool output.",
"charged": {
"amount": PRICE_USD,
"currency": "USD"
}
}
启动服务:
uvicorn app:app --reload --port 8000
不带支付凭证调用:
curl -i -X POST "http://127.0.0.1:8000/tools/market-summary?symbol=NET"
响应状态将是 402 Payment Required,正文包含本次请求的模拟报价。支付完成后,Agent 可以携带凭证重试:
curl -i -X POST \
-H "X-Payment-Receipt: paid-demo-receipt" \
"http://127.0.0.1:8000/tools/market-summary?symbol=NET"
这个例子故意省略了真实支付环节。生产环境绝不能把固定字符串当作付款证明,而应验证由支付系统或 Monetization Gateway 签发的凭证,并检查金额、资源、有效期、收款方和唯一请求标识。
Agent 端不能只看到“付费或拒绝”
要让 Agent 安全地自动消费,调用方还需要明确的预算策略。可以在 Agent 工作流中加入类似下面的判断:
MAX_PRICE_PER_CALL = 0.05
quote = {
"amount": "0.02",
"currency": "USD",
"unit": "request",
}
price = float(quote["amount"])
if quote["currency"] != "USD":
raise RuntimeError("Unsupported settlement currency")
if price > MAX_PRICE_PER_CALL:
raise RuntimeError(f"Quote ${price:.2f} exceeds agent budget")
print("Quote accepted; hand off to the configured payment component.")
真实系统还应设置任务总预算、每日限额、允许购买的服务清单,以及需要人工批准的金额阈值。否则,提示注入、循环调用或错误重试都可能变成真实的财务损失。
对 MCP 工具尤其要注意:MCP 描述了模型与工具之间的交互方式,但工具的实际传输和部署结构可能不同。只有当调用链路经过支持计费的 HTTP 服务或网关时,HTTP 402 才能直接参与控制;不要假设所有 MCP 传输方式都会自动理解 402。
上线前应补齐的工程控制
把演示升级为生产服务时,至少要处理以下问题:
- 报价绑定:付款凭证必须绑定具体资源、价格和请求参数,避免低价凭证被用于高价调用。
- 防重放:使用 nonce、过期时间或一次性凭证,阻止同一付款证明被重复消费。
- 幂等性:Agent 超时重试时,不应被重复扣费;写操作还要避免重复执行。
- 账务记录:保存报价、付款、验证、资源交付和退款记录,便于审计与争议处理。
- 成本可观测性:同时记录 Agent、租户、工具、模型和任务 ID,才能定位异常消费。
- 失败语义:明确区分付款失败、凭证无效、余额不足、资源不可用和上游超时。
- 安全边界:不能因为请求已经付款,就跳过身份验证、授权、速率限制和内容安全检查。
是否值得现在接入
如果你的服务已经向 Agent 出售高价值数据、模型调用或 MCP 工具,HTTP 402 值得尽早做协议层实验。它能把商业规则放入机器可读的请求流程,减少预先签约和人工开通带来的摩擦。
不过,Monetization Gateway 目前仍是封闭 Beta,且现阶段开放申请的是美国卖家。更稳妥的做法是先把内部计量、价格模型、幂等性和预算控制设计好,再根据正式 Beta 文档接入真实的凭证验证与结算流程。这样即使未来更换支付提供方,资源 API 与业务逻辑也不必跟着重写。