exact 和 upto。它們解決的是不同計費問題。
exact
exact 表示本次請求在進入目標 API 前就能確定價格。客戶端簽名的金額就是最終扣款金額。
適合:
- 固定價格的圖片生成;
- 固定價格的視頻任務創建;
- 固定價格的搜索或工具 API;
- 訂單支付。
exact 使用 USDC EIP-3009 TransferWithAuthorization:
/verify 階段驗證簽名和金額,在 /settle 階段把這筆授權提交到鏈上。
upto
upto 表示客戶端授權一個最大上限,Ace Data Cloud 在請求完成後按實際用量結算,實際扣款不能超過上限。
適合:
- 聊天補全:最終價格取決於 prompt tokens 和 completion tokens;
- 流式響應:真實輸出長度結束後才知道;
- 未來的後置計量 API。
upto 使用 Permit2 PermitWitnessTransferFrom。客戶端簽名的不是固定轉帳,而是一個帶 witness 的上限授權:
permitted.amount 是上限,不一定是最終扣款。Gateway 在 /record 階段會把實際用量轉換成 amount 傳給 Facilitator。Facilitator 只允許結算 amount <= permitted.amount。
Base upto 的程序運行結果:
- 402 中返回的授權上限是
95215atomic USDC,客戶端按這個上限簽名。 - 模型實際響應後只結算
3atomic USDC,鏈上交易已在 BaseScan 可查。 - 這個結果能說明
upto的關鍵差異:簽名金額是上限,鏈上 settlement 可以小於上限。 - 如果實際用量超過上限,Facilitator 應拒絕 settlement,客戶端需要重新按更高上限授權。
upto 目前只在 Base 上提供。SKALE 只提供 exact,如果你需要後置計量,請使用 Base。
為什麼需要 Permit2 approve
upto 最終由 x402 proxy 通過 Permit2 從付款錢包拉取 USDC。第一次使用前,付款錢包需要給 Permit2 一次 ERC-20 allowance。
Python CLI:
upto envelope,因為 nonce、deadline、witness 和金額上限都不同。
零金額結算
upto 支持實際金額為 0 的情況。例如目標 API 沒有成功產生可計費用量,Gateway 可以傳入 amount = "0"。Facilitator 會返回成功,但不會發鏈上交易。
這可以避免“請求沒有成功但仍然扣鏈上費用”的問題。
選擇建議
如果你不確定該選哪個,先使用 SDK 默認行為;SDK 會選擇伺服器返回的匹配網路 payment requirement。
Base upto 檢查清單
接入或排查時,請確認以下參數來自同一次 402 響應,並在客戶端簽名時保持一致:
常見錯誤及處理方式:

