API Reference — Полный контроль через код

Tagline: Real-time Uptime Monitoring for Modern DevOps

StatusPulse API предоставляет полный программный доступ к созданию мониторов, управлению командами и получению истории статусов. RESTful, JSON-first, с поддержкой OAuth 2.0 и API-ключей.

Смотреть эндпоинты Полная документация

endpoint-list

Основные группы ресурсов API. Все запросы отправляются на https://api.statuspulse.ru/v1. Ошибки возвращаются в формате JSON с полями error и detail.

Мониторы

Создание HTTP/TCP/Ping-мониторов, настройка интервалов, порогов и уведомлений.

  • GET /monitors — список мониторов с пагинацией
  • POST /monitors — создать новый монитор
  • GET /monitors/{id} — детали и текущий статус
  • PUT /monitors/{id} — обновить конфигурацию
  • DELETE /monitors/{id} — удалить монитор

История статусов

Получение метрик доступности, времени отклика и инцидентов за произвольный период.

  • GET /monitors/{id}/status-history — таймлайн статусов
  • GET /monitors/{id}/metrics — агрегированные метрики (Uptime, P95, P99)
  • GET /incidents — список инцидентов с фильтрацией по команде/монитору

Команды и доступ

Управление членами команды, ролями и API-ключами.

  • GET /teams — список команд пользователя
  • POST /teams/{id}/members — добавить участника
  • DELETE /teams/{id}/members/{userId} — удалить участника
  • GET /api-keys — список ключей
  • POST /api-keys — сгенерировать новый ключ
  • DELETE /api-keys/{keyId} — отозвать ключ

Уведомления и каналы

Подключение Slack, PagerDuty, Email и Webhook-каналов.

  • GET /notification-channels
  • POST /notification-channels
  • PUT /notification-channels/{id}
  • DELETE /notification-channels/{id}

authentication

StatusPulse использует Bearer-токены для авторизации. Токен передаётся в заголовке Authorization.

Получение токена

Используйте OAuth 2.0 Client Credentials Grant для сервис-аккаунтов или API-ключи для быстрых интеграций.

POST https://api.statuspulse.ru/oauth/token
Content-Type: application/x-www-form-urlencoded

client_id=your_client_id&client_secret=your_client_secret&grant_type=client_credentials

Ответ:

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600
}

Использование в запросах

curl -X GET https://api.statuspulse.ru/v1/monitors \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Content-Type: application/json"

Важно: Токены истекают через 1 час. Используйте refresh-токены или автоматическое обновление. API-ключи не истекают, но могут быть отозваны вручную.

examples

Готовые примеры на cURL и Python для типичных задач.

Создать HTTP-монитор (cURL)

curl -X POST https://api.statuspulse.ru/v1/monitors \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Production API — api.example.com",
    "type": "http",
    "url": "https://api.example.com/health",
    "interval_seconds": 60,
    "expected_status": 200,
    "timeout_seconds": 10,
    "tags": ["production", "api"],
    "notifications": ["slack-main", "pagerduty-oncall"]
  }'

Получить историю статусов за 7 дней (Python)

import requests

token = "YOUR_TOKEN"
monitor_id = "mon_8f3a2b1c"

url = f"https://api.statuspulse.ru/v1/monitors/{monitor_id}/status-history"
params = {
    "start": "2024-05-01T00:00:00Z",
    "end": "2024-05-08T00:00:00Z",
    "resolution": "5m"
}
headers = {"Authorization": f"Bearer {token}"}

response = requests.get(url, headers=headers, params=params)
data = response.json()

for entry in data["data"]:
    print(f"{entry['timestamp']}: {entry['status']} | RTT: {entry['response_time_ms']}ms")

Добавить участника в команду (cURL)

curl -X POST https://api.statuspulse.ru/v1/teams/team_9x7k2m/members \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "anna.petrova@example.com",
    "role": "viewer"
  }'

Обработать инцидент через Webhook (Python)

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route("/webhook/statuspulse", methods=["POST"])
def handle_incident():
    payload = request.json
    incident_id = payload["incident"]["id"]
    severity = payload["incident"]["severity"]
    monitor_name = payload["monitor"]["name"]

    # Логика: создать тикет в Jira, отправить в Slack
    print(f"Инцидент {incident_id}: {monitor_name} — {severity}")

    return jsonify({"status": "ok"})

if __name__ == "__main__":
    app.run(port=5000)
Разработчик анализирует логи API StatusPulse в терминале на тёмном фоне