Service Status API
This guide describes version 1 of the public status API. The JSON endpoint is GET https://tenrai.org/status/api/status.
Request
GET https://tenrai.org/status/api/status returns the current public status snapshot.
Example response
{
"api_version": 1,
"page": {
"name": "Tenrai Status",
"url": "https://tenrai.org/status"
},
"checker": {
"healthy": true,
"last_check_at": "2026-05-23T10:00:00.000Z",
"stale_after_seconds": 120
},
"generated_at": "2026-05-23T10:00:30.000Z",
"services": [
{
"id": "jikan",
"name": "Jikan API",
"status": "operational",
"homepage_url": "https://jikan.moe/",
"logo_url": "https://jikan.moe/favicon/favicon-32x32.png?v=2",
"last_check_at": "2026-05-23T10:00:00.000Z",
"outage_minutes_90d": 0,
"degraded_minutes_90d": 0,
"daily_outage_minutes_90d": {},
"daily_degraded_minutes_90d": {},
"active_maintenance": null
}
],
"scheduled_maintenances": []
}
Example with scheduled maintenance
{
"api_version": 1,
"page": {
"name": "Tenrai Status",
"url": "https://tenrai.org/status"
},
"checker": {
"healthy": true,
"last_check_at": "2026-05-23T10:00:00.000Z",
"stale_after_seconds": 120
},
"generated_at": "2026-05-23T10:00:30.000Z",
"services": [
{
"id": "jikan",
"name": "Jikan API",
"status": "operational",
"homepage_url": "https://jikan.moe/",
"logo_url": "https://jikan.moe/favicon/favicon-32x32.png?v=2",
"last_check_at": "2026-05-23T10:00:00.000Z",
"outage_minutes_90d": 0,
"degraded_minutes_90d": 0,
"daily_outage_minutes_90d": {},
"daily_degraded_minutes_90d": {},
"active_maintenance": null
}
],
"scheduled_maintenances": [
{
"id": "maintenance-example",
"service_id": "jikan",
"title": "Planned infrastructure maintenance",
"starts_at": "2026-05-24T01:00:00.000Z",
"ends_at": "2026-05-24T02:00:00.000Z",
"status": "scheduled",
"state": "scheduled",
"created_at": "2026-05-23T10:00:00.000Z",
"updated_at": "2026-05-23T10:00:00.000Z"
}
]
}
Field reference
Top-level fields
| Field | Type | Description |
|---|---|---|
api_version | integer | Contract version (currently 1) |
page | object | Status-page metadata |
checker | object | Checker freshness metadata |
generated_at | string | ISO 8601 snapshot generation timestamp |
services | array of service objects | Current public service snapshots |
scheduled_maintenances | array of maintenance objects | Scheduled and active maintenance records |
Page and checker fields
| Field | Type | Description |
|---|---|---|
page.name | string | Status-page name |
page.url | string | Status-page URL |
checker.healthy | boolean | Whether the latest completed check is within the stale threshold |
checker.last_check_at | string or null | ISO 8601 timestamp for the most recent completed service check |
checker.stale_after_seconds | integer | Freshness allowance in seconds |
Service fields
| Field | Type | Description |
|---|---|---|
id | string | Service identifier |
name | string | Service display name |
status | string enum | operational, degraded, down, unknown, or maintenance |
homepage_url | string | Public homepage URL |
logo_url | string | Public logo URL |
last_check_at | string or null | ISO 8601 timestamp for the latest completed check |
outage_minutes_90d | integer | Total outage minutes in the 90-day view |
degraded_minutes_90d | integer | Total degraded minutes in the 90-day view |
daily_outage_minutes_90d | object | YYYY-MM-DD date keys and integer outage-minute values for the 90-day view |
daily_degraded_minutes_90d | object | YYYY-MM-DD date keys and integer degraded-minute values for the 90-day view |
active_maintenance | maintenance object or null | Active maintenance for this service, if any |
Maintenance record fields
| Field | Type | Description |
|---|---|---|
id | string | Maintenance identifier |
service_id | string | A service identifier or all |
title | string | Maintenance title |
starts_at | string | ISO 8601 maintenance start timestamp |
ends_at | string | ISO 8601 maintenance end timestamp |
status | string | Maintenance status text |
state | string enum | scheduled or active; an active_maintenance record is always active |
created_at | string | ISO 8601 creation timestamp |
updated_at | string | ISO 8601 last-update timestamp |
Rate Limiting
There is no rate limit
Versioning
The top-level api_version field identifies the response contract. Version 1 changes are additive only. There will be no version 2, this is the final version, so no need to worry about breaking changes.
Status values
Each item in services has a status of operational, degraded, down, unknown, or maintenance.
Freshness, checks, and caching
generated_atis when the snapshot was generated.checker.last_check_atis the most recent completed service check;checker.healthyreports whether it is withinchecker.stale_after_seconds.- Checks normally run about once per minute. Public responses use a 30-second cache TTL, so clients should poll no more often than once per minute.
Service data and aggregate metrics
Each service includes its identifier, display name, current status, homepage and logo URLs, and last_check_at. The 90-day aggregates are outage_minutes_90d, degraded_minutes_90d, daily_outage_minutes_90d, and daily_degraded_minutes_90d. Daily outage entries below five total minutes are intentionally omitted from the public aggregate; degraded metrics include recorded degraded minutes.
Maintenance data
scheduled_maintenances contains scheduled and active maintenance records. active_maintenance is either the active maintenance record for a service or null. Maintenance records include their service, timing, and state.