Logo of wyzie-docsWyzie Docs

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=7
It is public (CORS open) and cached for 60 seconds, so polling more than once a minute returns the same answer. Sources are named by codename, as in /sources.

Parameters#

ParameterExampleDescription
days30Days of per-day history in each history array, newest first: 0 to 90 (default 90). 0 leaves history out for a smaller response.
formatshieldsshields returns a shields.io endpoint badge instead of the report.
sourcecharlieWith 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:

![Wyzie Subs](https://img.shields.io/endpoint?url=https%3A%2F%2Fsub.wyzie.io%2Fstatus%2Fapi%3Fformat%3Dshields)
![charlie](https://img.shields.io/endpoint?url=https%3A%2F%2Fsub.wyzie.io%2Fstatus%2Fapi%3Fformat%3Dshields%26source%3Dcharlie)
format=shields with a source that does not exist returns 404: {"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.