Public API
Read-only REST API of the FreshPerf status page. No authentication, no API key. Every response is JSON over HTTPS.
https://status-api.freshperf.frConventions
- Localized fields are returned in both languages as {"en": "...", "fr": "..."}.
- Timestamps are Unix epoch milliseconds in UTC.
- A per-address rate limit guards against bursts of failing calls; a client getting 200 responses does not meet it. Polling every 30 to 60 seconds is enough.
- The summary is computed at most every 30 seconds server-side. Polling faster returns the same content.
- Errors return a generic JSON marker, for example {"error": "NOT_FOUND"}. No stack traces.
- CORS allows browser calls from the status page origins. Server-side clients are unaffected.
Status
/api/v1/statusOverall status
Overall state, service counters and active incident and maintenance counts. The overall field is one of: operational, degraded_performance, partial_outage, major_outage, maintenance.
Responses
Example response
{
"overall": "operational",
"updatedAt": 1783534774997,
"servicesUp": 12,
"servicesDown": 0,
"activeIncidents": 0,
"activeMaintenances": 1
}/api/v1/summaryFull summary
The full home-page payload: service groups, per-service live state, 90-day daily uptime (state per day: ok, degraded, down, no_data), active incidents and current or upcoming maintenance windows.
Responses
Example response
{
"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}/metricsLatency and uptime series
Time series for one service. 24h and 7d are bucketed from raw checks (at most 200 points). 90d returns one point per day from the daily rollups.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| slug* | path | string | Public service identifier (see /api/v1/summary). |
| range | query | 24h | 7d | 90d | Window of the series. Default: 24h. |
Responses
Example response
{
"slug": "main-site",
"range": "24h",
"points": [
{ "t": 1783532993763, "latencyMs": 45, "uptimePct": 100.0 }
]
}Incidents
/api/v1/incidentsIncident list
Paginated incident list, newest first. severity is minor, major or critical. status is investigating, identified, monitoring or resolved. affectedServiceIds holds internal service ids, not slugs. With state=active the list is not paginated: page and pageSize are ignored and total is the number of items returned.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| state | query | active | resolved | all | Filter. Default: all. |
| page | query | integer | Zero-based page index. Default: 0. |
| pageSize | query | integer (1-50) | Items per page. Default: 10. |
Responses
Example response
{
"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}Incident detail
One incident with its full update timeline, newest update first.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| id* | path | integer | Incident id. |
Responses
Example response
{
"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/maintenanceMaintenance windows
Maintenance windows with derived state (upcoming, in_progress, completed, cancelled). upcoming returns windows that have not ended, cancelled ones excluded, oldest start first; past returns finished ones, newest first; all returns every window, cancelled included. The response carries no page, pageSize or total.
Parameters
| Name | In | Type | Description |
|---|---|---|---|
| window | query | upcoming | past | all | Filter. Default: upcoming. |
| page | query | integer | Zero-based page index. Default: 0. Honoured with window=past only. |
| pageSize | query | integer (1-50) | Items per page. Default: 10. Honoured with window=past only. |
Responses
Example response
{
"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"
}