Skip to main content

Overview

SportsAPI Pro provides image endpoints for all visual assets across both V1 and V2 APIs.
V2 images require authentication. V2 image endpoints require an x-api-key header and count against your daily rate limit, just like data endpoints. V1 image endpoints remain free and publicly accessible.

All 25 V2 sport APIs serve images at the same path pattern. Replace {sport} with the sport subdomain (e.g., football, basketball, tennis). V2 image requests require an x-api-key header and count against your daily usage quota.

Base URL Pattern

Available Image Types

V2 Examples

Rate Limit Headers

V2 image responses include rate limit headers:

Cross-Sport Image URLs

The same pattern works for all 25 sports:

Current V2 image status

V2 image delivery is restored. Verified 10 September 2026: the V2 image pipeline is serving real image/* responses again for valid IDs. The error contract below still applies if an upstream issue reoccurs — IMAGE_UPSTREAM_UNAVAILABLE with Retry-After: 60 means retry, not a bad request.

Deep logo coverage — V6 route

The V1 (365scores) crest set is incomplete: teams outside the major leagues frequently have no crest and V1 answers with a generic grey placeholder. The V6 dataset carries crests far deeper, including amateur and regional divisions. V6 responses return logo / image / squareLogo as bare filenames, not URLs. Fetch them from:
Pass the filename exactly as it appears in the response, including any !w80 thumbnail suffix, and use the matching {type} — a competition filename requested under teams returns 404. These requests need x-api-key and count against your quota.
V6 entity IDs are opaque strings and do not match V1 or V2 numeric IDs. Match a team by name plus country once, then store the V6 ID alongside your existing IDs.

Recognising the V1 grey placeholder

When V1 has no crest for a competitor it still answers HTTP 200 with a fixed grey placeholder image — one identical 1,466-byte PNG for every missing team (verified 10 September 2026). Detect it by body size or checksum, not by status code:
A placeholder means only that the V1 dataset has no crest for that team. A real logo may still exist via V6. imageVersion is optional cache-busting; omitting it never causes a placeholder.
  1. V1 first (free, unmetered): /v1/football/images/competitors/{id} and /v1/football/images/competitions/{id}. Keep every response that is not the 1,466-byte placeholder.
  2. V2 next (1 request each, restored 10 Sep 2026): /v2/football/images/teams/{id} and /v2/football/images/tournaments/{id} using the V2 IDs you already store.
  3. V6 for the gaps (1 request each): take logo filenames straight from the V6 payloads you already fetch and call /v6/football/images/teams/{filename} or /v6/football/images/competitions/{filename}.
  4. Logos are static — download once, store the bytes in your own storage or CDN, and never re-request them.

V1 Images (Legacy — Free)

V1 image endpoints are free and publicly accessible — no API key required. The V1 image proxy supports cache-busting via the imageVersion parameter returned in API responses.

Base URL

V1 Image Types

V1 Examples

Image Versions (V1)

The imageVersion parameter is provided in API responses and should be used to ensure you’re displaying the latest image:

Heat Maps (V1 Only)

Heat map images are returned from the API with tokenized URLs:
The heatMap field in lineup data from the /game endpoint automatically returns this tokenized format. Simply use the URL as-is — no manual construction needed.

Error Handling

Images that don’t exist return a 404 status. Always include fallback handling:

Error Responses & Troubleshooting

404 Image not found upstream

Returned when the requested entity ID does not exist in our system. This replaces the misleading 502 you may have seen previously for invalid IDs.
Cached for 5 minutes to avoid repeated upstream calls.

502 Bad Gateway

Reserved for genuine upstream pipeline failures in our image delivery layer. The response body identifies the cause and the reply carries Retry-After:
A 502 here is never caused by a bad ID or a bad key. Data endpoints are served by a separate path and stay available during an image-layer incident. Interim fallback. V1 image routes run on independent infrastructure and are free, so they are the recommended fallback while a V2 image incident is open. They accept the same competitor IDs:
Valid V1 types are competitors, athletes and competitions. Live status for the image layer is published on status.sportsapipro.com.

Troubleshooting checklist

When an image endpoint returns 404, work through these in order:
  1. Verify the ID exists. Call the corresponding data endpoint first:
    • Players → GET /api/players/{id}
    • Teams → GET /api/teams/{id}
    • Tournaments → GET /api/tournaments/{id}
    • If the data endpoint also returns 404, the ID is invalid.
  2. Find the correct ID via search.
  3. For tournaments, confirm you’re using uniqueTournament.id, not tournament.id. The per-season tournament.id won’t resolve against the image endpoint. See Canonical IDs.
  4. If the data endpoint returns 200 but the image returns 502, that’s a real pipeline issue. Retry once; if it persists, contact support with the request ID.

Worked example

A recent customer migration shipped player IDs from a different provider: The fix in every case was the same: discover the canonical ID via /search and store it. For a step-by-step migration playbook, see the One-Time ID Migration Guide.

Caching

  • Images are cached at the CDN level
  • V1: Use imageVersion for cache busting
  • V2: Images are cached with appropriate Cache-Control headers
  • Recommended browser cache: 24 hours

Rate Limits

  • V2 images: Count against your daily API rate limit (same as data endpoints)
  • V1 images: Do not count against your API rate limit
  • Excessive automated scraping may be throttled
Last modified on September 10, 2026