Verifiable sports data,
bought by agents, per request.
Football and basketball live scores, results, match events and odds for autonomous AI agents. No account, no API key: an agent finds us in the x402 Bazaar, pays a fraction of a cent in USDC on Algorand, and receives signed data it can verify on its own.
Read the whitepaper See the endpoints# 1. ask
GET /v1/football/results?date=2026-10-03
← 402 Payment Required
0.002 USDC · exact · Algorand
# 2. pay and retry
GET … PAYMENT-SIGNATURE: eyJ4NDAy…
← 200 OK
{
"data": { "events": [ … ] },
"meta": { "freshnessSeconds": 11 },
"proof": { "algorithm": "ed25519-sha256-jcs",
"signature": "9f2c…" }
}
How it works
- Discover. The agent searches an x402 Bazaar catalog for sports data and reads our machine-readable description, input and output schemas and price.
- Request. It calls the endpoint and receives
HTTP 402 Payment Requiredwith the exact price, asset and network. - Pay. It signs a USDC payment on Algorand; the facilitator verifies it. Payment is settled only after the data has been produced, so a failed request costs nothing.
- Verify. The response carries an Ed25519 signature over the canonical data. Final results are also committed to Algorand as hourly Merkle roots.
Why agents use it
Built for machines
Stable JSON schemas, canonical event ids, explicit freshness and status fields, cursor pagination.
Pay as you go
From 0.001 USDC per request. No subscription, no signup. Settlement on Algorand in seconds.
Verifiable
Signed responses, public keys at a well-known URL, and on-chain Merkle anchoring for final results.
Discoverable
Every paid endpoint publishes the official x402 Bazaar discovery extension, so agents can find us without knowing our URL.
Endpoints
MainNet
https://api.kocalgo.io
TestNet
https://api-testnet.kocalgo.io
Base URLs go live once the domain moves to Cloudflare.
| Endpoint | Returns | USDC / request |
|---|---|---|
GET /v1/football/live | Football matches in play now | 0.005 |
GET /v1/basketball/live | Basketball games in play now | 0.005 |
GET /v1/football/results | Results by date, competition, team, status | 0.002 |
GET /v1/basketball/results | Results by date, competition, team, status | 0.002 |
GET /v1/football/events/:eventId | Score, goals, cards, substitutions, lineups | 0.002 |
GET /v1/basketball/events/:eventId | Score, half-time, status | 0.002 |
GET /v1/football/events/:eventId/odds | Pre-match and live betting markets | 0.005 |
GET /v1/basketball/events/:eventId/odds | Betting markets | 0.005 |
GET /v1/events/changes | Score and status changes since a cursor or time | 0.001 |
GET /v1/results/final | Finalized results only, with on-chain anchor proofs | 0.002 |
Free: /.well-known/sports-data-keys.json (signing keys), /v1/proofs/anchors/:merkleRoot (anchor lookup), /healthz.
Access requirement on MainNet
On Algorand MainNet, the paying wallet must hold at least 1 KC (Algorand Standard Asset 1035899249, "KOC"). The service checks the payer's balance after the payment is verified and before any data is served. If the wallet holds less, the payment is rejected with the x402 error kc_holding_required and is never settled, so nothing is charged. The requirement is stated in every 402 response and in the Bazaar description. TestNet has no holding requirement.
Status
This is an early service. Today it runs on Algorand TestNet; MainNet and public catalog listing follow once the deployment is verified end to end. Payments are accepted in USDC only. The data is normalized from public sports sources; we are not affiliated with any league or official data provider. Odds are informational and are not betting advice. Details and limitations are in the whitepaper.