Status API

Public JSON and RSS endpoints for integrations, status boards, and monitoring. All timestamps in responses use ISO-8601 where applicable. Production base URL: https://status.licensechain.app

Open status page โ†’

CORS

GET responses from /api/status, /api/v2/status, /api/status/stream, /api/v2/status/stream, /api/status/uptime, /api/v2/status/uptime, /api/incidents, and /api/v2/incidents include Access-Control-Allow-Origin: * so browser-based dashboards can fetch them without a same-origin proxy.

Mobile and in-app integration

Native Android, iOS, and hybrid shells can treat the status host as a read-only JSON API (no LicenseChain session required).

Endpoint Use on mobile
GET /api/status Home screen / settings โ€œsystem statusโ€ summary (services, metrics).
GET /api/incidents?limit=20 Incident list; supports q, status, service query params.
GET /api/status/uptime?days=30 Sparkline or chart data.
GET /api/status/stream?interval=15 SSE โ€” same JSON as /api/status on each event; OkHttp and NSURLSession can consume streams, or poll /api/status every 30โ€“60s.
GET /api/status/rss Optional: hand off to the system RSS reader.

Android (Kotlin) โ€” one-shot fetch with OkHttp

val client = OkHttpClient()
val req = Request.Builder()
  .url("https://status.licensechain.app/api/status")
  .get()
  .build()
client.newCall(req).execute().use { resp ->
  val body = resp.body?.string() ?: ""
  // Parse JSON: status, services, metrics, lastUpdated
}

iOS (Swift) โ€” URLSession

let url = URL(string: "https://status.licensechain.app/api/status")!
URLSession.shared.dataTask(with: url) { data, _, _ in
  guard let data = data else { return }
  // Decode JSON: status, services, metrics, lastUpdated
}.resume()

Use HTTPS, respect battery (avoid sub-second polling), and surface lastUpdated or checkedAt from payloads so users know data freshness.

Service summary

GET /api/status

Returns aggregated service rows with human-oriented labels and formatted uptime strings.

Response (200):

  • status โ€” operational | degraded
  • services[] โ€” name, status, description, lastChecked, responseTime, uptime, category, and optional regions[] when multi-region monitoring is configured (code, status, responseTime?, checkedAt ISO). Health-check URLs are never included.
  • metrics โ€” operational, total, avgResponseTime, uptime
  • lastUpdated โ€” ISO timestamp

Multi-region monitoring

When multi-region probes are configured, the public API exposes region codes and rolled-up status only โ€” never probe URLs.

GET /api/status/stream

Server-Sent Events (text/event-stream): repeated JSON snapshots with the same shape as GET /api/status. Default push interval is 15s; optional query interval (seconds, clamped 5โ€“60). Browsers and mobile WebViews can subscribe with EventSource when same-origin or CORS allows.

GET /api/status/uptime

Query parameters:

  • days โ€” lookback window (default 30, max 90).
  • service โ€” optional; filter to one service name.
  • region โ€” optional; filter to one probe region code. Requires service when set.

Response: { success, service, region, days, points[] } where each point has bucket (date), uptime (0โ€“100), and checks.

API v2 (stable schema for integrations)

Prefer these paths for new clients; v1 remains supported for existing embeds.

GET /api/v2/status

  • api.version โ€” "2.0"
  • generatedAt โ€” ISO-8601
  • overall.status โ€” operational | degraded
  • metrics โ€” operational, total, avgResponseTimeMs, avgUptimePercent
  • services[] โ€” id, name, status, description, lastCheckedAt (ISO), responseTimeMs, uptimePercent, category, monitorRegions[] (code only), optional regions[] (code, status, responseTimeMs, checkedAt ISO). Health-check URLs are never included.

GET /api/v2/status/stream

SSE with the same JSON body as GET /api/v2/status; query interval (seconds, 5โ€“60, default 15).

GET /api/v2/status/uptime

Same query semantics as v1, with envelope: api, generatedAt, success, service, region, days, points.

GET /api/v2/incidents

Same query params as v1 (limit, q, status, service). Response includes api, generatedAt, success, and incidents[] with ISO date fields (startsAt, endsAt, createdAt, updatedAt, resolvedAt โ€” nullable where applicable). Each incident may include timeline: an array of { at, fromStatus?, toStatus?, message? } with public messages and status transitions only.

GET /api/v2/status/customization

Public branding payload: brandName, logoUrl, supportUrl, whiteLabelEnabled, publicSiteUrl, themeCssVars.

GET /api/v2/enterprise/features

High-level enterprise flags and counters for status-page capabilities.

RSS feed

GET /api/status/rss

RSS/Atom feed of recent incidents (linked via <link rel="alternate"> on the status site).

Incidents

GET /api/incidents

Supports filters such as q, status, and service. Returns incident records for the status UI and external consumers. Payload matches v2 incident objects, including optional timeline (public workflow activity).

Outbound service-change webhook

When a monitored service changes status (for example operational โ†’ degraded), an optional outbound webhook can notify your endpoint. Example body:

{
  "source": "licensechain-status",
  "event": "service_status_changed",
  "service": {
    "name": "API Service",
    "previousStatus": "operational",
    "newStatus": "degraded",
    "checkedAt": "2026-04-04T12:00:00.000Z"
  }
}

Live status

View the public status board or fetch the JSON summary directly: