← Блог

Статус живости сервисов через REST API StillOnline

Кабинет удобен людям. Скрипты, CI, внутренние боты и runbook нуждаются в стабильном HTTP-контракте: API зелёный, когда последняя проба, есть ли открытый инцидент.

REST API v1 StillOnline даёт два read-пути для живости / uptime:

  1. ПубличныйGET /v1/public/status/{slug} — без ключа, JSON для status page.
  2. ПриватныйGET /v1/projects/{id}/checkslast_status, last_probed_at, пауза.

База: https://api.stillonline.tech/v1. Справочник: /ru/docs/api. Для агентов в Cursor/Windsurf — настройка MCP.

Какой endpoint выбрать

ЗадачаEndpointAuthКому
Status page / виджет / публичный ботGET /public/status/{slug}НетКлиенты, embed, открытый мониторинг
Ваши checks + время пробыGET /projects/{id}/checksBearer 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/мин на IPGET /public/status/*
Приватный read120/мин на ключGET /projects, checks, …
Приватный write30/мин на ключ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 — добавить URL
  • POST /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.