Growing Discord community — direct access to the developer, live coverage & picks. Join the Discord Join now →
Leagues Matches Predictions Stats Coverage
Docs / Guides

Working with images#

Every entity in the API has an image at a predictable URL built from the same id the REST API gives you. No token, no extra lookups, aggressive caching. Full type list: Image API reference.

URL patterns#

https://sports.bzzoiro.com/img/<type>/<id>/               football (bare types)
https://sports.bzzoiro.com/img/<sport>/<type>/<id>/       other sports
<!-- Football: badge, league logo, player photo, manager, venue -->
<img src="https://sports.bzzoiro.com/img/team/755/">
<img src="https://sports.bzzoiro.com/img/league/85/">
<img src="https://sports.bzzoiro.com/img/player/12994/">

<!-- Other sports: prefix with the sport slug -->
<img src="https://sports.bzzoiro.com/img/tennis/player/1207/">
<img src="https://sports.bzzoiro.com/img/csgo/team/311/">
<img src="https://sports.bzzoiro.com/img/basketball/team/98/">

The <id> is the same numeric id the REST API returns — team_id, league_id, player_id and so on.

Modifiers#

Param Effect
?bg=transparent Removes the white background from the image edges — for cards and dark UIs
?sor=true Players only: serves a cut-out face-style photo when available, silently falls back to the regular photo otherwise
?sor=true&bg=transparent Both combined
<img src="https://sports.bzzoiro.com/img/player/12994/?sor=true&bg=transparent">

Because ?sor=true falls back silently, you can use it on every player image without checking availability first.

Caching and fallbacks — what to expect#

  • Images are cached server-side up to 30 days and browser-cached up to a year. Don't build your own image cache; hotlinking is the intended use.
  • An id that exists but has no image yet returns 204 No Content (empty body) rather than 404 — render your own placeholder when the image fails to load:
<img src="https://sports.bzzoiro.com/img/team/755/"
     onerror="this.src='/static/img/placeholder.svg'">
  • A null or non-numeric id also returns 204, so templates that interpolate optional ids never break.
  • First-ever request for an image can take ~1 s (upstream fetch); every request after that is instant from cache.

Sport-scoped types don't collide#

/img/tennis/player/1207/ and /img/player/1207/ are different namespaces — a tennis id never accidentally serves a football photo. Always use the sport prefix for non-football entities.

View this page as Markdown · Found a mistake? Tell us