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.
https://status-api.freshperf.frConventions
- Les champs localisés sont renvoyés dans les deux langues sous la forme {"en": "...", "fr": "..."}.
- Les horodatages sont en millisecondes epoch Unix (UTC).
- Une limite par adresse protège contre les rafales d'appels en échec ; un client qui obtient des réponses 200 ne la rencontre pas. Une interrogation toutes les 30 à 60 secondes suffit.
- La synthèse est calculée au plus toutes les 30 secondes côté serveur. Interroger plus souvent renvoie le même contenu.
- 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
/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
Exemple de réponse
{
"overall": "operational",
"updatedAt": 1783534774997,
"servicesUp": 12,
"servicesDown": 0,
"activeIncidents": 0,
"activeMaintenances": 1
}/api/v1/summarySynthè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
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
/api/v1/services/{slug}/metricsSé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
| Nom | Emplacement | Type | Description |
|---|---|---|---|
| slug* | path | string | Identifiant public du service (voir /api/v1/summary). |
| range | query | 24h | 7d | 90d | Fenêtre de la série. Défaut : 24h. |
Réponses
Exemple de réponse
{
"slug": "main-site",
"range": "24h",
"points": [
{ "t": 1783532993763, "latencyMs": 45, "uptimePct": 100.0 }
]
}Incidents
/api/v1/incidentsListe 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. affectedServiceIds contient des identifiants internes de services, pas des slugs. Avec state=active la liste n'est pas paginée : page et pageSize sont ignorés et total vaut le nombre d'éléments rendus.
Paramètres
| Nom | Emplacement | Type | Description |
|---|---|---|---|
| state | query | active | resolved | all | Filtre. Défaut : all. |
| page | query | integer | Index de page (base 0). Défaut : 0. |
| pageSize | query | integer (1-50) | Éléments par page. Défaut : 10. |
Réponses
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
}/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
| Nom | Emplacement | Type | Description |
|---|---|---|---|
| id* | path | integer | Identifiant de l'incident. |
Réponses
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
/api/v1/maintenanceFenêtres de maintenance
Fenêtres de maintenance avec leur état dérivé (upcoming, in_progress, completed, cancelled). upcoming renvoie les fenêtres non terminées, hors annulées, du début le plus ancien au plus récent ; past renvoie les fenêtres terminées, la plus récente en premier ; all renvoie toutes les fenêtres, annulées comprises. La réponse ne porte ni page, ni pageSize, ni total.
Paramètres
| Nom | Emplacement | Type | Description |
|---|---|---|---|
| window | query | upcoming | past | all | Filtre. Défaut : upcoming. |
| page | query | integer | Index de page (base 0). Défaut : 0. Pris en compte avec window=past uniquement. |
| pageSize | query | integer (1-50) | Éléments par page. Défaut : 10. Pris en compte avec window=past uniquement. |
Réponses
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"
}