FIFA WORLD CUP 2026
Group AMexico·Czechia·South Africa·South KoreaGroup BBosnia & Herzegovina·Canada·Qatar·SwitzerlandGroup CBrazil·Haiti·Morocco·ScotlandGroup DAustralia·Paraguay·Türkiye·USAGroup ECuraçao·Ecuador·Germany·Côte d'IvoireGroup FJapan·Netherlands·Sweden·TunisiaGroup GBelgium·Egypt·Iran·New ZealandGroup HCabo Verde·Saudi Arabia·Spain·UruguayGroup IFrance·Iraq·Norway·SenegalGroup JAlgeria·Argentina·Austria·JordanGroup KColombia·DR Congo·Portugal·UzbekistanGroup LCroatia·England·Ghana·Panama Group AMexico·Czechia·South Africa·South KoreaGroup BBosnia & Herzegovina·Canada·Qatar·SwitzerlandGroup CBrazil·Haiti·Morocco·ScotlandGroup DAustralia·Paraguay·Türkiye·USAGroup ECuraçao·Ecuador·Germany·Côte d'IvoireGroup FJapan·Netherlands·Sweden·TunisiaGroup GBelgium·Egypt·Iran·New ZealandGroup HCabo Verde·Saudi Arabia·Spain·UruguayGroup IFrance·Iraq·Norway·SenegalGroup JAlgeria·Argentina·Austria·JordanGroup KColombia·DR Congo·Portugal·UzbekistanGroup LCroatia·England·Ghana·Panama
Open full hub →
Growing Discord community — direct access to the developer, live coverage & picks. Join the Discord Join now →
Leagues Matches Predictions Stats
BSD · API Documentation

API Documentation.

Pick a sport to get started. All sports share the same authentication and pagination conventions — learn once, use everywhere.

Authentication — same for every sport

Every request needs your API key in the Authorization header. Get a key by registering at sports.bzzoiro.com/register/ → go to your account → copy API key.

# Add this header to every request Authorization: Token YOUR_API_KEY # Example with curl curl -H "Authorization: Token YOUR_API_KEY" \ "https://sports.bzzoiro.com/tennis/api/v2/matches/live/" # Example with Python import requests headers = {"Authorization": "Token YOUR_API_KEY"} r = requests.get("https://sports.bzzoiro.com/tennis/api/v2/matches/live/", headers=headers) print(r.json())

Choose a sport

Common conventions

These rules apply to every sport API — you only need to learn them once.

Pagination

All list endpoints return paginated results. Use limit (page size, default 50, max 200) and offset (how many items to skip, default 0) to page through results.

# First page: items 1–50 GET /tennis/api/v2/matches/?limit=50&offset=0 # Second page: items 51–100 GET /tennis/api/v2/matches/?limit=50&offset=50 # Response shape { "count": 408, // total number of items "next": "https://...", // URL to next page (null if last page) "previous": null, // URL to previous page "results": [...] // items for this page }

Dates and times

All dates and times are in ISO 8601 format, UTC timezone. For example: 2026-06-06T14:00:00+00:00. When filtering by date, pass dates as YYYY-MM-DD.

Match status values

Every sport uses the same three primary status values:

StatusMeaning
upcomingMatch hasn't started yet
liveMatch is currently in progress
finishedMatch has ended and results are final
cancelledMatch was called off before it started
postponedMatch rescheduled to a future date

Odds

All odds are decimal format (e.g. 1.85). A value of null means no odds are available for that market yet.

HTTP status codes

CodeMeaning
200Success
401Missing or invalid API token
403Your account doesn't have access to this sport (Pro required)
404The requested item doesn't exist
429Rate limit exceeded — slow down