FreshPerfAPI

API publique

API REST en lecture seule de la page de statut FreshPerf. Sans authentification ni clé d'API. Chaque réponse est en JSON sur HTTPS.

Base URLhttps://status-api.freshperf.fr

Conventions

  • Les champs localisés sont renvoyés dans les deux langues sous la forme {"en": "...", "fr": "..."}.
  • Les horodatages sont en millisecondes epoch Unix (UTC).
  • Limite : 240 requêtes par minute et par IP. Au-delà, la réponse est HTTP 429.
  • Les réponses de synthèse sont mises en cache pendant 30 secondes.
  • Les erreurs renvoient un marqueur JSON générique, par exemple {"error": "NOT_FOUND"}. Aucun détail technique.
  • Le CORS autorise les appels navigateur depuis les origines de la page de statut. Les clients côté serveur ne sont pas concernés.

Statut

GET/api/v1/status

État global

État global, compteurs de services et nombre d'incidents et de maintenances actifs. Le champ overall vaut : operational, degraded_performance, partial_outage, major_outage ou maintenance.

Réponses

200Succès.
429Limite de débit dépassée.

Exemple de réponse

{
  "overall": "operational",
  "updatedAt": 1783534774997,
  "servicesUp": 12,
  "servicesDown": 0,
  "activeIncidents": 0,
  "activeMaintenances": 1
}
GET/api/v1/summary

Synthèse complète

La charge utile complète de la page d'accueil : groupes de services, état en direct par service, disponibilité quotidienne sur 90 jours (état par jour : ok, degraded, down, no_data), incidents actifs et maintenances en cours ou à venir.

Réponses

200Succès.
429Limite de débit dépassée.

Exemple de réponse

{
  "overall": "operational",
  "updatedAt": 1783534774997,
  "servicesUp": 12,
  "servicesDown": 0,
  "groups": [
    {
      "slug": "websites",
      "name": { "en": "Websites", "fr": "Sites web" },
      "description": null,
      "services": [
        {
          "slug": "main-site",
          "name": { "en": "Main site", "fr": "Site principal" },
          "status": "up",
          "lastCheckAt": 1783534770000,
          "latencyMs": 42,
          "uptime90d": 99.987,
          "days": [
            { "date": "2026-04-11", "uptimePct": 100.0, "state": "ok" }
          ]
        }
      ]
    }
  ],
  "activeIncidents": [],
  "maintenance": []
}

Services

GET/api/v1/services/{slug}/metrics

Séries de latence et disponibilité

Série temporelle d'un service. 24h et 7d sont agrégées depuis les sondes brutes (200 points au maximum). 90d renvoie un point par jour depuis les agrégats quotidiens.

Paramètres

NomEmplacementTypeDescription
slug*pathstringIdentifiant public du service (voir /api/v1/summary).
rangequery24h | 7d | 90dFenêtre de la série. Défaut : 24h.

Réponses

200Succès.
400Valeur de range invalide.
404Slug de service inconnu.
429Limite de débit dépassée.

Exemple de réponse

{
  "slug": "main-site",
  "range": "24h",
  "points": [
    { "t": 1783532993763, "latencyMs": 45, "uptimePct": 100.0 }
  ]
}

Incidents

GET/api/v1/incidents

Liste des incidents

Liste paginée des incidents, du plus récent au plus ancien. severity vaut minor, major ou critical. status vaut investigating, identified, monitoring ou resolved.

Paramètres

NomEmplacementTypeDescription
statequeryactive | resolved | allFiltre. Défaut : all.
pagequeryintegerIndex de page (base 0). Défaut : 0.
pageSizequeryinteger (1-50)Éléments par page. Défaut : 10.

Réponses

200Succès.
429Limite de débit dépassée.

Exemple de réponse

{
  "items": [
    {
      "id": 12,
      "severity": "major",
      "status": "resolved",
      "title": { "en": "Elevated error rate", "fr": "Taux d'erreurs élevé" },
      "affectedServiceIds": [3],
      "startedAt": 1783440000000,
      "resolvedAt": 1783452000000
    }
  ],
  "page": 0,
  "pageSize": 10,
  "total": 1
}
GET/api/v1/incidents/{id}

Détail d'un incident

Un incident avec sa chronologie complète de mises à jour, la plus récente en premier.

Paramètres

NomEmplacementTypeDescription
id*pathintegerIdentifiant de l'incident.

Réponses

200Succès.
404Identifiant d'incident inconnu.
429Limite de débit dépassée.

Exemple de réponse

{
  "id": 12,
  "severity": "major",
  "status": "resolved",
  "title": { "en": "Elevated error rate", "fr": "Taux d'erreurs élevé" },
  "updates": [
    {
      "status": "resolved",
      "body": { "en": "Incident resolved.", "fr": "Incident résolu." },
      "createdAt": 1783452000000
    }
  ]
}

Maintenance

GET/api/v1/maintenance

Fenêtres de maintenance

Fenêtres de maintenance avec leur état dérivé (upcoming, in_progress, completed, cancelled). Par défaut, seules les fenêtres non terminées sont renvoyées.

Paramètres

NomEmplacementTypeDescription
windowqueryupcoming | past | allFiltre. Défaut : upcoming.

Réponses

200Succès.
429Limite de débit dépassée.

Exemple de réponse

{
  "items": [
    {
      "id": 4,
      "title": { "en": "Database upgrade", "fr": "Mise à niveau base de données" },
      "body": { "en": "Planned upgrade.", "fr": "Mise à niveau planifiée." },
      "scheduledStart": 1783620000000,
      "scheduledEnd": 1783627200000,
      "affectedServiceIds": [1, 3],
      "state": "upcoming"
    }
  ],
  "window": "upcoming"
}