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 | Ошибка сервера |