Документация · API
API лицензирования v1
REST API для активации, проверки и деактивации лицензий SlabCalc и RnDstr. Подходит для веб- и десктоп-приложений; токен лицензии можно проверять офлайн.
Общие сведения
Базовый адрес API: http://95.31.174.223:8093/api/v1. Все запросы и ответы — JSON в кодировке UTF-8, без cookie и CSRF-токена. Ответы API не кэшируются (Cache-Control: no-store).
| Метод | Путь | Назначение |
|---|---|---|
POST | /licenses/activate | Активация лицензии на устройстве, выдача токена |
POST | /licenses/validate | Проверка статуса лицензии и обновление токена |
POST | /licenses/deactivate | Освобождение места активации на устройстве |
GET | /products/{code}/releases/latest | Последний релиз продукта для загрузки |
GET | /public-key | Публичный ключ проверки токенов |
Формат ошибок одинаков для всех эндпоинтов:
{
"error": {
"code": "invalid_key",
"message": "Лицензионный ключ не найден"
}
}
Активация лицензии
POST /api/v1/licenses/activate
| Поле | Тип | Описание |
|---|---|---|
license_key | string, обязательно | Ключ вида TRS-XXXX-XXXX-XXXX-XXXX |
product_code | string, обязательно | Код продукта: slabcalc или rndstr |
device_fingerprint | string, обязательно | Стабильный отпечаток устройства |
device_name | string | Понятное имя устройства |
os, app_version | string | Сведения для поддержки (необязательно) |
Ответ содержит идентификатор активации, подписанный токен лицензии и срок его действия. Повторная активация того же устройства идемпотентна.
curl -sS -X POST http://95.31.174.223:8093/api/v1/licenses/activate -H "Content-Type: application/json" -d '{"license_key":"TRS-XXXX-XXXX-XXXX-XXXX","product_code":"slabcalc","device_fingerprint":"sha256-device","device_name":"Workstation 1","os":"Windows 11"}'
{
"activation_id": "0198c0de-0000-7000-8000-000000000000",
"license_id": "0198c0de-0000-7000-8000-000000000001",
"product_code": "slabcalc",
"plan_code": "yearly",
"seats": 5,
"status": "active",
"expires_at": "2027-10-31T00:00:00Z",
"token": "TRS1.eyJ2IjoxLCJraWQiOiJ0cnMtMjAyNi0wMSJ9.signature",
"token_expires_at": "2026-11-07T00:00:00Z",
"features": {"reports": true, "exports": ["pdf", "xlsx", "docx"]},
"grace_days": 14
}
Проверка лицензии
POST /api/v1/licenses/validate
| Поле | Тип | Описание |
|---|---|---|
activation_id | string, обязательно | Идентификатор активации |
device_fingerprint | string, обязательно | Отпечаток устройства |
product_code | string | Дополнительная проверка соответствия продукту |
При отзыве, приостановке или истечении лицензии возвращается ответ с valid: false и статусом — приложение должно перейти в ограниченный режим.
curl -sS -X POST http://95.31.174.223:8093/api/v1/licenses/validate -H "Content-Type: application/json" -d '{"activation_id":"0198c0de-0000-7000-8000-000000000000","device_fingerprint":"sha256-device"}'
Деактивация устройства
POST /api/v1/licenses/deactivate
Освобождает место активации, чтобы лицензию можно было использовать на другом компьютере. Требуются activation_id и device_fingerprint. При успехе возвращается {"deactivated": true}, для неизвестной активации — ошибка not_found.
curl -sS -X POST http://95.31.174.223:8093/api/v1/licenses/deactivate -H "Content-Type: application/json" -d '{"activation_id":"0198c0de-0000-7000-8000-000000000000","device_fingerprint":"sha256-device"}'
Последний релиз продукта
GET /api/v1/products/{code}/releases/latest?os=windows&channel=stable
Возвращает версию, ссылку на загрузку, контрольную сумму SHA-256 и описание изменений. Для отсутствующего релиза — ошибка not_found.
curl -sS "http://95.31.174.223:8093/api/v1/products/slabcalc/releases/latest?os=windows&channel=stable"
Публичный ключ
GET /api/v1/public-key — возвращает идентификатор ключа, алгоритм и публичный ключ Ed25519 для офлайн-проверки подписи токена.
{
"kid": "trs-2026-01",
"algorithm": "Ed25519",
"public_key": "base64-public-key"
}
Коды ошибок
| HTTP | Код | Когда возникает |
|---|---|---|
| 400 | product_mismatch | Лицензия относится к другому продукту |
| 401 | invalid_key | Ключ не найден или недействителен |
| 403 | license_inactive | Лицензия отозвана, приостановлена или истекла |
| 404 | not_found | Активация или релиз не найдены |
| 409 | seats_exhausted | Закончились доступные активации по лицензии |
| 429 | rate_limited | Слишком много неудачных попыток — повторите позже |
| 500 | internal_error | Внутренняя ошибка сервера |
Офлайн-проверка токена
Токен лицензии подписан алгоритмом Ed25519 и содержит продукт, тариф, набор возможностей, число мест, срок действия и идентификатор устройства. Приложение проверяет подпись публичным ключом без обращения к серверу и учитывает grace_days после истечения срока токена.
- Публичный ключ получайте только по HTTPS и кэшируйте с учётом
kid. - Токен не является секретом, но не передавайте его третьим лицам без необходимости.
- При офлайн-проверке обязательно сверяйте
deviceиprodс контекстом приложения.
Вопросы и ответы
Нужен ли CSRF-токен для API?
Нет. API v1 работает без cookie и CSRF: запросы передают ключ лицензии и идентификатор активации в теле JSON.
Как часто нужно вызывать validate?
Токен проверяется приложением офлайн. validate нужен для обновления токена и проверки статуса лицензии — например, при запуске и периодически.
Что делать при ошибке seats_exhausted?
Освободить одно из устройств через deactivate или увеличить тариф: количество активаций задаётся лицензией.
Полная спецификация API и формат токена описаны в документе LICENSING.md. За вопросами по интеграции обращайтесь через страницу контактов.