> ## Documentation Index
> Fetch the complete documentation index at: https://docs.ticktock.bet/llms.txt
> Use this file to discover all available pages before exploring further.

# Match Status & Lifecycle

> How a football match moves through its full lifecycle on the feed

## 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:

| Code | Status        | Client state | Meaning                                          |
| ---- | ------------- | ------------ | ------------------------------------------------ |
| `0`  | `not_started` | prematch     | Scheduled, not kicked off                        |
| `1`  | `live`        | live         | In progress                                      |
| `2`  | `suspended`   | live         | Temporary halt — keep the match, resume expected |
| `3`  | `ended`       | finished     | Play over, **not yet** settled (≠ closed)        |
| `4`  | `closed`      | finished     | Settled & finalized                              |
| `5`  | `cancelled`   | finished     | Called off                                       |
| `6`  | `delayed`     | prematch     | Kickoff pushed back                              |
| `7`  | `interrupted` | live         | Stopped mid-match, resume expected               |
| `8`  | `postponed`   | prematch     | Moved to another day — **not** removed           |
| `9`  | `abandoned`   | finished     | Called off mid-match, will not resume            |

Build your status map from `GET /v1/descriptions/{locale}/match_status` — it enumerates exactly these codes, localized.

## Message mapping

| Transition                                                | Message                                                        | Detail                                                                 |
| --------------------------------------------------------- | -------------------------------------------------------------- | ---------------------------------------------------------------------- |
| New booked fixture                                        | `<fixture_change change_type="1">`                             | Announces the fixture                                                  |
| → live                                                    | `<odds_change>` with `<sport_event_status status="1">`         | Drives the match live; carries score + `match_status` (period)         |
| Goal / period change                                      | `<odds_change>` with `<sport_event_status status="1" …>`       | In-play pulse — score and `1st_half` / `halftime` / `2nd_half` updates |
| → ended / closed                                          | `<odds_change>` with `<sport_event_status status="3"` / `"4">` | Final score + `winner_id`. **Finish is here, not a fixture\_change**   |
| suspended / interrupted / delayed / postponed / abandoned | `<odds_change>` with the matching code                         | Keeps the match in the right state                                     |
| Cancelled                                                 | `<fixture_change change_type="3">`                             | Removes the fixture                                                    |

<Note>
  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.
</Note>

## 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](/odds-feed/amqp).

```
hi.-.live.fixture_change.1.od:match.68823000.-
hi.-.live.odds_change.1.od:match.68823000.-
```
