Статус живости сервисов через REST API StillOnline
Кабинет удобен людям. Скрипты, CI, внутренние боты и runbook нуждаются в стабильном HTTP-контракте: API зелёный, когда последняя проба, есть ли открытый инцидент.
REST API v1 StillOnline даёт два read-пути для живости / uptime:
- Публичный —
GET /v1/public/status/{slug}— без ключа, JSON для status page. - Приватный —
GET /v1/projects/{id}/checks—last_status,last_probed_at, пауза.
База: https://api.stillonline.tech/v1. Справочник: /ru/docs/api. Для агентов в Cursor/Windsurf — настройка MCP.
Какой endpoint выбрать
| Задача | Endpoint | Auth | Кому |
|---|---|---|---|
| Status page / виджет / публичный бот | GET /public/status/{slug} | Нет | Клиенты, embed, открытый мониторинг |
| Ваши checks + время пробы | GET /projects/{id}/checks | Bearer sk_live_… | Деплой-скрипты, on-call, приватные дашборды |
| StillOnline API жив | GET /health | Нет | Smoke-тест API |
Приватные методы — Pro ($9/мес) или Ultimate, ключ в настройках API. На Free нет API — только UI или публичный JSON при public visibility.
Публичный статус (без ключа)
Тот же JSON, что на hosted status page.
curl -sS "https://api.stillonline.tech/v1/public/status/my-saas"
Подставьте slug status page или id проекта (cuid из URL кабинета).
Пример ответа (200):
{
"slug": "my-saas",
"status": "operational",
"updated_at": "2026-05-29T10:00:00.000Z",
"components": [
{
"name": "API",
"url": "https://api.example.com/health",
"status": "operational",
"uptime_7d": 99.9,
"ssl_valid_until": null
}
],
"active_incident": null
}
Статусы: operational, degraded, down, unknown (общий и по компонентам).
Лимит: 60 запросов/мин с IP → 429 и Retry-After. Кэш ответа ~60 с.
404 — нет slug или visibility private.
Подходит для:
- curl в чеклисте релиза
- простого скрипта uptime
- интеграций без секретов
Сначала health URL: быстрый старт.
Приватный: checks и last_status
Для ваших проектов — Bearer:
curl -sS \
-H "Authorization: Bearer sk_live_..." \
"https://api.stillonline.tech/v1/projects/PROJECT_ID/checks"
PROJECT_ID через:
curl -sS \
-H "Authorization: Bearer sk_live_..." \
"https://api.stillonline.tech/v1/projects"
Пример check:
{
"id": "clx…",
"project_id": "clx…",
"name": "API",
"url": "https://api.example.com/health",
"method": "GET",
"interval_seconds": 300,
"enabled": true,
"last_status": "OPERATIONAL",
"last_probed_at": "2026-05-29T09:57:10.362Z"
}
last_status — результат последней внешней HTTP-пробы StillOnline к вашему URL.
Значения: OPERATIONAL, DOWN, DEGRADED, UNKNOWN (внутренний enum; в публичном JSON — lowercase).
Пауза проверки
PATCH /checks/{id} с {"enabled": false} — пауза одного URL. После паузы:
- пробы останавливаются
last_statusможет остатьсяOPERATIONAL— последний результат до паузы- в кабинете бейдж «Пауза»
Возобновление: {"enabled": true}. Пауза всего проекта — кнопки в кабинете.
Лимиты и ошибки
| Корзина | Лимит | Куда |
|---|---|---|
| Публичный статус | 60/мин на IP | GET /public/status/* |
| Приватный read | 120/мин на ключ | GET /projects, checks, … |
| Приватный write | 30/мин на ключ | POST, PATCH, DELETE |
При превышении: 429, RATE_LIMIT, Retry-After.
Ещё коды:
- 401 — нет или неверный Bearer
- 404 — неверный id или мягко удалённый проект
- 403 — лимит плана или Free без API
Пример: упасть в CI, если production down
#!/usr/bin/env bash
set -euo pipefail
SLUG="my-saas"
json=$(curl -sf "https://api.stillonline.tech/v1/public/status/${SLUG}")
status=$(echo "$json" | jq -r '.status')
if [[ "$status" != "operational" ]]; then
echo "StillOnline: $status"
exit 1
fi
echo "OK: $status"
Для логики владельца (игнор на паузе) — приватный список checks и поля enabled + last_status.
Write (кратко)
Чтение статуса — только GET. Чтобы создавать мониторинг из кода:
POST /projects— проект + первая проверкаPOST /projects/{id}/checks— добавить URLPOST /status-pages/{id}/incidents— открыть инцидент (active_incidentв публичном JSON)
Каталог: /ru/docs/api. MCP — тот же API: /ru/docs/mcp.
Windows PowerShell
Осторожно с кавычками в curl -d. Для кириллицы в JSON — UTF-8 и Content-Type: application/json; charset=utf-8. Подробнее на странице docs, блок Windows PowerShell.
FAQ
Публичный или приватный endpoint?
Публичный JSON — без ключа, для embed. Приватные checks — метаданные проб, нужен Pro/Ultimate.
API сам пингует мой сервер?
Эти GET читают сохранённые результаты проб. Workers StillOnline ходят на ваш URL по интервалу.
Приватная status page без ключа?
Нет. GET /public/status/{slug} даёт 404 для private. Нужен приватный API или вход в приложение.
Free и API?
На Free нет ключа. Один URL и 24 ч истории в UI; публичный JSON работает, если страница public.
Чем отличается от MCP?
Одна модель данных. REST — для скриптов; MCP — для AI в IDE.
Закрыть инцидент через API?
Создать — POST …/incidents; закрыть в v1 — только UI.