---
title: "Diagnose late or missing footage for a game or arena window"
method: GET
path: "/v1/admin/diagnostics/content_gap"
tags: ["Admin Diagnostics"]
---

# Diagnose late or missing footage for a game or arena window

`GET /v1/admin/diagnostics/content_gap`

## Request

- Base URL: `https://api.hify.club`
- URL: `https://api.hify.club/v1/admin/diagnostics/content_gap`
- Auth: API key in header `X-User-Token`

Admin-only diagnostic that classifies when footage for a window arrived (`on_time`, `late`, `missing`) and names the most likely cause, using arena video metadata, previews, sibling arenas and recorder telemetry from Grafana Cloud Prometheus. Returns the same fields as one row of the `diagnostics:content_gaps` rake task CSV.

Provide a scope in one of two mutually exclusive modes:
- **Game mode**: pass `game_id`. The arena and time window are derived
  from the game.
- **Arena window mode**: pass `arena_id`, `start_time` and `end_time`
  (all three required). `start_time` and `end_time` must be ISO8601
  timestamps, `end_time` must be after `start_time`, and the window
  may span at most 7 days.

## Query parameters

- `game_id` integer
- `arena_id` integer
- `start_time` string, date-time
- `end_time` string, date-time

## Response `200`

Content gap diagnosis

- ContentGapDiagnostic
  - `game_id` integer, nullable: Null in arena window mode.
  - `game_created_at` string, date-time, nullable
  - `facility_id` integer
  - `facility_name` string
  - `arena_id` integer
  - `arena_name` string
  - `arena_enabled` boolean
  - `start_time` string, date-time
  - `end_time` string, date-time
  - `final` boolean: False only for `missing` windows that ended less than 12 hours ago, whose footage may still arrive.
  - `bucket` 'on_time' | 'late' | 'missing'
  - `cause` 'no_telemetry' | 'wrong_arena' | 'analyzer_missed' | 'detected_not_ingested' | 'upload_outage' | 'slow_upload' | 'upload_failures' | 'unexplained' | 'null', nullable
  - `delay_minutes` integer, nullable: First footage arrival minus end_time.
  - `avm_count` integer
  - `preview_count` integer
  - `preview_first_arrival_minutes` integer, nullable
  - `own_gameplay_decisions` integer
  - `own_non_gameplay_decisions` integer
  - `top_decision_reasons` string: Space-separated `reason:count` pairs, most frequent first.
  - `sibling_arena_id` integer, nullable
  - `sibling_avm_count` integer, nullable
  - `sibling_gameplay_detected` boolean, nullable
  - `booked_siblings_with_avm` string: Space-separated ids of sibling arenas with footage and their own game.
  - `later_footage_ingested` boolean
  - `facility_avg_upload_s_per_segment` number, nullable
  - `facility_baseline_upload_s_per_segment` number, nullable
  - `facility_upload_failures` integer
  - `longest_upload_gap_minutes` integer
  - `longest_telemetry_gap_minutes` integer
  - `same_slot_game_ids` string: Space-separated ids of other games overlapping this window on the arena.

## Other responses

- `401`: Unauthorized – missing or invalid auth token
- `403`: Forbidden – caller is not an admin
- `404`: Game or arena not found
- `422`: Unprocessable entity – scope could not be resolved (neither game_id nor a complete arena_id+start_time+end_time was provided), a timestamp was invalid, or the window exceeded 7 days.
- `502`: Grafana Cloud Prometheus could not be queried

---

[API](https://skmtc.dev/hify/apis/hify-apis.md) - [All operations](https://skmtc.dev/hify/apis/hify-apis/llms.txt) - [OpenAPI document](https://skmtc.dev/hify/apis/hify-apis/revisions/b5920403538d?raw)
