Homepage Dashboard Widget
Surface Teamarr’s key stats on a Homepage dashboard using its Custom API widget. Teamarr exposes a purpose-built KPI endpoint that returns a flat JSON payload with stable field names:
GET /api/v1/stats/homepage
Recommended widget
Homepage’s block layout displays up to four fields. This config shows what’s on now, today’s slate, your channel count, and how fresh the last generation is:
- Teamarr:
icon: /icons/teamarr.svg # or a URL to the logo
href: http://your-teamarr-ip:9195
description: Sports EPG
widget:
type: customapi
url: http://your-teamarr-ip:9195/api/v1/stats/homepage
refreshInterval: 60000 # ms — keep at 60s+; no need to poll faster
mappings:
- label: LIVE
field: live_now
- label: TODAY
field: games_today
- label: CHANNELS
field: channels_total
- label: LAST RUN
field: last_run_at
format: relativeDate
LAST RUN renders as a relative time (“2 hours ago”) — a stale value is the quickest tell that scheduled generation has stopped running.
Available fields
| Field | Type | Meaning |
|---|---|---|
live_now | number | Games in progress right now (unique across team + event EPGs) |
games_today | number | Games starting today (unique across team + event EPGs) |
channels_total | number | Team + event channels combined |
channels_team | number | Team-based channels in the current EPG |
channels_event | number | Active managed event channels |
programmes_total | number | Programmes generated by the last full run |
streams_matched | number | Streams matched in the last full run |
streams_unmatched | number | Streams unmatched in the last full run |
match_percent | number | Match rate of the last full run (null before first run) |
last_run_status | string | completed, failed, partial, or running |
last_run_at | ISO timestamp | When the last full run finished (your EPG timezone) |
next_run_at | ISO timestamp | Next scheduled generation (null if scheduler off) |
scheduler_running | boolean | Whether scheduled generation is enabled |
dispatcharr_configured | boolean | Whether Dispatcharr integration is set up |
Useful alternates for the fourth slot:
- label: MATCH %
field: match_percent
suffix: "%"
- label: NEXT RUN
field: next_run_at
format: relativeDate
The payload is computed from stored EPG and run stats — it never triggers a generation or a Dispatcharr connection test, so polling it is cheap. Field names are stable; new fields may be added, existing ones won’t be renamed.