REST API v1

Полный доступ к вашим данным через HTTP API.

Базовый URL
https://sub.syspage.ru/api/v1

Формат ответов

Все ответы в JSON. Успешный ответ:

{
  "success": true,
  "data": { ... },
  "meta": { "page": 1, "per_page": 50, "total": 123 }
}

Ошибка:

{
  "success": false,
  "message": "Описание ошибки",
  "errors": { "field": ["Ошибка валидации"] }
}

Аутентификация

Используйте Bearer-токен в заголовке каждого запроса.

Authorization: Bearer YOUR_API_TOKEN

Получить токен — в Настройках → API.

Rate limit: 60 запросов в минуту на токен/IP. При превышении — статус 429.

Текущий пользователь

GET /api/v1/me Данные текущего пользователя.
Ответ
{ "id": 1, "name": "Иван", "email": "ivan@example.com", "timezone": "Europe/Moscow", "default_currency": "RUB", "tg_connected": true }

Сервисы

GET /api/v1/services Список сервисов с фильтрацией и пагинацией.
Параметры
status string overdue|critical|soon|ok|none
group_id int Фильтр по группе
q string Поиск по имени
page int Страница (50/стр)
Ответ
{ "data": [{ "id": 1, "name": "My VPS", "expires_at": "2025-03-01", "days_left": 15, "status": "soon", "cost": 500, "currency": "RUB" }], "meta": { ... } }
POST /api/v1/services Создать сервис.
Параметры
name string* Название
expires_at date Дата истечения (YYYY-MM-DD)
group_id int ID группы
cost decimal Стоимость
currency string Валюта (RUB, USD, EUR, ...)
billing_cycle string monthly|quarterly|biannual|annual|biennial|custom
notes string Заметки
ip string IP-адрес
url string URL
Ответ
{ "data": { "id": 42, "name": "My VPS", ... } }
GET /api/v1/services/{id} Получить сервис.
Ответ
{ "data": { "id": 42, ... } }
PUT /api/v1/services/{id} Обновить сервис. Те же поля что и при создании.
Ответ
{ "data": { ... } }
DELETE /api/v1/services/{id} Удалить сервис (soft delete, 30 дней в корзине).
Ответ
{ "success": true }

Группы

GET /api/v1/groups Список групп.
Ответ
{ "data": [{ "id": 1, "name": "Серверы", "color": "#3b82f6", "services_count": 5 }] }
POST /api/v1/groups Создать группу.
Параметры
name string* Название
color string Цвет (#hex)
icon string Slug иконки
Ответ
{ "data": { "id": 3, "name": "Облако", ... } }
DELETE /api/v1/groups/{id} Удалить группу (сервисы переносятся без группы).
Ответ
{ "success": true }

Истекающие сервисы

GET /api/v1/services/expiring Сервисы, истекающие в ближайшие N дней.
Параметры
days int Горизонт в днях (default: 30, max: 365)
Ответ
{ "data": [...], "meta": { "total": 3, "days": 30 } }

Коды ошибок

Код Описание
401 Не передан или недействителен API-токен
403 Нет доступа к ресурсу (чужой объект)
404 Ресурс не найден
422 Ошибка валидации — проверьте поле errors
429 Превышен rate limit (60 запр/мин)
500 Ошибка сервера