Проверьте, что API работает

Две проверки состояния, которым не нужен ключ, говорят, отвечает ли API и отвечают ли его зависимости, а одна операция — что происходит, пока реестр недоступен.

Три операции этой страницы говорят, как дела у самого API. Две из них — проверки состояния: они стоят вне /v1, не требуют API-ключа и отвечают простым объектом, который не обёрнут в data. Третья — обычная операция /v1, и ей нужен ключ.

Какую проверку вызывать

ПроверкаЧто она отвечает
GET /health200, как только API может обслужить запрос. Состояние MySQL и Redis — в теле: ok либо down и причина.
GET /ready200, когда отвечают и MySQL, и Redis, и 503, когда один из них не отвечает. Тело ответа 503 называет эту зависимость в failed.

Вызывайте /ready там, где что-то решает статус ответа, например в балансировщике нагрузки или в мониторинге доступности. Вызывайте /health, чтобы прочитать, какой релиз запущен и что не работает: его статус остаётся 200, пока зависимость недоступна.

Когда реестр недоступен

Slen записывает в реестр каждый холд и каждое списание. GET /v1/degraded-status говорит, что делает API, пока реестр не отвечает, и что после этого осталось в проекте ключа.

  • mode — настройка сервиса, одна для всех проектов: fail_closed или fail_open_with_cap. Пока реестр недоступен, запрос, который тратил бы деньги, отклоняется в любом режиме: 503 с кодом ledger_unavailable.

  • degraded_now равно true с первого пропущенного вызова и до тех пор, пока не посчитана стоимость последнего из них. События вебхуков ledger.degraded и ledger.restored отмечают начало и конец этого периода.

  • journal_depth — число вызовов, стоимость которых ещё не посчитана.

  • failed_depth — число вызовов, стоимость которых посчитать не удалось. Их стоимости в реестре нет.

Здоровый ответ — degraded_now, равное false, и journal_depth, равное нулю.

Операции

Описания операций и полей приведены на английском.

Жив ли сервис — с состоянием каждой зависимости

GET /health

  • API-ключ не нужен
  • Доступно в SDK для PHP и Node.js

Answers 200 as soon as PHP can serve; a dependency that is down is named in the body, not in the status. For a strict check use GET /ready. Not authenticated.

Ответы

200

The process serves

Заголовки

  • X-Request-Id
application/json
{
  "app": "string",
  "release": "string",
  "server": "string",
  "mysql": "string",
  "redis": "string",
  "queue": "string",
  "broadcast": "string",
  "opcache_preloaded_files": 1,
  "opcache_cached_scripts": 1
}

Готовность — отвечают ли MySQL и Redis

GET /ready

  • API-ключ не нужен

503 while a dependency is unreachable, so an orchestrator stops routing traffic to the instance. Not authenticated.

Ответы

200

Every dependency answers

Заголовки

  • X-Request-Id
application/json
{
  "status": "ok",
  "failed": {
    "key": "string"
  }
}

Ошибки

СтатусКодыКогда
503

A dependency is unreachable; failed names it

Заголовки

  • X-Request-Id

Тело каждой ошибки — конверт ошибки.

Отвечает ли реестр и что пропущено, пока он молчал

GET /v1/degraded-status

  • Разрешение: read

The degraded mode as it stands for the caller's project — an API key's own, a person's active one. Everything here is read from Redis, and the route skips the database pre-check, so the page answers while MySQL does not: it is the page somebody opens because the database is unreachable.

  • mode — what the installation does when the ledger stops answering: fail_closed (the default) refuses with 503 ledger_unavailable; fail_open_with_cap serves a direct gateway call without a hold, up to a per-minute cap per project, and writes each one down to be priced later. One setting for the installation, not per project. No route makes a direct gateway call any more, and a flow execution is never served degraded, so an outage of the ledger is refused under either mode.
  • degraded_now — the project is inside a degraded window: a call was served without the ledger. The window closes when reconciliation has priced the last such call, not when the database answers again.
  • journal_depth, failed_depth — the calls still waiting to be priced, and the ones reconciliation gave up on (they need a person).
  • last_transition_at — when the project last entered or left the window; null if it never did, or when Redis cannot be read (then degraded_now reads false as well).

Ответы

200

The degraded-mode state of this project's plane

application/json
{
  "data": {
    "mode": "fail_closed",
    "degraded_now": true,
    "journal_depth": 1,
    "failed_depth": 1,
    "last_transition_at": "2026-10-02T09:30:00Z"
  }
}

Примеры

Прочитать состояние API

Проверке не нужен ключ. release называет релиз, который ответил.

Terminal
curl https://api.slen.ai/api/health
200 OK
{
  "app": "Slen",
  "release": "1.0.8",
  "server": "octane/frankenphp",
  "mysql": "ok",
  "redis": "ok",
  "queue": "rabbitmq",
  "broadcast": "reverb",
  "opcache_preloaded_files": 1482,
  "opcache_cached_scripts": 2913
}

Спросить, готов ли API

Ответ — это статус ответа: здесь 200, а пока зависимость недоступна — 503.

Terminal
curl https://api.slen.ai/api/ready
200 OK
{
  "status": "ok"
}

Прочитать состояние реестра

Это здоровый ответ: ни один вызов не пропущен без холда, и ни один не ждёт подсчёта стоимости.

Terminal
curl https://api.slen.ai/api/v1/degraded-status \
  -H "Authorization: Bearer $SLEN_API_KEY"
200 OK
{
  "data": {
    "mode": "fail_closed",
    "degraded_now": false,
    "journal_depth": 0,
    "failed_depth": 0,
    "last_transition_at": null
  }
}

Что читать дальше

  • Обзор — обёртка data, которой нет у двух проверок состояния.

  • Аутентификация — ключ, который нужен GET /v1/degraded-status.

  • Коды ошибок — каждый код API — что он значит и что делать.

  • Вебхуки — как приходят ledger.degraded и ledger.restored.

Собрано из openapi b070e1f, sdk contract 5cc7055, php ae4a53b, node 84bc62d