The lifecycle driver
<sport_event_status> inside <odds_change> is the single driver of a match’s lifecycle — prematch → live → finished/removed. It rides on every live/prematch message. A <fixture_change> status attribute is informational only; the client must drive state off sport_event_status.
Football status set
Football needs lifecycle distinctions the CS2 base set ({0,1,4,5}) can’t express — a suspended match must not be dropped, a postponed one is rescheduled not removed, and ended (play over) is distinct from closed (settled). The full numeric set the football feed publishes:
Build your status map from
GET /v1/descriptions/{locale}/match_status — it enumerates exactly these codes, localized.
Message mapping
A match finish is an
<odds_change> carrying <sport_event_status status="4"> — never a fixture_change. change_type=5 stays a pure coverage signal with no “finished” meaning, so a coverage tweak is never mistaken for a match ending.Routing keys
Football messages use the same 8-section routing-key layout as every sport — only the sport section differs (1 = Soccer). See AMQP transport.