Skip to content

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/status

Python

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.

Response
{
  "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"}
      ]
    }
  ]
}
FieldValue
statusThe overall state: down when the api component is down, degraded when any component is not operational, otherwise operational
updated_atRFC 3339 time in UTC
componentsSix 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[].statusThe current state: operational, degraded or down
components[].uptime_90dPercent 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[].daysExactly 90 entries, oldest first; the last entry is the current UTC day
components[].days[].dateYYYY-MM-DD, a UTC day
components[].days[].statusoperational, 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.
ComponentHealth checksRequests
apiAPI checknone
language-modelsAPI check, model service checkPOST /v1/chat/completions, GET /v1/models
text-to-speechAPI check, model service checkPOST /v1/audio/speech, speech jobs
speech-to-textAPI check, model service checkPOST /v1/audio/transcriptions, transcription jobs
voicesAPI check/v1/media/voices routes
eventsAPI checknone
StateCurrent statusDay status
downA health check fails now, or at least 50 % of the last 60 minutes' attempts failed, from 5 attemptsHealth checks failed for 60 minutes or more, or at least 50 % of the day's attempts failed, from 10 attempts
degradedAt least 20 % of the last 60 minutes' attempts failed, from 5 attemptsHealth checks failed for under 60 minutes, or at least 10 % of the day's attempts failed, from 10 attempts
operationalNeither of the aboveNeither of the above
unknownNot usedThe 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

StatusCodeMeaning
500internalServer error
503unavailableThe status cannot be read now; a later request computes it again