REST API Reference
Полный справочник по REST API можно. v1. Для каждого endpoint приведены метод, путь, параметры и примеры curl.
Совет: Интерактивная документация доступна через Swagger UI по адресу
/swagger-ui.html. OpenAPI 3.1 спецификация —/v3/api-docs.
Аутентификация
Вход
POST /api/v1/auth/loginТело запроса:
{
"email": "admin@example.com",
"password": "your-password"
}Ответ:
{
"token": "eyJhbGciOiJIUzI1NiIs...",
"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...",
"user": {
"id": 1,
"email": "admin@example.com",
"name": "Admin",
"role": "ADMIN",
"status": "ACTIVE",
"locale": "ru",
"createdAt": "2026-01-01T00:00:00Z",
"lastActiveAt": "2026-06-21T10:00:00Z"
}
}curl -X POST "http://localhost:8080/api/v1/auth/login" \
-H "Content-Type: application/json" \
-d '{"email": "admin@example.com", "password": "your-password"}'Обновление токена
POST /api/v1/auth/refreshcurl -X POST "http://localhost:8080/api/v1/auth/refresh" \
-H "Content-Type: application/json" \
-d '{"refreshToken": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4..."}'Выход
POST /api/v1/auth/logoutcurl -X POST "http://localhost:8080/api/v1/auth/logout" \
-H "Authorization: Bearer $JWT_TOKEN"Текущий пользователь
GET /api/v1/auth/mecurl "http://localhost:8080/api/v1/auth/me" \
-H "Authorization: Bearer $JWT_TOKEN"Выбор проекта
POST /api/v1/auth/select-projectВосстановление пароля
POST /api/v1/auth/forgot-password
POST /api/v1/auth/reset-passwordПринятие приглашения
POST /api/v1/auth/accept-inviteФлаги
Создать флаг
POST /api/v1/flags| Поле | Тип | Обязательно | Описание |
|---|---|---|---|
key | string | Да | Уникальный ключ флага |
name | string | Да | Название флага |
description | string | Нет | Описание |
flagType | string | Да | RELEASE или KILLSWITCH |
tags | object[] | Нет | Объекты {tagId, value} |
projectId | long | Да | ID проекта |
curl -X POST "http://localhost:8080/api/v1/flags" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"key": "new-checkout",
"name": "Новый чекаут",
"description": "Переработка процесса оформления заказа",
"flagType": "RELEASE",
"projectId": 1,
"tags": [{"tagId": 1, "value": "checkout"}, {"tagId": 2, "value": "ui-redesign"}]
}'Получить все флаги
GET /api/v1/flags| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
includeArchived | boolean | false | Включить архивные флаги |
page | int | 0 | Страница |
size | int | 50 | Размер страницы (макс. 200) |
curl "http://localhost:8080/api/v1/flags?includeArchived=true" \
-H "Authorization: Bearer $JWT_TOKEN"Получить флаг по ID
GET /api/v1/flags/{id}curl "http://localhost:8080/api/v1/flags/42" \
-H "Authorization: Bearer $JWT_TOKEN"Флаги по окружению
GET /api/v1/flags/by-environmentОбогащённые флаги (dashboard)
GET /api/v1/flags/enrichedВозвращает флаги со связанными сегментами, тегами, контекстами и окружениями.
Обновить флаг
PUT /api/v1/flags/{id}curl -X PUT "http://localhost:8080/api/v1/flags/42" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Новый чекаут v2",
"description": "Обновлённое описание",
"tags": ["checkout", "ui-redesign", "v2"]
}'Обновить стратегии флага
PUT /api/v1/flags/{flagId}/strategiesНастройка стратегии для окружения:
curl -X PUT "http://localhost:8080/api/v1/flags/42/strategies" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"environmentId": 3,
"enabled": true,
"percentage": 25
}'Архивировать флаг
POST /api/v1/flags/{id}/archivecurl -X POST "http://localhost:8080/api/v1/flags/42/archive" \
-H "Authorization: Bearer $JWT_TOKEN"Восстановить флаг
POST /api/v1/flags/{id}/unarchivecurl -X POST "http://localhost:8080/api/v1/flags/42/unarchive" \
-H "Authorization: Bearer $JWT_TOKEN"Сегменты
Создать сегмент
POST /api/v1/segmentscurl -X POST "http://localhost:8080/api/v1/segments" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Бета-тестеры",
"description": "Пользователи с ID, начинающимся на beta-",
"projectId": 1
}'Получить все сегменты
GET /api/v1/segmentscurl "http://localhost:8080/api/v1/segments" \
-H "Authorization: Bearer $JWT_TOKEN"Получить сегмент по ID
GET /api/v1/segments/{id}curl "http://localhost:8080/api/v1/segments/5" \
-H "Authorization: Bearer $JWT_TOKEN"Обновить сегмент
PUT /api/v1/segments/{id}curl -X PUT "http://localhost:8080/api/v1/segments/5" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Бета-тестеры (расширенный)",
"description": "Обновлённое описание"
}'Удалить сегмент
DELETE /api/v1/segments/{id}curl -X DELETE "http://localhost:8080/api/v1/segments/5" \
-H "Authorization: Bearer $JWT_TOKEN"Окружения
Создать окружение
POST /api/v1/environmentscurl -X POST "http://localhost:8080/api/v1/environments" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Staging"
}'Получить все окружения
GET /api/v1/environmentscurl "http://localhost:8080/api/v1/environments" \
-H "Authorization: Bearer $JWT_TOKEN"Получить окружение по ID
GET /api/v1/environments/{id}Обновить окружение
PUT /api/v1/environments/{id}curl -X PUT "http://localhost:8080/api/v1/environments/2" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Staging (Test)"
}'Удалить окружение
DELETE /api/v1/environments/{id}curl -X DELETE "http://localhost:8080/api/v1/environments/2" \
-H "Authorization: Bearer $JWT_TOKEN"Предупреждение: Нельзя удалить окружение, если к нему привязаны активные API-ключи. Сначала отзовите все ключи окружения.
API-ключи
Создать API-ключ
POST /api/v1/api-keyscurl -X POST "http://localhost:8080/api/v1/api-keys" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Production SDK Key",
"keyType": "SERVER",
"environmentId": 3
}'Ответ:
{
"id": 12,
"name": "Production SDK Key",
"apiKey": "dGhpcyBpcyBhIDY0LWNoYXJhY3RlciBiYXNlNjR1cmwgZW5jb2RlZCBrZXk",
"keyType": "SERVER",
"environmentId": 3,
"createdAt": "2026-06-21T13:41:05Z"
}Предупреждение: Значение ключа (
apiKey) показывается только один раз при создании. Сохраните его немедленно.
Получить все API-ключи
GET /api/v1/api-keyscurl "http://localhost:8080/api/v1/api-keys" \
-H "Authorization: Bearer $JWT_TOKEN"Обновить API-ключ
PUT /api/v1/api-keys/{id}Удалить API-ключ
DELETE /api/v1/api-keys/{id}curl -X DELETE "http://localhost:8080/api/v1/api-keys/12" \
-H "Authorization: Bearer $JWT_TOKEN"После удаления ключ немедленно перестаёт работать. Все SDK, использующие этот ключ, перестанут получать обновления.
Аудит
Получить записи аудита
GET /api/v1/audit| Параметр | Тип | По умолчанию | Описание |
|---|---|---|---|
page | int | 0 | Страница |
size | int | 50 | Размер страницы (макс. 200) |
dateFrom | datetime | — | Начало периода (ISO 8601) |
dateTo | datetime | — | Конец периода (ISO 8601) |
# Все изменения за последнюю неделю
curl "http://localhost:8080/api/v1/audit?dateFrom=2026-06-14T00:00:00Z&dateTo=2026-06-21T23:59:59Z" \
-H "Authorization: Bearer $JWT_TOKEN"SDK
Получить правила флагов
GET /api/client/featuresИспользуется SDK при инициализации. Возвращает массив флагов для окружения, привязанного к API-ключу SERVER.
curl "http://localhost:8080/api/client/features" \
-H "Authorization: Bearer <api-key>"Ответ — массив объектов:
[
{
"name": "Новый чекаут",
"key": "new-checkout",
"enabled": true,
"activation": {
"rollOut": 50,
"constraints": [
{ "field": "country", "operator": "in", "values": ["RU", "BY"], "contextType": "string" }
],
"segments": [
{ "name": "Premium Users", "constraints": [...] }
]
}
}
]Оценка флагов (client-side)
POST /api/client/evaluateОценивает флаги на сервере для переданного контекста (режим mode: 'client').
curl -X POST "http://localhost:8080/api/client/evaluate" \
-H "Authorization: Bearer <api-key>" \
-H "Content-Type: application/json" \
-d '{"context": {"userId": "user-123", "country": "RU"}, "toggles": ["new-checkout"]}'Отправка метрик
POST /api/client/metricsОтправка накопленных SDK метрик использования флагов.
curl -X POST "http://localhost:8080/api/client/metrics" \
-H "Authorization: Bearer <api-key>" \
-H "Content-Type: application/json" \
-d '{"evaluations": {"new-checkout": {"t": 150, "f": 50}}}'Интеграции
Создать интеграцию
POST /api/v1/integrationscurl -X POST "http://localhost:8080/api/v1/integrations" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Webhook",
"enabled": true,
"type": "custom_webhook",
"configJson": "{\"url\":\"https://your-server.example.com/hooks/mozhno\"}",
"eventSubscriptionsJson": "[\"flag.updated\",\"flag.archived\",\"flag.deleted\"]",
"projectId": 1
}'Получить все интеграции
GET /api/v1/integrationscurl "http://localhost:8080/api/v1/integrations" \
-H "Authorization: Bearer $JWT_TOKEN"Обновить интеграцию
PUT /api/v1/integrations/{id}curl -X PUT "http://localhost:8080/api/v1/integrations/1" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "My Webhook",
"enabled": false,
"type": "custom_webhook",
"configJson": "{\"url\":\"https://new-endpoint.example.com/hooks\"}",
"eventSubscriptionsJson": "[\"flag.updated\",\"flag.archived\",\"flag.deleted\",\"flag.created\"]"
}'Удалить интеграцию
DELETE /api/v1/integrations/{id}curl -X DELETE "http://localhost:8080/api/v1/integrations/1" \
-H "Authorization: Bearer $JWT_TOKEN"Проверить квоту вебхуков
GET /api/v1/integrations/webhook-limitВозвращает оставшееся количество доступных отправок вебхуков.
curl "http://localhost:8080/api/v1/integrations/webhook-limit" \
-H "Authorization: Bearer $JWT_TOKEN"Пользователи
Пригласить пользователя
POST /api/v1/users/invitecurl -X POST "http://localhost:8080/api/v1/users/invite" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"email": "developer@example.com",
"role": "DEVELOPER"
}'| Роль | Описание |
|---|---|
ADMIN | Полный доступ ко всем ресурсам |
DEVELOPER | Управление флагами, сегментами, стратегиями |
VIEWER | Только просмотр |
Получить всех пользователей
GET /api/v1/userscurl "http://localhost:8080/api/v1/users" \
-H "Authorization: Bearer $JWT_TOKEN"Получить пользователя
GET /api/v1/users/{id}Обновить пользователя
PUT /api/v1/users/{id}curl -X PUT "http://localhost:8080/api/v1/users/5" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{"name": "Новое имя", "role": "ADMIN"}'Удалить пользователя
DELETE /api/v1/users/{id}curl -X DELETE "http://localhost:8080/api/v1/users/5" \
-H "Authorization: Bearer $JWT_TOKEN"Теги
Создать тег
POST /api/v1/tagscurl -X POST "http://localhost:8080/api/v1/tags" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "checkout",
"color": "#3b82f6",
"projectId": 1
}'Получить все теги
GET /api/v1/tagscurl "http://localhost:8080/api/v1/tags" \
-H "Authorization: Bearer $JWT_TOKEN"Получить тег по ID
GET /api/v1/tags/{id}Обновить тег
PUT /api/v1/tags/{id}Удалить тег
DELETE /api/v1/tags/{id}Контексты
Создать определение контекста
POST /api/v1/contextscurl -X POST "http://localhost:8080/api/v1/contexts" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Страна",
"contextKey": "country",
"contextType": "string",
"projectId": 1
}'Получить все контексты
GET /api/v1/contextsПолучить контекст по ID
GET /api/v1/contexts/{definitionId}Обновить контекст
PUT /api/v1/contexts/{definitionId}Удалить контекст
DELETE /api/v1/contexts/{definitionId}Управление значениями контекста
GET /api/v1/contexts/{definitionId}/values
POST /api/v1/contexts/{definitionId}/values
PUT /api/v1/contexts/{definitionId}/values
GET /api/v1/contexts/values/{valueId}
PUT /api/v1/contexts/values/{valueId}
DELETE /api/v1/contexts/values/{valueId}Метрики
Метрики флага
GET /api/v1/flags/{flagId}/metrics| Параметр | Тип | Описание |
|---|---|---|
environmentId | long | ID окружения |
instanceId | string | ID экземпляра SDK |
appName | string | Имя приложения |
curl "http://localhost:8080/api/v1/flags/42/metrics?environmentId=3" \
-H "Authorization: Bearer $JWT_TOKEN"Метрики проекта
GET /api/v1/metrics| Параметр | Тип | Описание |
|---|---|---|
environmentId | long | ID окружения |
Настройки проекта
Получить настройки
GET /api/v1/settingsОбновить настройки
PUT /api/v1/settingscurl -X PUT "http://localhost:8080/api/v1/settings" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"requireMfa": false,
"sessionTimeoutHours": 8
}'Проекты
Получить все проекты
GET /api/v1/projectsПолучить проект по ID
GET /api/v1/projects/{id}Создать проект
POST /api/v1/projectsОбновить проект
PUT /api/v1/projects/{id}Удалить проект
DELETE /api/v1/projects/{id}Экземпляры SDK
GET /api/v1/projects/{id}/client-instances| Параметр | Тип | Описание |
|---|---|---|
environmentId | long | ID окружения |
Коды ошибок API
| HTTP-код | Код ошибки | Описание |
|---|---|---|
400 | BAD_REQUEST | Неверные параметры запроса |
400 | VALIDATION_ERROR | Ошибка валидации тела запроса |
401 | UNAUTHORIZED | Отсутствует или недействителен токен/ключ |
401 | INVALID_CREDENTIALS | Неверный email или пароль |
401 | TOKEN_REUSE | Обнаружен повторно использованный refresh-токен |
402 | QUOTA_EXCEEDED | Превышена квота ресурсов |
403 | FORBIDDEN | Недостаточно прав |
404 | NOT_FOUND | Ресурс не найден |
409 | CONFLICT | Конфликт: ресурс уже существует |
429 | RATE_LIMIT_EXCEEDED | Превышен лимит запросов |
500 | INTERNAL_ERROR | Внутренняя ошибка сервера |
Swagger UI и OpenAPI
| Ресурс | URL |
|---|---|
| Swagger UI | /swagger-ui.html |
| OpenAPI 3.1 JSON | /v3/api-docs |
| OpenAPI 3.1 YAML | /v3/api-docs.yaml |
Swagger UI предоставляет интерактивный интерфейс для отправки запросов к API. Все endpoints, описанные на этой странице, доступны через Swagger с возможностью заполнения параметров и выполнения запросов из браузера.
Примеры рабочих сценариев
Полный цикл флага через API
#!/bin/bash
BASE="http://localhost:8080/api/v1"
TOKEN="eyJhbGciOiJIUzI1NiIs..."
# 1. Создать флаг
curl -s -X POST "$BASE/flags" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"key": "my-feature", "name": "Моя фича", "flagType": "RELEASE", "projectId": 1}'
# 2. Настроить стратегию: 1% роллаут
curl -s -X PUT "$BASE/flags/42/strategies" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"environmentId": 3, "enabled": true, "percentage": 1}'
# 3. Увеличить до 50% (через день)
curl -s -X PUT "$BASE/flags/42/strategies" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"environmentId": 3, "enabled": true, "percentage": 50}'
# 4. Включить для всех (100%)
curl -s -X PUT "$BASE/flags/42/strategies" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"environmentId": 3, "enabled": true, "percentage": 100}'
# 5. Архивировать
curl -s -X POST "$BASE/flags/42/archive" \
-H "Authorization: Bearer $TOKEN"
# 6. Проверить аудит
curl -s "$BASE/audit?dateFrom=2026-01-01T00:00:00Z" \
-H "Authorization: Bearer $TOKEN"Что дальше?
- Обзор API — аутентификация, формат, лимиты
- Интеграции — интеграции, CI/CD
- SDK: Обзор — как SDK использует API
- Swagger UI — интерактивная документация