Перевірте, що 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