API de statut

Points de terminaison publics JSON et RSS pour les intégrations, les tableaux d'état et la surveillance. Tous les horodatages dans les réponses utilisent ISO-8601 le cas échéant. URL de base de production : https://status.licensechain.app

Ouvrir la page d'état →

CORS

GET réponses de /api/status, /api/v2/status, /api/status/stream, /api/v2/status/stream, /api/status/uptime, /api/v2/status/uptime, /api/incidents, et /api/v2/incidents inclure Access-Control-Allow-Origin: * afin que les tableaux de bord basés sur un navigateur puissent les récupérer sans proxy de même origine.

Intégration mobile et dans l'application

Les shells natifs Android, iOS et hybrides peuvent traiter l'hôte de statut comme un API JSON en lecture seule (aucune séance LicenseChain requise).

Point de terminaison Utilisation sur mobile
GET /api/status Écran d’accueil/récapitulatif « état du système » des paramètres (services, metrics).
GET /api/incidents?limit=20 Liste des incidents ; prend en charge q, status, service paramètres de requête.
GET /api/status/uptime?days=30 Données sparkline ou graphique.
GET /api/status/stream?interval=15 SSE - même JSON que /api/status sur chaque événement ; OkHttp et NSURLSession peuvent consommer des flux ou interroger /api/status toutes les 30 à 60 secondes.
GET /api/status/rss Facultatif : transfert au lecteur système RSS.

Android (Kotlin) – récupération en une seule fois avec 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()

Utiliser HTTPS, respectez la batterie (évitez les interrogations inférieures à la seconde) et la surface lastUpdated ou checkedAt des charges utiles afin que les utilisateurs connaissent la fraîcheur des données.

Résumé des services

GET /api/status

Renvoie les lignes de service agrégées avec des étiquettes orientées vers l'humain et des chaînes de disponibilité formatées.

Réponse (200) :

  • statusoperational | degraded
  • services[]name, status, description, lastChecked, responseTime, uptime, category, et facultatif regions[] lorsque la surveillance multirégion est configurée (code, status, responseTime?, checkedAt ISO). Les URL de contrôle de santé ne sont jamais incluses.
  • metricsoperational, total, avgResponseTime, uptime
  • lastUpdated — Horodatage ISO

Surveillance multirégionale

Lorsque des sondes multirégions sont configurées, l'API publique expose la région codes et le statut cumulé uniquement : ne sondez jamais les URL.

GET /api/status/stream

Server-Sent Events (text/event-stream) : instantanés JSON répétés avec le même forme comme GET /api/status. L'intervalle de poussée par défaut est 15s; requête facultative interval (secondes, serré 5–60). Les navigateurs et les WebViews mobiles peuvent s'abonner avec EventSource lorsque la même origine ou CORS le permet.

GET /api/status/uptime

Paramètres de requête :

  • days — fenêtre d'analyse (par défaut 30, maximum 90).
  • service - facultatif; filtrer sur un nom de service.
  • region - facultatif; filtrer sur un code de région de sonde. Nécessite service une fois réglé.

Réponse: { success, service, region, days, points[] } où chaque point a bucket (date), uptime (0-100), et checks.

API v2 (schéma stable pour les intégrations)

Préférer ces parcours pour les nouveaux clients ; La v1 reste prise en charge pour les intégrations existantes.

GET /api/v2/status

  • api.version"2.0"
  • generatedAt — ISO-8601
  • overall.statusoperational | degraded
  • metricsoperational, total, avgResponseTimeMs, avgUptimePercent
  • services[]id, name, status, description, lastCheckedAt (ISO), responseTimeMs, uptimePercent, category, monitorRegions[] (code uniquement), en option regions[] (code, status, responseTimeMs, checkedAt ISO). Les URL de contrôle de santé ne sont jamais incluses.

GET /api/v2/status/stream

SSE avec le même corps JSON que GET /api/v2/status; requête interval (secondes, 5–60, défaut 15).

GET /api/v2/status/uptime

Même sémantique de requête que la v1, avec enveloppe : api, generatedAt, success, service, region, days, points.

GET /api/v2/incidents

Mêmes paramètres de requête que la v1 (limit, q, status, service). La réponse comprend api, generatedAt, success, et incidents[] avec des champs de date ISO (startsAt, endsAt, createdAt, updatedAt, resolvedAt — Nullable le cas échéant). Chaque incident peut inclure timeline: un tableau de { at, fromStatus?, toStatus?, message? } avec des messages publics et des transitions de statut uniquement.

GET /api/v2/status/customization

Charge utile de marque publique : brandName, logoUrl, supportUrl, whiteLabelEnabled, publicSiteUrl, themeCssVars.

GET /api/v2/enterprise/features

Indicateurs et compteurs d'entreprise de haut niveau pour les fonctionnalités de page d'état.

RSS flux

GET /api/status/rss

Flux RSS/Atom des incidents récents (liés via <link rel="alternate"> sur le site de statut).

Incidents

GET /api/incidents

Prend en charge des filtres tels que q, status, et service. Renvoie les enregistrements d'incidents pour l'interface utilisateur d'état et les consommateurs externes. La charge utile correspond aux objets d'incident v2, y compris facultatifs timeline (activité de workflow public).

Webhook de modification de service sortant

Lorsqu'un service surveillé change d'état (par exemple opérationnel → dégradé), un webhook sortant facultatif peut informer votre point de terminaison. Exemple de corps :

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

Statut en direct

Consultez le tableau d'état public ou récupérez directement le résumé JSON :