Документация
REST API
HTTP API для чтения статуса и управления проектами. Для Cursor и AI-редакторов есть отдельный MCP.
См. также: Подключение MCP
Публичный API
Вы узнаете, как читать публичный JSON статуса без ключа и вызывать приватный REST API v1 с Bearer-токеном.
Чтение статуса открытой страницы — без авторизации. Приватные страницы возвращают 404.
/v1/public/status/{slug}без ключаПубличный JSON статуса
Текущий статус открытой status page без API-ключа. В path подойдёт slug страницы или id проекта из кабинета.
Параметры
slug(path) · обяз.Slug status page или id проекта (cuid).
Ответы
- 200 — Общий статус, компоненты, uptime за 7 дней, активный инцидент (если есть).
- 404 — Страница не найдена или visibility = private.
- 429 — Лимит: 60 запросов в минуту с IP (заголовок Retry-After).
{
"slug": "demo",
"status": "operational",
"updated_at": "2026-05-27T12:00:00.000Z",
"components": [
{
"name": "Website",
"url": "https://example.com",
"status": "operational",
"uptime_7d": 99.9
}
],
"active_incident": null
}status / статус компонента: "operational" | "degraded" | "down" | "probe_limited" | "unknown". Ответ кэшируется ~60 с (Cache-Control).
GET https://api.stillonline.tech/v1/public/status/{slug}Приватный REST API
Тариф Pro или Ultimate. Создайте API-ключ в кабинете.
Authorization: Bearer sk_live_…
Base: https://api.stillonline.tech/v1Ошибки: 401 — неверный или отозванный ключ, Free без API; 403 — лимит плана (код в теле: PLAN_LIMIT_*); 400 — невалидный JSON; 429 — слишком много запросов (код RATE_LIMIT, заголовок Retry-After).
Лимиты запросов (приватный API)
Считаются отдельно для каждого API-ключа, окно 60 секунд. Публичный GET /v1/public/status/{slug} — 60 запросов/мин с IP (без ключа).
- Чтение (GET): 120 запросов/мин на ключ
- Изменения (POST, PATCH, DELETE): 30 запросов/мин на ключ
- GET /v1/health — без ключа и без лимита по ключу (для smoke-тестов)
Пауза одной URL-проверки
Чтобы временно не мониторить один адрес, оставив остальные проверки проекта активными, используйте PATCH /v1/checks/{id} с телом {"enabled": false}. В кабинете у строки появится бейдж «Пауза»; включить снова — только через API (enabled: true). Кнопки «Запустить» / «Пауза» на странице проекта относятся ко всем URL сразу.
- Пробы по этому URL прекращаются; last_probed_at больше не обновляется.
- last_status может остаться OPERATIONAL — это последний результат до паузы.
- Id проверки: GET /v1/projects/{project_id}/checks или карточка в кабинете.
# Pause one check (replace CHECK_ID and your key)
curl -sS -X PATCH https://api.stillonline.tech/v1/checks/CHECK_ID \
-H "Authorization: Bearer sk_live_…" \
-H "Content-Type: application/json" \
-d '{"enabled":false}'Примеры для Windows (PowerShell)
В PowerShell curl.exe с -d '{"enabled":false}' часто отправляет битый JSON (Invalid JSON). Имена на кириллице в Invoke-RestMethod -Body без UTF-8 байтов могут сохраниться как «???????» — используйте функцию ниже.
$uri = "https://api.stillonline.tech/v1/checks/CHECK_ID"
$headers = @{ Authorization = "Bearer sk_live_…" }
# UTF-8 JSON body (Cyrillic-safe on Windows)
function Invoke-StillOnlineJson($Method, $Uri, $Headers, $JsonObject) {
$utf8 = New-Object System.Text.UTF8Encoding $false
$json = $JsonObject | ConvertTo-Json -Compress
$bytes = $utf8.GetBytes($json)
Invoke-RestMethod -Method $Method -Uri $Uri -Headers $Headers `
-ContentType "application/json; charset=utf-8" -Body $bytes
}
# Pause / resume
Invoke-StillOnlineJson PATCH $uri $headers @{ enabled = $false }
Invoke-StillOnlineJson PATCH $uri $headers @{ enabled = $true }
# Rename (Cyrillic)
Invoke-StillOnlineJson PATCH $uri $headers @{ name = "Главная" }
# List checks
(Invoke-RestMethod -Uri "https://api.stillonline.tech/v1/projects/PROJECT_ID/checks" -Headers $headers).checks |
Select-Object name, enabled, last_probed_atКабинет и браузер всегда UTF-8. Linux/macOS curl с -d и UTF-8 терминалом — тоже. API принимает charset=utf-8 и UTF-16 (BOM) в теле запроса.
/v1/healthбез ключаПроверка API
Простая проверка доступности API для мониторинга и smoke-тестов.
Ответы
- 200 — Сервис отвечает. Без API-ключа; лимиты по ключу не применяются.
{
"status": "ok",
"service": "stillonline-api",
"version": "v1"
}GET https://api.stillonline.tech/v1/health/v1/projectsBearer sk_live_…Список проектов
Все неудалённые проекты владельца ключа, сначала новые.
Ответы
- 200 — Массив projects со status_page_id.
- 401 — Нет или неверный Bearer-ключ.
- 429 — RATE_LIMIT — более 120 GET/мин на API-ключ (Retry-After).
{
"projects": [
{
"id": "clx…",
"name": "Acme",
"description": null,
"slug": "acme",
"timezone": "UTC",
"status_page_id": "clx…",
"created_at": "2026-05-27T10:00:00.000Z"
}
]
}GET https://api.stillonline.tech/v1/projects/v1/projectsBearer sk_live_…Создать проект
Создаёт проект, status page и первую HTTP-проверку одним запросом.
Тело запроса
JSON. Обязательны name и url.
{
"name": "Acme API",
"url": "https://api.example.com/health",
"description": "Optional note"
}Ответы
- 201 — Объект project.
- 400 — Невалидный JSON или нет name/url.
- 403 — Лимит плана (код PLAN_LIMIT_PROJECTS) или Free без API.
- 401 — Не авторизован.
POST https://api.stillonline.tech/v1/projects/v1/projects/{id}Bearer sk_live_…Удалить проект
Мягкое удаление проекта (исчезает из кабинета; проверки отключены). Публичная страница может показывать последний статус.
Параметры
id(path) · обяз.Id проекта.
Ответы
- 200 — Удалено.
- 404 — Проект не найден.
- 401 — Не авторизован.
- 429 — RATE_LIMIT — лимит записи (Retry-After).
{ "deleted": true, "project_id": "clx…" }DELETE https://api.stillonline.tech/v1/projects/{id}/v1/projects/{id}/checksBearer sk_live_…Список проверок
Все uptime-проверки проекта, принадлежащего вам.
Параметры
id(path) · обяз.Id проекта.
Ответы
- 200 — Массив checks.
- 404 — Проект не найден.
- 401 — Не авторизован.
{
"checks": [
{
"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-27T12:00:00.000Z"
}
]
}GET https://api.stillonline.tech/v1/projects/{id}/checks/v1/projects/{id}/checksBearer sk_live_…Создать проверку
Добавляет HTTP-проверку. interval_seconds должен соответствовать тарифу (Pro/Ultimate).
Параметры
id(path) · обяз.Id проекта.
Тело запроса
url обязателен; name по умолчанию = url; interval_seconds опционален.
{
"name": "API",
"url": "https://api.example.com/health",
"interval_seconds": 300
}Ответы
- 201 — Созданная check.
- 403 — PLAN_LIMIT_CHECKS или PLAN_LIMIT_INTERVAL.
- 404 — Проект не найден.
- 401 — Не авторизован.
POST https://api.stillonline.tech/v1/projects/{id}/checks/v1/checks/{id}Bearer sk_live_…Обновить проверку
Частичное обновление: name, enabled (пауза/возобновление одной URL-проверки), interval_seconds. Кнопки «Запустить»/«Пауза» в кабинете — для всего проекта; пауза одного URL — только через API.
Параметры
id(path) · обяз.Id проверки.
Тело запроса
Передавайте только изменяемые поля.
{
"enabled": false
}Ответы
- 200 — Обновлённая check (см. enabled и last_status).
- 400 — Невалидный JSON (часто из-за кавычек curl -d в Windows PowerShell).
- 403 — PLAN_LIMIT_INTERVAL.
- 404 — Проверка не найдена.
- 401 — Не авторизован.
{
"check": {
"id": "clx…",
"project_id": "clx…",
"name": "API",
"url": "https://api.example.com/health",
"method": "GET",
"interval_seconds": 300,
"enabled": false,
"last_status": "OPERATIONAL",
"last_probed_at": "2026-05-29T09:57:10.362Z"
}
}enabled: false останавливает пробы только по этому URL; остальные проверки проекта работают. В кабинете — бейдж «Пауза» (отдельной кнопки для URL нет).
last_status может остаться OPERATIONAL после паузы — это последний результат до остановки проб, а не текущее «всё ок».
Возобновление: PATCH с {"enabled": true}. Пауза всего проекта — кнопки в кабинете (enabled на всех checks).
Тело запроса — UTF-8 (Content-Type: application/json; charset=utf-8). В PowerShell для кириллицы отправляйте UTF-8 байты — см. /docs/api#windows-powershell.
PATCH https://api.stillonline.tech/v1/checks/{id}/v1/checks/{id}Bearer sk_live_…Удалить проверку
Безвозвратно удаляет вашу проверку.
Параметры
id(path) · обяз.Id проверки.
Ответы
- 200 — Удалено.
- 404 — Проверка не найдена.
- 401 — Не авторизован.
{ "deleted": true }DELETE https://api.stillonline.tech/v1/checks/{id}/v1/status-pages/{id}Bearer sk_live_…Получить status page
Метаданные status page: slug, visibility (public/private), связанный проект.
Параметры
id(path) · обяз.Id status page.
Ответы
- 200 — Объект status_page.
- 404 — Не найдено.
- 401 — Не авторизован.
{
"status_page": {
"id": "clx…",
"project_id": "clx…",
"slug": "acme",
"visibility": "public",
"project_name": "Acme"
}
}GET https://api.stillonline.tech/v1/status-pages/{id}/v1/status-pages/{id}/incidentsBearer sk_live_…Создать инцидент
Открывает ручной инцидент на status page (виден на публичной странице, пока open).
Параметры
id(path) · обяз.Id status page.
Тело запроса
Обязателен title.
{ "title": "Investigating API errors" }Ответы
- 201 — Созданный incident.
- 404 — Status page не найдена.
- 401 — Не авторизован.
POST https://api.stillonline.tech/v1/status-pages/{id}/incidents/v1/incidents/{id}Bearer sk_live_…Получить инцидент
Один инцидент по id (open или resolved).
Параметры
id(path) · обяз.Id инцидента.
Ответы
- 200 — Объект incident.
- 404 — Не найдено.
- 401 — Не авторизован.
{
"incident": {
"id": "clx…",
"status_page_id": "clx…",
"title": "Investigating API errors",
"status": "open",
"started_at": "2026-05-27T12:00:00.000Z",
"resolved_at": null
}
}GET https://api.stillonline.tech/v1/incidents/{id}Машиночитаемая спецификация: openapi.json (те же пути и краткие описания на английском).