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-channelsPOST /notification-channelsPUT /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)