x402 · Agent-native payments
Data your agent can buy on its own.
Bvcket's predictions, research reports and agent-bet positions are available pay-per-call over x402 — USDC on Base, settled in a single HTTP round-trip. No API key, no signup, no human in the loop. Point any x402 wallet — MoonPay PayBox, Coinbase AgentKit, x402-fetch — at the endpoints and it just works.
How it works
Three steps, one round-trip
Ask
Your agent GETs any paid endpoint. With no payment it returns 402 — the price, token and pay-to address come back in the JSON body and the Payment-Required header.
Pay
The agent's wallet signs a one-time USDC transfer authorization (EIP-3009 — gasless, no pre-funded account, no invoice). The x402 client does this automatically.
Get data
Retry with the X-PAYMENT header; the Coinbase CDP facilitator settles and you get 200 + JSON. The receipt covers re-fetches of the same event until it starts.
What's for sale
Pay-per-call endpoints
Across 9 leagues — NFL, MLB, CFB, NBA, NHL, EPL, ATP, WTA and WC26. Discovery is free; you only pay for the analysis you pull.
Game bundle
$0.99Everything for one game — every card below, in a single call.
/v1/bundle/{event_id}Or buy individual cards
| Card | What it provides | Price |
|---|---|---|
prediction | Model-vs-market win probabilities for each outcome, the pick, the spread/total lean, and the moneyline. | $0.15 |
analysis | The full long-form research report — executive summary plus a chaptered markdown breakdown. | $0.25 |
agent_bets | The model's recommended bets — moneyline, spread/run-line and total — each with confidence and reasoning. | $0.15 |
odds | Prices across venues — sportsbook consensus, Polymarket, and live prediction-market quotes. | $0.10 |
matchup | Side-by-side team stats and model matchup features (efficiency, trenches, pace, pitcher splits). | $0.10 |
injuries | Reported injuries and lineup changes for both sides, with the model's impact assessment. | $0.05 |
box_score | The box score and starting lineups, shaped for the sport. | $0.10 |
scoring_plays | A chronological log of the game's scoring plays. | $0.05 |
drive_chart | Drive-by-drive results for the game (football). | $0.10 |
news | The latest headlines and stories relevant to the matchup. | $0.05 |
key_accounts | A curated feed of posts from trusted insider accounts. | $0.05 |
live | The live game state — score, period/inning/quarter and clock, and status. | $0.05 |
Each card is /v1/cards/{event_id}/{card}. Availability varies by sport — list a game's cards at /v1/cards/{event_id}.
Free discovery
/v1/leagues | Supported leagues + per-resource availability. |
/v1/events?league=&date= | Slate for a league on an ET date (default today). |
/v1/cards/{event_id} | List the cards available for a game, with prices + descriptions. |
/v1/schema | Full machine-readable schema + live pricing. |
Prices are the x402 per-call rate in USDC. High volume? A subscription API key covers unlimited calls on a flat plan.
Point your agent here
Wire it up in a few lines
Base URL
https://api.bvcket.xyzMachine-readable manifest
https://api.bvcket.xyz/.well-known/x402Agents and x402 directories read this to discover every endpoint, its price and the accepted token automatically — no scraping these docs.
Works with
- • MoonPay PayBox (Claude / ChatGPT wallet)
- • Coinbase AgentKit
- • x402-fetch / x402-axios (TypeScript)
- • x402 for Python (httpx / requests)
- • any HTTP client that speaks x402
# 1. Ask for a paid resource with no payment → 402 with the price.
curl -i https://api.bvcket.xyz/v1/predictions/nfl:nflverse:2026_08_CAR_GB
# HTTP/1.1 402 Payment Required
# Payment-Required: eyJ4NDAyVmVyc2lvbiI6Mi... ← base64 requirements (header)
# {
# "x402Version": 2,
# "accepts": [{
# "scheme": "exact",
# "network": "eip155:8453", ← Base
# "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913", ← USDC
# "amount": "150000", ← 0.15 USDC (6 decimals)
# "payTo": "0xBA8c022AB722Fae8979b5619a9EAf00A7c802B18"
# }]
# }// npm i x402-fetch viem — an agent paying from its own wallet
import { wrapFetchWithPayment } from "x402-fetch";
import { privateKeyToAccount } from "viem/accounts";
const account = privateKeyToAccount(process.env.AGENT_PRIVATE_KEY as `0x${string}`);
// wrapFetchWithPayment handles the 402 → sign USDC on Base → retry, transparently.
const pay = wrapFetchWithPayment(fetch, account);
const res = await pay("https://api.bvcket.xyz/v1/predictions/nfl:nflverse:2026_08_CAR_GB");
const prediction = await res.json(); // 200 OK — the prediction card, $0.15// A connected browser wallet (wagmi) — the user approves each payment.
import { wrapFetchWithPayment } from "x402-fetch";
import { useWalletClient } from "wagmi";
const { data: walletClient } = useWalletClient();
const pay = wrapFetchWithPayment(fetch, walletClient);
// Buy one card ($0.10) — or /v1/bundle/{id} for everything ($0.99).
const odds = await pay("https://api.bvcket.xyz/v1/cards/nfl:nflverse:2026_08_CAR_GB/odds")
.then((r) => r.json());# pip install "x402[httpx,evm]" eth-account
# The official x402 client wraps httpx/requests with an eth_account signer and
# runs the 402 → sign → retry loop for you. Point it at the base URL:
#
# base_url = "https://api.bvcket.xyz"
# GET /v1/predictions/{event_id} → signed USDC payment → 200 + JSON
#
# See https://x402.org and https://pypi.org/project/x402 for the current client API.Payment details
Settlement
Payments settle on Base through the Coinbase CDP facilitator. Nothing custodial on our side — your wallet signs, the facilitator verifies and settles, you get the data.
- Network
- Base (eip155:8453)
- Asset
- USDC · 6 decimals
- Facilitator
- Coinbase CDP
- Scheme
- exact (EIP-3009)
- Pre-game rule
- refused, uncharged, after kickoff
- Receipt
- re-fetch the same event free until it starts
Pay per call with x402
Best for agents and low/variable volume. No signup — just a funded wallet. You're reading the guide for it.
View the manifest →Subscribe with an API key
Best for apps and high volume: a flat monthly plan, unlimited calls, a single Authorization: Bearer header.