Changelog
Every change to the public contract, dated, field by field — before and after. A breaking change is always announced here first.
View as MarkdownManager and referee photos
Managers and referees carry a photo on our CDN, like players. One new field, always present and nullable, on every manager and referee object; nothing else changes, nor does the WebSocket protocol.
| What | Before | Now |
|---|---|---|
| ManagerRef.image (Fixture.homeManager / awayManager, TeamDetail.manager, H2H managerDuel) | absent | string | null — the photo on cdn.sportsapi.app; null when the source has none or it is not uploaded yet |
| Referee.image (Fixture.referee) | absent | string | null — as ManagerRef.image |
| ManagerProfile.image, RefereeProfile.image (/v2/managers/{id}, /v2/referees/{id}) | absent | string | null — as ManagerRef.image |
| SearchResult.image on manager and referee hits | always null | the photo, as ManagerRef.image |
Search finds fixtures and venues; player hits carry their team
GET /v2/search returns two new hit types — fixture and venue — and three new fields on every hit. SearchType is a closed enum, so a client that rejects unknown values must accept the two new ones; the existing fields and hit types do not change.
| What | Before | Now |
|---|---|---|
| SearchResult.type (SearchType) | team | player | league | manager | referee | series | race | the same + fixture (a match: /v2/fixtures/{id}) + venue (a stadium / arena; no endpoint of its own — the id is the one Fixture.venue and TeamDetail.venue carry) |
| SearchResult.team | absent | TeamRef | null — a player hit’s current team; null on every other type and for a player without one |
| SearchResult.fixture | absent | SearchFixture | null — { home, away (TeamRef | null), league (LeagueRef | null), startTime, status (StatusType | null) } on a fixture hit; null on every other type |
| SearchResult.venue | absent | Venue | null — { id, name, city, country, capacity } on a venue hit; null on every other type |
| SearchResult.sport | a sport slug or null | the same; always null on a venue hit (a venue is not tied to one sport) |
AI commentary names SportsAPI AI (three values change)
The AI commentary is now named after us, not the language model provider behind it. Only these values change; the shapes, the text and the WebSocket protocol do not.
| What | Before | Now |
|---|---|---|
| CommentaryEntry.model (REST and the commentary WebSocket frame) | the underlying provider model id | "sportsapi-ai" |
| GET /v2/fixtures/{id}/commentary meta.generatedBy | the provider name | "sportsapi-ai" |
v2 baseline
The starting point: the v2 contract as documented on this page — REST, WebSocket protocol 4, webhooks, season exports and widgets. Earlier pre-launch changes are not listed; every change from here on is, field by field.