Authentication#
Every BSD API uses the same token. You get it once, and it works across the football API, all sport APIs, the Odds API, the MCP servers and the live WebSockets. Registration is free.
Get your token#
- Register at sports.bzzoiro.com/register/.
- Click the verification link we email you — your account is inactive until you do, and the token is created at this step.
- Open your dashboard and copy the API key. The dashboard also shows your add-on expiry dates and 30-day usage.
You can invalidate a leaked key and mint a new one at any time from the dashboard (Regenerate token). The old key stops working immediately.
Send the token#
Put the key in the Authorization header of every request:
curl -H "Authorization: Token YOUR_API_KEY" \
"https://sports.bzzoiro.com/api/v2/events/?date_from=2026-08-02"
import requests
headers = {"Authorization": "Token YOUR_API_KEY"}
r = requests.get("https://sports.bzzoiro.com/api/v2/events/", headers=headers)
print(r.json())
Also accepted, in order of preference:
| Method | Example | Notes |
|---|---|---|
Authorization: Token <key> |
Authorization: Token abc123 |
Recommended |
Authorization: Bearer <key> |
Authorization: Bearer abc123 |
For OAuth-style clients |
?token=<key> query param |
/tennis/api/v2/matches/?token=abc123 |
Avoid — tokens end up in logs |
WebSockets use the same key — see Connect to live WebSockets for the two transports (query param or WebSocket subprotocol).
What is free, what is paid#
| Product | Price | What it unlocks |
|---|---|---|
| Free account | $0 | Football REST API (v1 + v2), football MCP, Image API, Signals API |
| Sports Addon | $5/mo | Tennis, CS2, darts, hockey, basketball and horse racing REST APIs + MCP servers |
| WebSocket addon | $3/mo | Live WebSocket channels (football + tennis) |
| Odds API | $5/mo | Multi-bookmaker odds feed at /odds/api/ — free for everyone until 2026-08-17 |
All add-ons are bought at /addons/. Payments stack: buying a month while you still have time left adds 30 days to your expiry.
Error responses#
401 — missing or invalid token
{
"error": "authentication required",
"code": "authentication_required",
"detail": "Send Authorization: Token <YOUR_TOKEN> on every request.",
"register": "https://sports.bzzoiro.com/register/"
}
402 — valid token, but the endpoint needs the Sports Addon
{
"error": "Sports Addon required",
"code": "addon_required",
"detail": "Tennis, CS:GO, darts, hockey, basketball and horse racing APIs require the Sports Addon ($5/mo).",
"pricing_url": "https://sports.bzzoiro.com/pricing/"
}
Note: the paid gate is
402 Payment Required, not 403. If your client special-cases 403, add 402 handling too.
Other errors follow one uniform shape — see Conventions & limits.