name: bondterminal-x402 description: > 使用x402无密钥支付查询BondTerminal API。无需API密钥—— 在Base主网上每次请求支付0.01美元USDC。当用户询问阿根廷 债券数据、分析、现金流、历史记录、风险国家或ISIN/代码查询时使用 (例如AL30、GD30、US040114HS26)。支持自动402→支付→重试。 metadata: author: 0juano version: “2.1.0”
BondTerminal x402
使用x402按次付费认证查询BondTerminal API。无需API密钥,无需订阅——只需签名并按请求付费。
成本: 在Base主网上每次请求0.01美元USDC。
API端点
基础URL:https://bondterminal.com/api/v1
| 方法 | 端点 | 描述 | 认证 |
|---|---|---|---|
| GET | /treasury-curve |
美国国债收益率曲线 | 免费 |
| GET | /bonds |
列出所有债券(60+) | x402 |
| GET | /bonds/:id |
通过ISIN或本地代码获取债券详情 | x402 |
| GET | /bonds/:id/analytics |
价格、到期收益率、久期、利差 | x402 |
| GET | /bonds/:id/cashflows |
现金流计划 | x402 |
| GET | /bonds/:id/history |
历史价格/收益率/利差 | x402 |
| POST | /calculate |
基于自定义价格的债券分析 | x402 |
| GET | /riesgo-pais |
当前阿根廷国家风险 | x402 |
| GET | /riesgo-pais/history |
历史风险国家序列 | x402 |
| POST | /calculate/batch |
批量计算 | 仅限Bearer令牌 |
标识符格式: ISIN(US040114HS26),带D/C后缀的本地代码(AL30D,GD30D)。
完整文档:https://bondterminal.com/developers
此技能中的端点参考:references/endpoints.md
x402工作原理
- 无认证调用任何x402端点 → 服务器返回带
PAYMENT-REQUIRED头的402状态码 - 解码头部(base64 JSON)获取支付要求(金额、资产、网络、收款地址)
- 通过x402客户端库签署EIP-3009
transferWithAuthorization - 在
PAYMENT-SIGNATURE头(v2)中携带已签名的支付信息重试请求,X-PAYMENT作为旧版备用方案 - 服务器通过Coinbase协调器验证支付,返回数据 +
PAYMENT-RESPONSE头
设置
1. 安装依赖
npm install @x402/core @x402/evm viem
注意: 代码示例使用ES模块。使用
.mjs文件扩展名或在package.json中添加"type": "module"。
2. 配置签名者
x402支付流程需要在Base主网上拥有USDC余额的EVM签名者。按照x402 EVM文档配置您的签名者。
签名者必须实现{ address, signTypedData }——任何与viem兼容的钱包客户端都适用(硬件钱包、KMS、注入提供者等)。
完整签名者配置示例请参见references/signer-setup.md。
3. 注册x402客户端
import { x402Client } from '@x402/core/client';
import { x402HTTPClient } from '@x402/core/http';
import { ExactEvmScheme } from '@x402/evm'; // 确切的导出名称
// signer = { address, signTypedData } — 参见references/signer-setup.md
const scheme = new ExactEvmScheme(signer);
const client = new x402Client();
client.register('eip155:8453', scheme); // Base主网
const httpClient = new x402HTTPClient(client);
获取债券数据
async function fetchBT(path) {
const url = `https://bondterminal.com/api/v1${path}`;
let res = await fetch(url);
if (res.status === 402) {
const paymentRequired = httpClient.getPaymentRequiredResponse(
(name) => res.headers.get(name),
await res.json()
);
const payload = await httpClient.createPaymentPayload(paymentRequired);
// 首选v2头部
res = await fetch(url, {
headers: httpClient.encodePaymentSignatureHeader(payload),
});
// 旧版备用方案,适用于仍期望X-PAYMENT的服务器
if (res.status === 402) {
const encoded = Buffer.from(JSON.stringify(payload)).toString('base64');
res = await fetch(url, { headers: { 'X-PAYMENT': encoded } });
}
}
if (!res.ok) {
throw new Error(`BondTerminal请求失败(${res.status})`);
}
return res.json();
}
// 示例
const bonds = await fetchBT('/bonds');
const analytics = await fetchBT('/bonds/AL30D/analytics');
const riesgo = await fetchBT('/riesgo-pais');
快速测试
验证免费和付费流程:
await fetchBT('/treasury-curve'); // 免费路由(无需支付)
await fetchBT('/riesgo-pais'); // 付费路由(触发x402流程)
钱包要求
签名钱包需要:
- Base网络上的USDC——用于每次请求0.01美元的支付
无需ETH作为gas费——x402使用EIP-3009(链下签名),而非链上交易。
注意事项
POST /calculate/batch需要Bearer API密钥订阅——无法通过x402使用- 本地代码需要D/C后缀:
AL30D(美元),AL30C(阿根廷比索)——而非AL30 - 结算在链上进行:每次付费调用都会产生可验证的交易哈希
PAYMENT-RESPONSE头部包含结算元数据(支付者、交易哈希、网络)