Wyzie Subs
Status API#
GET https://sub.wyzie.io/status/api is the same status the status page shows, as JSON for your own monitoring: whether the API is up, each source's state, uptime over 24 hours, 7, 30 and 90 days, a day-by-day history and recent incidents. No key needed, and it costs nothing.
curl https://sub.wyzie.io/status/api?days=7Parameters#
| Parameter | Example | Description |
|---|---|---|
| days | 30 | Days of per-day history in each history array, newest first: 0 to 90 (default 90). 0 leaves history out for a smaller response. |
| format | shields | shields returns a shields.io endpoint badge instead of the report. |
| source | charlie | With format=shields: a badge for one source (its 30-day uptime, or paused) instead of the overall status. |
Response#
{
"status": "degraded",
"summary": "API operational; 1 of 7 sources paused",
"updatedAt": "2026-09-24T20:10:00.000Z",
"trackingSince": "2026-09-24T19:48:37.032Z",
"api": {
"status": "operational",
"uptime": { "24h": 100, "7d": 99.98, "30d": 99.98, "90d": 99.98 },
"history": [{ "date": "2026-09-24", "uptime": 100, "downMinutes": 0 }]
},
"sources": {
"charlie": {
"name": "charlie",
"tier": "free",
"tags": [],
"status": "operational",
"movies": "operational",
"tv": "operational",
"state": "online",
"listed": true,
"pausedSince": null,
"latencyMs": 281,
"lastChecked": "2026-09-24T19:20:02.127Z",
"nextCheck": "2026-09-24T20:20:00.000Z",
"uptime": { "24h": 100, "7d": 100, "30d": 100, "90d": 100 },
"history": [{ "date": "2026-09-24", "uptime": 100, "downMinutes": 0 }]
}
},
"incidents": [
{
"source": "lima",
"start": "2026-09-24T06:20:04.000Z",
"end": null,
"ongoing": true,
"minutes": 830
}
],
"docs": "https://docs.wyzie.io/subs/usage/status"
}status: operational (every source passing), degraded (a source paused or failing a check) or partial_outage (more than half the sources paused).summary: the same in one sentence, e.g. "API operational; 2 of 7 sources paused".trackingSince: when uptime tracking began. Earlier time is not counted, so windows reaching further back cover less (or are null).api: the API itself: its uptime and history. status is always operational in a response you received.sources: one entry per source: tier (free or paid), the last check's status for movies and TV, latencyMs, lastChecked and nextCheck, plus uptime and history.sources.*.state/listed: online, suspect (failed one check; re-checked within 5 minutes) or paused (failed two checks in a row). A paused source has listed: false: it is out of /sources and source=all until a check passes, and pausedSince says since when.uptime: percentage of each window the API or source was up, rounded down to 3 decimals (so any downtime shows below 100), or null with no data yet.history: one entry per UTC day: date, uptime and downMinutes (null before tracking began).incidents: source pauses from the last 30 days, newest first: start, end (null while ongoing) and minutes.updatedAt: when this report was generated.docs: a link back to this page.
How It's Measured#
API uptime: while the API runs, the server records a heartbeat every minute. A minute without one counts as down. It is measured on our server, so a problem only between you and Cloudflare will not show here.
Source uptime: every source is checked hourly with a real search and download. The time a source is paused counts as down, from its first failed check until a check passes. One failed check alone does not count, and neither does a source we pause by hand.
Tracking began on September 24, 2026.
Badges#
Add ?format=shields to get a shields.io badge for your README or status page:

{"code":404,"message":"Unknown source","sources":[...]}, with the list of valid codenames.Using It in Your App#
To pick sources in your app, /sources already lists only the live ones. The status API is for showing your users what is up, alerting yourself, or deciding when to retry:
const report = await fetch('https://sub.wyzie.io/status/api?days=0').then((r) =>
r.json(),
);
const live = Object.values(report.sources)
.filter((s) => s.listed)
.map((s) => s.name);
if (report.status !== 'operational') console.warn(report.summary);Announcements about the API and the store (new features, changes that affect your app) are posted at sub.wyzie.io/news, by email if you subscribe there, or by RSS.
