Overview
SportsAPI Pro provides image endpoints for all visual assets across both V1 and V2 APIs.V2 Images (Recommended)
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 returnlogo / 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:imageVersion is optional cache-busting; omitting it never causes a placeholder.
Bulk logo import — recommended order
- 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. - 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. - V6 for the gaps (1 request each): take
logofilenames straight from the V6 payloads you already fetch and call/v6/football/images/teams/{filename}or/v6/football/images/competitions/{filename}. - 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 theimageVersion parameter returned in API responses.
Base URL
V1 Image Types
V1 Examples
Image Versions (V1)
TheimageVersion 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: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.
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:
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:
competitors, athletes and competitions. Live status for the image layer is published on status.sportsapipro.com.
Troubleshooting checklist
When an image endpoint returns404, work through these in order:
- 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.
- Players →
- Find the correct ID via search.
- For tournaments, confirm you’re using
uniqueTournament.id, nottournament.id. The per-seasontournament.idwon’t resolve against the image endpoint. See Canonical IDs. - If the data endpoint returns
200but the image returns502, 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
imageVersionfor cache busting - V2: Images are cached with appropriate
Cache-Controlheaders - 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