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 }
Введите API-ключ в поле выше для тестирования
Ответ

            

Сервисы

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": { ... } }
Введите API-ключ в поле выше для тестирования
Query-параметры (необязательно)
Ответ

            
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", ... } }
Введите API-ключ в поле выше для тестирования
Тело запроса (JSON)
Ответ

            
GET /api/v1/services/{id}
Получить сервис.
Пример ответа
{ "data": { "id": 42, ... } }
Введите API-ключ в поле выше для тестирования
Параметры пути
Ответ

            
PUT /api/v1/services/{id}
Обновить сервис. Те же поля что и при создании.
Пример ответа
{ "data": { ... } }
Введите API-ключ в поле выше для тестирования
Параметры пути
Тело запроса (JSON)
Ответ

            
DELETE /api/v1/services/{id}
Удалить сервис (soft delete, 30 дней в корзине).
Пример ответа
{ "success": true }
Введите API-ключ в поле выше для тестирования
Параметры пути
Ответ

            

Группы

GET /api/v1/groups
Список групп.
Пример ответа
{ "data": [{ "id": 1, "name": "Серверы", "color": "#3b82f6", "services_count": 5 }] }
Введите API-ключ в поле выше для тестирования
Ответ

            
POST /api/v1/groups
Создать группу.
Параметры
name string* Название
color string Цвет (#hex)
icon string Slug иконки
Пример ответа
{ "data": { "id": 3, "name": "Облако", ... } }
Введите API-ключ в поле выше для тестирования
Тело запроса (JSON)
Ответ

            
DELETE /api/v1/groups/{id}
Удалить группу (сервисы переносятся без группы).
Пример ответа
{ "success": true }
Введите API-ключ в поле выше для тестирования
Параметры пути
Ответ

            

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

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

            

Коды ошибок

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