# Call of Duty webhooks

Signed POST requests to your URL when Call of Duty events happen. Signing, retries, pauses and catch-up are the same for every sport: https://citoapi.com/docs/webhooks.md

Live catalog for this sport, with current status and volume: https://api.citoapi.com/api/v1/webhooks/events?game=cod
Human docs: https://citoapi.com/docs/api/call-of-duty/webhooks/
Status below was measured at 2026-11-08T20:30:57.835Z. Trust the live catalog over this file.

## Which events to subscribe to

- Live scoreboard: cod.match.live_update, cod.match.completed. Map progression and score during a match, then the final.
- Settle bets: cod.match.completed. Tells you a match finished. Read /cod/matches for the result.
- Results only: cod.match.completed. Tells you matches finished. Read /cod/matches for details.
- Alerts: cod.transfer.new, cod.match.completed. Roster moves and finished matches.

## Filters

This sport's events carry no filter fields. A filter on a webhook stops events that do not carry that field.

## Events

### cod.transfer.new

New Call of Duty roster moves were recorded. A count only: data.count and data.timestamp, with no player names.

- When: When a refresh finds new roster moves.
- Status: Active. Sent during the last 7 days.
- Frequency: about 4 per day across all matches
- Plan: Pro and Scale
- Filters: none
- Use it to: Re-read /cod/transfers and refresh roster pages.
- Notes: Treat it as a signal to re-read /cod/transfers. It carries no entity ids.

| Field | Type | Meaning |
|---|---|---|
| `count` | number | How many records changed. |
| `timestamp` | string | When this event happened, ISO 8601 UTC. |

```json
{
  "event": "cod.transfer.new",
  "id": "a1b2c3d4-0000-4000-8000-000000000000",
  "timestamp": "2026-11-05T17:25:25.657Z",
  "event_type": "cod.transfer.new",
  "match_id": null,
  "previous_state": null,
  "data": {
    "count": 10,
    "timestamp": "2026-11-05T17:25:25.618Z"
  }
}
```

### cod.match.live_update

Live map progression and score changes for a Call of Duty match.

- When: During a live match.
- Status: None recorded yet. You can subscribe, but none has been recorded. Do not rely on it.
- Frequency: none recorded so far
- Plan: Pro and Scale
- Filters: none
- Use it to: Update a live series view with map progression and score.

### cod.match.completed

Call of Duty matches finished. A count only: data.matchesCompleted and data.timestamp, with no match ids.

- When: When a refresh finds newly completed matches.
- Status: Active. Sent during the last 7 days.
- Frequency: about 1 per day across all matches
- Plan: Pro and Scale
- Filters: none
- Use it to: Re-read /cod/matches and record the result.
- Notes: Treat it as a signal to re-read /cod/matches. It carries no entity ids.

| Field | Type | Meaning |
|---|---|---|
| `matchesCompleted` | number | How many matches finished. |
| `timestamp` | string | When this event happened, ISO 8601 UTC. |

```json
{
  "event": "cod.match.completed",
  "id": "a1b2c3d4-0000-4000-8000-000000000000",
  "timestamp": "2026-10-14T16:45:07.511Z",
  "event_type": "cod.match.completed",
  "match_id": null,
  "previous_state": null,
  "data": {
    "timestamp": "2026-10-14T16:45:07.463Z",
    "matchesCompleted": 14
  }
}
```

### cod.standings.updated

Call of Duty standings were refreshed. A count only: data.count and data.timestamp.

- When: On each standings refresh, whether or not a position moved.
- Status: Active. Sent during the last 7 days.
- Frequency: about 96 per day across all matches
- Plan: Pro and Scale
- Filters: none
- Use it to: Re-read standings. It does not by itself mean a position moved.
- Notes: Treat it as a signal to re-read standings. It carries no standings rows and does not mean a position changed.

| Field | Type | Meaning |
|---|---|---|
| `count` | number | How many records changed. |
| `timestamp` | string | When this event happened, ISO 8601 UTC. |

```json
{
  "event": "cod.standings.updated",
  "id": "a1b2c3d4-0000-4000-8000-000000000000",
  "timestamp": "2026-11-08T20:15:04.123Z",
  "event_type": "cod.standings.updated",
  "match_id": null,
  "previous_state": null,
  "data": {
    "count": 12,
    "timestamp": "2026-11-08T20:15:04.083Z"
  }
}
```

### cod.player.stats_updated

Call of Duty player stats changed.

- When: When player stats are updated.
- Status: None recorded yet. You can subscribe, but none has been recorded. Do not rely on it.
- Frequency: none recorded so far
- Plan: Pro and Scale
- Filters: none
- Use it to: Refresh a player page or leaderboard.

### cod.tournament.started

A Call of Duty tournament has started.

- When: When a tournament begins.
- Status: None recorded yet. You can subscribe, but none has been recorded. Do not rely on it.
- Frequency: none recorded so far
- Plan: Pro and Scale
- Filters: none
- Use it to: Open a tournament hub.

### cod.tournament.completed

A Call of Duty tournament has finished.

- When: When a tournament ends.
- Status: Active. Sent during the last 7 days.
- Frequency: about 1 per week
- Plan: Pro and Scale
- Filters: none
- Use it to: Close out a tournament page.
