PushFlo

Status API

The same live health data shown on status.pushflo.dev, as a public JSON API for your automated monitoring. No authentication, no API key — point your monitor at it and go.

Current status

Returns the live status of every PushFlo service. Responses are cached for 30 seconds at the edge.

Terminalbash
curl https://status.pushflo.dev/api/v1/status
Responsejson
{
  "version": "1",
  "overall": "operational",
  "services": [
    { "id": "realtime-api", "name": "Real-time API", "status": "operational", "latency_ms": 42, "message": null },
    { "id": "database", "name": "Database (D1)", "status": "operational", "latency_ms": 11, "message": null },
    { "id": "cache", "name": "Cache (KV)", "status": "operational", "latency_ms": 5, "message": null },
    { "id": "websocket-gateway", "name": "WebSocket Gateway", "status": "operational", "latency_ms": 18, "message": null }
  ],
  "timestamp": "2026-07-10T12:00:00.000Z"
}

HTTP semantics

  • 200 — operational or degraded
  • 503 — major outage (overall is down)

A simple uptime monitor that only checks status codes will alert correctly during an outage. The 503 response still carries the full JSON body, so richer monitors can inspect exactly which service failed.

Status values

  • operational
  • degraded
  • down
  • unknown

Applies to both the overall field and each service. overall is down if any service is down, and degraded if any service is degraded or unreported.

Service IDs

  • realtime-api — REST publishing at api.pushflo.dev
  • database — edge SQLite storage
  • cache — edge key-value cache
  • websocket-gateway — real-time connections

IDs are stable and safe to key automation on. Display names may change; IDs won't. New services will be added to the same array.

Access

  • No authentication
  • CORS: open to any origin
  • Cache-Control: 30s (never cached during an outage)

Safe to call from browsers, dashboards, cron jobs, and monitoring agents.

Uptime history

Service health is sampled every 5 minutes. This endpoint reports uptime percentages over rolling windows plus recent downtime periods from the last 7 days. Responses are cached for 5 minutes.

Terminalbash
curl https://status.pushflo.dev/api/v1/status/history
Responsejson
{
  "version": "1",
  "windows": {
    "24h": { "services": { "realtime-api": { "uptime_pct": 100, "samples": 288 }, "...": {} } },
    "7d":  { "services": { "realtime-api": { "uptime_pct": 99.95, "samples": 2016 }, "...": {} } },
    "90d": { "services": { "realtime-api": { "uptime_pct": 99.98, "samples": 25920 }, "...": {} } }
  },
  "recent_downtime": [
    { "service_id": "database", "from": "2026-07-08T03:10:00.000Z", "to": "2026-07-08T03:25:00.000Z", "duration_minutes": 15 }
  ],
  "timestamp": "2026-07-10T12:00:00.000Z"
}

uptime_pct is null when a window has no samples yet. Missed samples are excluded rather than counted as downtime.

Hooking up a monitor

Any HTTP monitor works out of the box — configure it to expect HTTP 200 from https://status.pushflo.dev/api/v1/status and it will alert on outages. For finer-grained checks, assert on the JSON:

check-pushflo.shbash
#!/usr/bin/env bash
# Alert if PushFlo reports anything other than fully operational
overall=$(curl -sf https://status.pushflo.dev/api/v1/status | jq -r .overall)

if [ "$overall" != "operational" ]; then
  echo "PushFlo status: $overall" >&2
  exit 1
fi