Проверьте, что API работает
Две проверки состояния, которым не нужен ключ, говорят, отвечает ли API и отвечают ли его зависимости, а одна операция — что происходит, пока реестр недоступен.
Три операции этой страницы говорят, как дела у самого API. Две из них — проверки состояния: они стоят вне /v1, не требуют API-ключа и отвечают простым объектом, который не обёрнут в data. Третья — обычная операция /v1, и ей нужен ключ.
Какую проверку вызывать
| Проверка | Что она отвечает |
|---|---|
GET /health | 200, как только API может обслужить запрос. Состояние MySQL и Redis — в теле: ok либо down и причина. |
GET /ready | 200, когда отвечают и 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.
Ответы
The process serves
Заголовки
X-Request-Id
{
"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.
Ответы
Every dependency answers
Заголовки
X-Request-Id
{
"status": "ok",
"failed": {
"key": "string"
}
}Ошибки
| Статус | Коды | Когда |
|---|---|---|
| 503 | A dependency is unreachable; |
Заголовки
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 with503 ledger_unavailable;fail_open_with_capserves 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;nullif it never did, or when Redis cannot be read (thendegraded_nowreadsfalseas well).
Ответы
The degraded-mode state of this project's plane
{
"data": {
"mode": "fail_closed",
"degraded_now": true,
"journal_depth": 1,
"failed_depth": 1,
"last_transition_at": "2026-10-02T09:30:00Z"
}
}Примеры
Прочитать состояние API
Проверке не нужен ключ. release называет релиз, который ответил.
curl https://api.slen.ai/api/health{
"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.
curl https://api.slen.ai/api/ready{
"status": "ok"
}Прочитать состояние реестра
Это здоровый ответ: ни один вызов не пропущен без холда, и ни один не ждёт подсчёта стоимости.
curl https://api.slen.ai/api/v1/degraded-status \
-H "Authorization: Bearer $SLEN_API_KEY"{
"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