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
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|degradedservices[]โname,status,description,lastChecked,responseTime,uptime,category, and optionalregions[]when multi-region monitoring is configured (code,status,responseTime?,checkedAtISO). Health-check URLs are never included.metricsโoperational,total,avgResponseTime,uptimelastUpdatedโ 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. Requiresservicewhen 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-8601overall.statusโoperational|degradedmetricsโoperational,total,avgResponseTimeMs,avgUptimePercentservices[]โid,name,status,description,lastCheckedAt(ISO),responseTimeMs,uptimePercent,category,monitorRegions[](codeonly), optionalregions[](code,status,responseTimeMs,checkedAtISO). 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: