Authentication#
Every BSD API uses the same token. You get it once, and it works across the football API, all sport APIs, 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) |
All add-ons are bought at /addons/. Payments stack: buying a month while you still have time left adds 30 days to your expiry.
Founder rate#
The Founder badge was granted once, on 2026-08-03, to every account that already existed at that moment. It cannot be earned by registering or subscribing now.
The badge belongs to the account, not to a subscription, and it is never removed. So cancelling an add-on does not forfeit your rate: if you resubscribe months later, the Founder price is applied again automatically at checkout — there is no code to enter and nothing to re-request. It works the same on every payment rail (card and PayPal) and on every add-on that has a Founder rate.
Your dashboard and /pricing/ show your own rate rather than the list price, so what you see there is what you are charged.
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.