Docs/UFC API/LiveNew

UFC Live API

Real-time fight-night clocks, live bout state, and push transport for scoreboards, bots, and betting tools.

BASEhttps://api.citoapi.com/api/v1
UFC Live RootAppend any endpoint path below.

Live REST is ready — poll ~1–2s during fight night

Use GET /api/v1/ufc/live for the active card, thenGET /api/v1/ufc/live/{boutId} for the current bout (clock, fighters, stats when present). Honor recommendedPollSeconds and lagSeconds in the response.

GET /api/v1/ufc/liveGet an API key

WebSockets — upgraded paid plan

Coming soon

wss://api.citoapi.com/api/v1/ufc/live/ws is rolling out as a paid-plan upgrade for teams that want push instead of polling. Room subscribe for bout:{id} and event:{slug}. Final fight-week validation is scheduled before full production rollout.

  • • Auth: same x-api-key / Bearer as REST (header preferred; query allowed for browsers)
  • • Events: ready, subscribed, ufc.live.update, ping
  • • SSE is available today at GET /api/v1/ufc/live/stream for push-style clients
View paid plans

What live payloads include

status — live, watching, armed, final, or idle
currentRound + currentTime — round clock when the feed has a live clock
red / blue fighters — names, corners, and bout identity
liveStats — significant strikes, takedowns, sub attempts, control time when available
method + winner — filled when a bout finishes
nextCandidateFmid — next bout the supervisor is watching
lagSeconds + recommendedPollSeconds — honest freshness guidance for poll clients
source + degradedReason — provenance and empty-clock honesty (never invents mid-fight clocks)

Fight-night clocks

Round number and remaining time when FightMetric / card sources publish a live clock. Empty sources stay honest (no invented clocks).

Push transport

SSE stream is live today. WebSocket rooms (bout + event) ship soon on the upgraded paid plan.

Lag metadata

Every live response includes lagSeconds and recommendedPollSeconds so clients can tune refresh without over-polling.

Quickstart — live overview

curl "https://api.citoapi.com/api/v1/ufc/live" \
  -H "x-api-key: YOUR_API_KEY"
{
  "success": true,
  "data": {
    "liveBouts": [
      {
        "boutId": "ufc-12938",
        "fightMetricId": "12938",
        "status": "live",
        "currentRound": 3,
        "currentTime": "2:27",
        "red": { "fighterName": "Fighter A" },
        "blue": { "fighterName": "Fighter B" },
        "lagSeconds": 2,
        "recommendedPollSeconds": 2,
        "source": "ufc_fightmetric_cdn"
      }
    ],
    "events": [
      {
        "eventSlug": "ufc-fight-night-example",
        "status": "live",
        "currentLiveFmid": "12938",
        "recommendedPollSeconds": 2
      }
    ]
  },
  "meta": {
    "stream": "/api/v1/ufc/live/stream",
    "websocket": "/api/v1/ufc/live/ws"
  }
}

One bout detail

curl "https://api.citoapi.com/api/v1/ufc/live/ufc-12938" \
  -H "x-api-key: YOUR_API_KEY"

Accepts ufc-{fightMetricId} or bare {fightMetricId}. Response may include liveStats (sig strikes, takedowns, control) and recentActions when the feed has them.

SSE stream (available now)

Prefer SSE when you want push without waiting on WebSocket plan rollout. Filter with boutId and/or eventSlug. Events: ready, ufc.live.update, ufc.live.snapshot, ping (every ~15s).

curl -N "https://api.citoapi.com/api/v1/ufc/live/stream?eventSlug=ufc-fight-night-example" \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Accept: text/event-stream"

WebSocket contract (paid · soon)

Endpoint: wss://api.citoapi.com/api/v1/ufc/live/ws

  • Client: { "action": "subscribe", "rooms": ["bout:ufc-12938"] }
  • Client: { "action": "ping" }
  • Server: ufc.live.update envelopes with the same core fields as REST
  • Rooms: bout:{boutId}, event:{eventSlug}

Full contract is also exposed at GET /api/v1/ufc/live/{boutId}/socket.

Plan note

WebSocket access is part of the upcoming upgraded paid plan. REST + SSE remain the supported production path while WS finishes fight-week soak testing.

Open billing plans

Live endpoints

Read-only live paths. The API host fans out from Redis; scrape workers run separately.

GET/api/v1/ufc/live
Live OverviewLive card overview: currently live/watching bouts, event supervisor rows, lagSeconds, recommendedPollSeconds.

Summary

Live card overview: currently live/watching bouts, event supervisor rows, lagSeconds, recommendedPollSeconds.

REST
curl "https://api.citoapi.com/api/v1/ufc/live" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/events
Live EventsSupervisor state for fight-night events tracked by the live worker.

Summary

Supervisor state for fight-night events tracked by the live worker.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/events" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/events/{slug}
Live Event DetailLive event row + bout tracking for one event slug.

Summary

Live event row + bout tracking for one event slug.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/events/{slug}" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/events/{slug}/live
Live MatchesAlias of /ufc/live/events/{slug}.

Summary

Alias of /ufc/live/events/{slug}.

REST
curl "https://api.citoapi.com/api/v1/ufc/events/{slug}/live" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/{boutId}
Live BoutLive bout payload (ufc-{fightMetricId} or bare fmid) with clock, fighters, lag metadata.

Summary

Live bout payload (ufc-{fightMetricId} or bare fmid) with clock, fighters, lag metadata.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/{boutId}" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/{boutId}/state
Live Bout StateCompact live state (Redis preferred) for polling clients.

Summary

Compact live state (Redis preferred) for polling clients.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/{boutId}/state" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/{boutId}/snapshots
Live SnapshotsHash-diffed live snapshots for one bout.

Summary

Hash-diffed live snapshots for one bout.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/{boutId}/snapshots" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/health
Live HealthLive worker health and heartbeat lag.

Summary

Live worker health and heartbeat lag.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/health" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/stream
Live SSE StreamSSE push feed from Redis ufc:live:updates. Filter with boutId and/or eventSlug.

Summary

SSE push feed from Redis ufc:live:updates. Filter with boutId and/or eventSlug.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/stream" \
  -H "x-api-key: YOUR_API_KEY"
GET/api/v1/ufc/live/{boutId}/socket
Live Transport ContractTransport contract docs for SSE + WebSocket auth, rooms, and envelope shape.

Summary

Transport contract docs for SSE + WebSocket auth, rooms, and envelope shape.

REST
curl "https://api.citoapi.com/api/v1/ufc/live/{boutId}/socket" \
  -H "x-api-key: YOUR_API_KEY"

Build on UFC Live

Start with free REST polling, wire SSE for push, and upgrade when WebSockets open on the paid plan.