Status
GET /v1/status, the current state of the API and of each product, with 90 days of daily states and uptime.
GET /v1/status
Returns the current state of the API and of each product, the state of each for every UTC day of the last 90 days, and the uptime of each over the covered part of those days. The route requires no key.
Request
curl
curl https://api.albastov.com/v1/statusPython
import json
import urllib.request
req = urllib.request.Request(
"https://api.albastov.com/v1/status",
headers={"User-Agent": "my-app/1.0"},
)
status = json.load(urllib.request.urlopen(req))
print(status["status"])
for c in status["components"]:
print(c["name"], c["status"], c["uptime_90d"])JavaScript
const res = await fetch("https://api.albastov.com/v1/status");
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const status = await res.json();
console.log(status.status);
for (const c of status.components) console.log(c.name, c.status, c.uptime_90d);Response
200, Content-Type: application/json, Cache-Control: public, max-age=30. The server computes the response at
most once every 30 seconds; updated_at is the time of that computation. The example shows one component and
two of its 90 days.
{
"status": "operational",
"updated_at": "2026-11-03T12:00:00Z",
"components": [
{
"id": "api",
"name": "API",
"status": "operational",
"uptime_90d": 99.98,
"days": [
{"date": "2026-08-06", "status": "unknown"},
{"date": "2026-11-03", "status": "operational"}
]
}
]
}| Field | Value |
|---|---|
status | The overall state: down when the api component is down, degraded when any component is not operational, otherwise operational |
updated_at | RFC 3339 time in UTC |
components | Six entries, always in this order: api API, language-models Language models, text-to-speech Text to speech, speech-to-text Speech to text, voices Voices, events Events |
components[].status | The current state: operational, degraded or down |
components[].uptime_90d | Percent of the covered time, up to 90 days, with every health check of the component passing; 2 decimal places. 100 when no check failed |
components[].days | Exactly 90 entries, oldest first; the last entry is the current UTC day |
components[].days[].date | YYYY-MM-DD, a UTC day |
components[].days[].status | operational, degraded, down or unknown |
Status rules
Each component has health checks and, except api and events, a failure share: the share of its account key
(abk_) requests answered with a 5xx status, and for text-to-speech and speech-to-text also the share of its
finished jobs that failed on the service side or expired in the queue. A request or job refused for the caller's
input counts as an attempt, not a failure; a cancelled job counts as neither.
Two health checks feed the components:
- API check: a request to the API's health route; the check fails while the API does not answer.
- Model service check: a request to the service that runs the models; the check fails while that service does not answer.
| Component | Health checks | Requests |
|---|---|---|
api | API check | none |
language-models | API check, model service check | POST /v1/chat/completions, GET /v1/models |
text-to-speech | API check, model service check | POST /v1/audio/speech, speech jobs |
speech-to-text | API check, model service check | POST /v1/audio/transcriptions, transcription jobs |
voices | API check | /v1/media/voices routes |
events | API check | none |
| State | Current status | Day status |
|---|---|---|
down | A health check fails now, or at least 50 % of the last 60 minutes' attempts failed, from 5 attempts | Health checks failed for 60 minutes or more, or at least 50 % of the day's attempts failed, from 10 attempts |
degraded | At least 20 % of the last 60 minutes' attempts failed, from 5 attempts | Health checks failed for under 60 minutes, or at least 10 % of the day's attempts failed, from 10 attempts |
operational | Neither of the above | Neither of the above |
unknown | Not used | The day precedes the start of the status history |
A day takes the worst state of its health checks and failure shares. uptime_90d is
100 × (1 − time with a failed health check ÷ time covered). The time covered runs from the first of the 90 days, or
from the start of the status history when later, to updated_at; unknown days are outside it.
Only health checks count toward uptime_90d. A day that is degraded or down from its failure share alone does
not lower uptime_90d, so a component can show 100 beside a degraded day.
Errors
| Status | Code | Meaning |
|---|---|---|
| 500 | internal | Server error |
| 503 | unavailable | The status cannot be read now; a later request computes it again |