使用 OKX x402 付款:注册 agent 并充值 x402 让客户端使用稳定币为单个请求付款。BazaarLink 接受 x402 付款(经 OKX 的 x402 facilitator 在 X Layer 结算)来注册 agent 账户,也可以为现有账户充值。本页按两个路由的实际行为说明。
402 流程 两个路由都遵循相同的三步:请求、签名、重发。
先不带付款发送请求。服务器返回 402 Payment Required,JSON 内容包含 x402Version、resource 和 accepts(network、asset、amount、payTo、maxTimeoutSeconds)。 使用你自己的钱包密钥,为 accepts 中的一项签署付款授权。 再次发送相同请求,并在 X-PAYMENT 标头中放入 base64 编码的付款载荷。标头名称 payment-signature 也会作为别名接受。 以响应中的要求为准
请从 402 响应中读取 network、asset 和 amount,不要硬编码。amount 使用资产的最小单位(USDT0 为 6 位小数)。两次请求都要发送相同的 JSON 请求体。
注册 agent POST https://bazaarlink.ai/api/v1/agents/register/x402
POST /api/v1/agents/register/x402 通过一次付费请求创建 agent 账户、API key 和初始余额。不需要 API key,也不需要登录。
请求体 name必填
string
agent 名称,1 到 100 个字符。
description
string
可选说明,最多 4000 个字符。
amountUsd必填
number
支付金额,单位为美元,必须是正数。构建 402 前会将其限制在允许范围内(当前为 $1 到 $50),因此请从响应中读取金额。
未知字段会被拒绝,并返回 400 bad_request。
1. 先请求,不付款 响应为 402,并包含付款要求。此时尚未创建任何内容。
curl -i -X POST https://bazaarlink.ai/api/v1/agents/register/x402 \
-H "Content-Type: application/json" \
-d '{"name":"my-agent","amountUsd":1.1}' 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
HTTP/1.1 402 Payment Required
Content-Type : application/json
{
"x402Version" : 2 ,
"resource" : {
"url" : "https://bazaarlink.ai/api/v1/agents/register/x402" ,
"description" : "BazaarLink paid agent registration" ,
"mimeType" : "application/json"
} ,
"accepts" : [
{
"scheme" : "exact" ,
"network" : "eip155:196" ,
"payTo" : "0xPAY_TO_ADDRESS" ,
"asset" : "0xASSET_CONTRACT" ,
"amount" : "1100000" ,
"maxTimeoutSeconds" : 300 ,
"extra" : { "name" : "USD₮0" , "version" : "1" }
}
]
}
⌄ 显示全部 22 行2. 签名并重发 使用你自己的钱包签名,然后在 X-PAYMENT 标头中发送相同请求。curl 命令展示请求,下方 TypeScript 示例会生成标头值。
curl -i -X POST https://bazaarlink.ai/api/v1/agents/register/x402 \
-H "Content-Type: application/json" \
-H "X-PAYMENT: <base64 payment payload>" \
-d '{"name":"my-agent","amountUsd":1.1}' TypeScript 示例 此示例使用 @okxweb3/x402 客户端软件包和 viem。可以使用 OKX Wallet 或任何钱包密钥签名。私钥保留在你的设备上,只有签名后的授权会被发送。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import { x402Client } from "@okxweb3/x402-core/client" ;
import type { Network } from "@okxweb3/x402-core/types" ;
import { toClientEvmSigner } from "@okxweb3/x402-evm" ;
import { ExactEvmScheme } from "@okxweb3/x402-evm/exact/client" ;
import { privateKeyToAccount } from "viem/accounts" ;
const URL = "https://bazaarlink.ai/api/v1/agents/register/x402" ;
const HEADERS = { "content-type" : "application/json" };
const BODY = JSON .stringify ({ name : "my-agent" , amountUsd : 1.1 });
const challenge = await fetch (URL , { method : "POST" , headers : HEADERS , body : BODY });
if (challenge.status !== 402 ) throw new Error ("unexpected status " + challenge.status );
const paymentRequired = await challenge.json ();
const privateKey = readSecret ("payer-private-key" ) as `0x${string } ` ;
const signer = toClientEvmSigner (privateKeyToAccount (privateKey));
const client = new x402Client ().register (
paymentRequired.accepts [0 ].network as Network ,
new ExactEvmScheme (signer),
);
const payload = await client.createPaymentPayload (paymentRequired);
const xPayment = Buffer .from (JSON .stringify (payload), "utf8" ).toString ("base64" );
const res = await fetch (URL , { method : "POST" , headers : { ...HEADERS , "x-payment" : xPayment }, body : BODY });
const account = await res.json ();
console .log (res.status , account.credits_usd );
⌄ 显示全部 29 行请将钱包私钥放在环境变量或密钥存储中,切勿写入源代码。
注册响应 注册成功会返回 201 及以下字段。API key 只会在这里显示一次,请立即保存。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
HTTP/1.1 201 Created
Content-Type : application/json
{
"api_key" : "sk-bl-..." ,
"credits" : 1,
"credits_usd" : "$1 .0000" ,
"claim_token" : "..." ,
"claim_expires" : "2026-10-08T00:00:00.000Z" ,
"upgrade_url" : "https://bazaarlink.ai/claim?token=..." ,
"referral_code" : "..." ,
"free_model" : "auto:free" ,
"message" : "..." ,
"referral_message" : "..." ,
"base_url" : "https://bazaarlink.ai/api/v1" ,
"docs" : "https://bazaarlink.ai/llms.txt" ,
"payment" : {
"txHash" : "0xTX_HASH" ,
"network" : "eip155:196" ,
"amountUsd" : 1.1,
"paidUsd" : 1.1,
"creditedUsd" : 1,
"serviceFeeUsd" : 0.1
}
}
⌄ 显示全部 25 行credits
number
入账余额,单位美元:付款金额扣除平台充值手续费。
credits_usd
string
同一余额的格式化字符串。
claim_token
string
真人可用于认领账户的令牌。
claim_expires
string
认领账户的 ISO 8601 截止时间。
upgrade_url
string
给真人使用的认领链接,以 /claim?token= 结尾。
referral_code
string
新 agent 账户的推荐码。
free_model
string
始终为 auto:free,即使没有余额也可使用的模型。
message
string
agent 可展示给其所有者的现成文本。
referral_message
string
关于推荐码的文本。
base_url
string
与新 key 搭配使用的 API base URL。
payment
object
对象,包含这笔付款的 txHash、network 和 amountUsd,另有 paidUsd、creditedUsd 和 serviceFeeUsd。
为现有余额充值 POST https://bazaarlink.ai/api/x402/topup
POST /api/x402/topup 为拥有该 API key 的账户或已登录的 session 增加余额。402 流程相同,请求体只有 amountUsd。
使用 Authorization: Bearer 加上你的 API key 进行身份验证,或使用已登录的浏览器 session。
curl -i -X POST https://bazaarlink.ai/api/x402/topup \
-H "Authorization: Bearer $BAZAARLINK_API_KEY " \
-H "Content-Type: application/json" \
-H "X-PAYMENT: <base64 payment payload>" \
-d '{"amountUsd":1.1}' 充值成功会返回 200,内容包含 status 为 credited、以美元计的新余额、txHash,以及 paidUsd、creditedUsd 和 serviceFeeUsd(实际付款、入账金额和平台充值手续费)。
HTTP/1.1 200 OK
Content-Type : application/json
{
"status" : "credited" ,
"balance" : 12.5 ,
"txHash" : "0xTX_HASH" ,
"paidUsd" : 1.1 ,
"creditedUsd" : 1 ,
"serviceFeeUsd" : 0.1
}
⌄ 显示全部 11 行
const URL = "https://bazaarlink.ai/api/x402/topup" ;
const HEADERS = {
"content-type" : "application/json" ,
authorization : "Bearer " + process.env .BAZAARLINK_API_KEY ,
};
const BODY = JSON .stringify ({ amountUsd : 1.1 });
⌄ 显示全部 9 行读取当前限额 GET https://bazaarlink.ai/api/x402/topup
GET /api/x402/topup 无需身份验证,会返回 minUsd、maxUsd 和 network。
curl https://bazaarlink.ai/api/x402/topup{ "minUsd" : 1 , "maxUsd" : 50 , "network" : "eip155:196" } 重复付款与重发 同一份签名授权只能使用一次。服务器会在联系付款网络之前识别重复付款,因此重试不会让你支付两次。
充值:重发已经入账的付款会返回 200,status 为 already_credited。
注册:15 分钟内,同一笔签名付款会返回相同的 201 响应(包含 API key),因此网络失败时可以安全重试。之后会返回 200,status 为 already_registered,并带有付款 txHash,但不会再次显示 API key。
错误响应 x402 路由以 { "error": { "message", "code" } } 返回错误。有两种响应不同:410 使用 { "error", "code" },429 使用 { "error" } 并带有 Retry-After 标头。
400bad_request请求体无效:类型错误、缺少 name 或包含未知字段。
400topup_unavailable此账户不能进行充值。
401unauthenticated仅适用于充值:没有有效的 API key 或 session。
402(payment requirements body)尚未有可用付款。请求体包含付款要求,请签名后重发。付款与要求不匹配或验证失败时,也会返回此错误。
402payment_amount_too_low已结算金额低于请求金额。
403geo_blocked你所在的地区不能使用 x402。
410agent_register_discontinuedagent 注册已关闭。
429(Retry-After header)来自同一网络来源的注册过多。请等待 Retry-After 指定的秒数。
502facilitator_error付款无法验证或结算,请稍后重试。
502settlement_error已收到付款,但无法入账。请重发同一笔付款,不要签署新的付款。
502registration_error已收到付款,但无法创建账户。请重发同一笔付款,不要签署新的付款。
503disabled / runtime_disabledx402 当前已关闭或尚未配置。
503asset_unavailable / dedup_unavailable依赖项(资产配置、重复检查或充值检查)暂时无法使用,请稍后重试。
503signup_disabled / agent_register_unavailable注册暂时停用或无法使用。
将账户交给真人 将响应中的 upgrade_url 发送给账户所有者。对方登录并认领后,API key 和余额会转入其账户。请在 claim_expires 之前完成认领。
https://bazaarlink.ai/claim?token=<claim_token>网络与资产 目前是 X Layer 上的 USDT0,经 OKX 的 x402 facilitator 结算。充值时会收取平台充值手续费,入账余额会低于付款金额(详见价格说明)。付款在链上结算,无法撤回,签名前请确认金额和网络。
如需概览,请参阅 x402 agent 付款页面。