Events Life Cycle

Handle Trading API sport_event WebSocket updates when events are listed, re-listed, or unlisted.

Handle sport_event broadcast updates when an event is listed, re-listed, or unlisted.

Subscribe to event lifecycle updates

Listen on the tournament_xxx broadcast topic for changes to events in that tournament. The message op value identifies the change:

op valueMeaning
cCreate an event that is listed immediately.
uUpdate an existing event, including listing or re-listing it.
dDelete an event by unlisting it.

Event lifecycle behavior

Sport event not available - Can display for several reason such as event delisted and relisted, event deleted, or event delayed.

Event state changeWebSocket message
Event created but not listedNo message is sent.
Event created and listedSend a sport_event message with op: "c".
Event listed or re-listed after creationSend a sport_event message with op: "u".
Event unlistedSend a sport_event message with op: "d".

Event created and listed

The broadcast message uses change_type: "sport_event" and op: "c".

{
  "change_type": "sport_event",
  "op": "c",
  "payload": "eyJpZCI6IjE1MDAwOTAxNTAiLCJ0b3VybmFtZW50X2lkIjoiMTYwMDAwMDA3MyIsImluZm8iOnsibmFtZSI6InRlcyBYYW5kZXIgU2NoYXVmZmVsZSB0byBXaW4iLCJkaXNwbGF5X25hbWUiOiIiLCJ0eXBlIjoiY3VzdG9tIiwiZXZlbnRfaWQiOjE1MDAwOTAxNTAsInNwb3J0X25hbWUiOiJHb2xmIiwidG91cm5hbWVudF9uYW1lIjoiVHJhdmVsZXJzIENoYW1waW9uc2hpcCIsInRvdXJuYW1lbnRfaWQiOjE2MDAwMDAwNzMsImNvbXBldGl0b3JzIjpbXSwic3RhdHVzIjoibm90X3N0YXJ0ZWQiLCJzY2hlZHVsZWQiOiIyMDIzLTA2LTI1VDIyOjAwOjAwWiIsInVwZGF0ZWRfYXQiOjE2ODcyNzgwMTkxOTkwNjczNjB9fQ==",
  "timestamp": 1687278019324319700
}

Decoded payload:

{
  "id": "1500090150",
  "tournament_id": "1600000073",
  "info": {
    "name": "tes Xander Schauffele to Win",
    "display_name": "",
    "type": "custom",
    "event_id": 1500090150,
    "sport_name": "Golf",
    "tournament_name": "Travelers Championship",
    "tournament_id": 1600000073,
    "competitors": [],
    "status": "not_started",
    "scheduled": "2023-06-25T22:00:00Z",
    "updated_at": 1687278019199067400
  }
}

Event listed or re-listed

After an event exists, listing or re-listing it sends a sport_event message with op: "u".

{
  "change_type": "sport_event",
  "op": "u",
  "payload": "eyJpZCI6IjE1MDAwMDAxNDQiLCJ0b3VybmFtZW50X2lkIjoiMTUwMDAwMDA2MCIsImluZm8iOnsibmFtZSI6Ik5vdmEgdGVzdDIiLCJkaXNwbGF5X25hbWUiOiIiLCJ0eXBlIjoiY3VzdG9tIiwiZXZlbnRfaWQiOjE1MDAwMDAxNDQsInNwb3J0X25hbWUiOiJCYXNrZXRiYWxsIiwidG91cm5hbWVudF9uYW1lIjoiVG91cm5hbWVudCBUZXN0IE5vdmExIiwidG91cm5hbWVudF9pZCI6MTUwMDAwMDA2MCwiY29tcGV0aXRvcnMiOlt7ImlkIjoxNjAwMDAwMDUwLCJuYW1lIjoiWWVzIiwiZGlzcGxheV9uYW1lIjoiWWVzIiwiYWJicmV2aWF0aW9uIjoiWWVzIiwic2lkZSI6ImhvbWUifSx7ImlkIjoxNjAwMDAwMDUxLCJuYW1lIjoiTm8iLCJkaXNwbGF5X25hbWUiOiJObyIsImFiYnJldmlhdGlvbiI6Ik5vIiwic2lkZSI6ImF3YXkifV0sInN0YXR1cyI6Im5vdF9zdGFydGVkIiwic2NoZWR1bGVkIjoiMjAyMy0wNC0yNVQxNzo0NjoyNFoiLCJ1cGRhdGVkX2F0IjoxNjg2NzYzMzAxNjY0OTQyNjY5fX0=",
  "timestamp": 1686763301998473000
}

Decoded payload:

{
  "id": "1500000144",
  "tournament_id": "1500000060",
  "info": {
    "name": "Nova test2",
    "display_name": "",
    "type": "custom",
    "event_id": 1500000144,
    "sport_name": "Basketball",
    "tournament_name": "Tournament Test Nova1",
    "tournament_id": 1500000060,
    "competitors": [
      {
        "id": 1600000050,
        "name": "Yes",
        "display_name": "Yes",
        "abbreviation": "Yes",
        "side": "home"
      },
      {
        "id": 1600000051,
        "name": "No",
        "display_name": "No",
        "abbreviation": "No",
        "side": "away"
      }
    ],
    "status": "not_started",
    "scheduled": "2023-04-25T17:46:24Z",
    "updated_at": 1686582406275919600
  }
}

Event unlisted

An event is unlisted — and a sport_event message with op: "d" is sent — when either of these happens:

  • status changes from live or not_started to closed, abandoned, cancelled, postponed, interrupted, ended, or suspended
  • Live odds availability changes to bookable, null, or not_available

Because unlisting deletes the event, the op: "d" payload only carries id and tournament_id — it never includes the status that caused the unlisting. In particular, interrupted is a real status value (see Meaning of Enums), but you will only ever see it take effect as this delete message or as the event disappearing from get_sport_events — never as a status field in a message you receive.

{
  "change_type": "sport_event",
  "op": "d",
  "payload": "eyJpZCI6IjE1MDAwOTAxNTAiLCJ0b3VybmFtZW50X2lkIjoiMTYwMDAwMDA3MyJ9",
  "timestamp": 1687278241642408700
}

Decoded payload:

{
  "id": "1500090150",
  "tournament_id": "1600000073"
}

Did this page help you?