Learn-skills.dev bondterminal-x402
install
source · Clone the upstream repo
git clone https://github.com/NeverSight/learn-skills.dev
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/NeverSight/learn-skills.dev "$T" && mkdir -p ~/.claude/skills && cp -r "$T/data/skills-md/0juano/agent-skills/bondterminal-x402" ~/.claude/skills/neversight-learn-skills-dev-bondterminal-x402 && rm -rf "$T"
manifest:
data/skills-md/0juano/agent-skills/bondterminal-x402/SKILL.mdsource content
BondTerminal x402
Query the BondTerminal API with x402 pay-per-call auth. No API key, no subscription — just sign and pay per request.
Cost: $0.01 USDC per request on Base mainnet.
API Endpoints
Base URL:
https://bondterminal.com/api/v1
| Method | Endpoint | Description | Auth |
|---|---|---|---|
| GET | | US Treasury yield curve | Free |
| GET | | List all bonds (60+) | x402 |
| GET | | Bond details by ISIN or local ticker | x402 |
| GET | | Price, YTM, duration, spreads | x402 |
| GET | | Cashflow schedule | x402 |
| GET | | Historical price/yield/spread | x402 |
| POST | | Bond analytics from custom price | x402 |
| GET | | Current Argentina country risk | x402 |
| GET | | Historical riesgo país series | x402 |
| POST | | Batch calculations | Bearer only |
Identifier formats: ISIN (
US040114HS26), local ticker with D/C suffix (AL30D, GD30D).
Full docs: https://bondterminal.com/developers Endpoint reference in this skill:
references/endpoints.md
How x402 Works
- Call any x402 endpoint without auth → server returns
with402
headerPAYMENT-REQUIRED - Decode the header (base64 JSON) to get payment requirements (amount, asset, network, payTo)
- Sign an EIP-3009
via the x402 client librarytransferWithAuthorization - Retry the request with the signed payment in the
header (v2), withPAYMENT-SIGNATURE
as legacy fallbackX-PAYMENT - Server verifies payment via Coinbase facilitator, returns data +
headerPAYMENT-RESPONSE
Setup
1. Install dependencies
npm install @x402/core @x402/evm viem
Note: The code examples use ES modules. Use
file extension or add.mjsto your"type": "module".package.json
2. Configure a signer
The x402 payment flow requires an EVM signer on Base mainnet with USDC balance. Configure your signer following the x402 EVM documentation.
The signer must implement
{ address, signTypedData } — any viem-compatible wallet client works (hardware wallet, KMS, injected provider, etc).
See
references/signer-setup.md for a complete signer configuration example.
3. Register the x402 client
import { x402Client } from '@x402/core/client'; import { x402HTTPClient } from '@x402/core/http'; import { ExactEvmScheme } from '@x402/evm'; // exact export name // signer = { address, signTypedData } — see references/signer-setup.md const scheme = new ExactEvmScheme(signer); const client = new x402Client(); client.register('eip155:8453', scheme); // Base mainnet const httpClient = new x402HTTPClient(client);
Fetching Bond Data
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); // Preferred v2 header res = await fetch(url, { headers: httpClient.encodePaymentSignatureHeader(payload), }); // Legacy fallback for servers still expecting 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 request failed (${res.status})`); } return res.json(); } // Examples const bonds = await fetchBT('/bonds'); const analytics = await fetchBT('/bonds/AL30D/analytics'); const riesgo = await fetchBT('/riesgo-pais');
Quick Test
Validate both free and paid flows:
await fetchBT('/treasury-curve'); // free route (no payment) await fetchBT('/riesgo-pais'); // paid route (triggers x402 flow)
Wallet Requirements
The signing wallet needs:
- USDC on Base — for the $0.01 payment per request
No ETH for gas is required — x402 uses EIP-3009 (off-chain signature), not on-chain transactions.
Notes
requires a Bearer API key subscription — not available via x402POST /calculate/batch- Local tickers require D/C suffix:
(USD),AL30D
(ARS) — notAL30CAL30 - Settlement is on-chain: each paid call produces a verifiable transaction hash
- The
header contains settlement metadata (payer, tx hash, network)PAYMENT-RESPONSE