- System
  - get Liveness
  - get Readiness
  - get Версия сборки
- Modules
  - get Список модулей
  - post Создать модуль
  - get Получить модуль
  - patch Обновить модуль
  - del Удалить модуль
  - get Список CDN-источников
  - post Добавить CDN-источник
  - patch Обновить CDN-источник
  - del Удалить CDN-источник
  - get Список AS-записей
  - post Добавить AS-запись
  - patch Обновить AS-запись
  - del Удалить AS-запись
  - get Список доменных записей
  - post Добавить доменную запись
  - patch Обновить доменную запись
  - del Удалить доменную запись
  - get Список IP-диапазонов
  - post Добавить IP-диапазон
  - patch Обновить IP-диапазон
  - del Удалить IP-диапазон
  - post Запустить ingest
- DoH profiles
  - get Список DoH-профилей
  - post Создать DoH-профиль
  - get Получить DoH-профиль
  - patch Обновить DoH-профиль
  - del Удалить DoH-профиль
- Communities
  - get Список BGP community
  - post Создать community
  - get Получить community
  - patch Обновить community
  - del Удалить community
- Peers
  - get Список пиров
  - post Создать пира
  - get Получить пира
  - patch Обновить пира
  - del Удалить или отключить пира
- Speakers
  - get Список спикеров
  - post Зарегистрировать спикер
  - get Получить спикер
  - patch Обновить метаданные спикера
- Revisions
  - get История ревизий
  - get Метаданные ревизии
  - get Снимок префиксов ревизии
  - get Превью фрагментов BIRD
  - post Откат через новую ревизию
  - get Сравнить две ревизии
- Deploy
  - post Применить конфигурацию
  - post Применить на одном спикере
  - post Мягкий reload BIRD
- Jobs
  - get Список задач
  - get Статус задачи
  - post Запросить отмену задачи
- Node
  - get Последняя опубликованная ревизия для ноды
  - get Скачать подписанный бандл
  - post Регистрация ноды
- Settings
  - get Получить настройки
  - patch Частично обновить настройки

API docs by Redocly

# EvoBGP Control Plane API (0.1.0)

Download OpenAPI specification:

License: LicenseRef-Proprietary

REST API управления префиксами, модулями ingest, ревизиями конфигурации BIRD и задачами (async jobs).

Соглашения: префикс `/v1`; идентификаторы - UUID v7 или ULID (строки); время - ISO 8601 UTC. Ошибки - `application/problem+json` (RFC 9457). Пагинация списков - `cursor` + `limit`; ответ содержит `items`, `next_cursor`, `has_more`.

Роли (матрица доступа): `viewer`, `editor`, `operator`, `node`. Нода использует отдельные пути и ключ с ролью `node`.

Заголовок `X-Tenant-Id` допускается только для супер-ролей (явный tenant); иначе tenant берётся из API-ключа.

Черновик и контекст API

## System

Liveness, readiness и метаданные сборки. Обычно без чувствительных данных; доступ может быть шире.

## Liveness

Проверка, что процесс API жив. Не обязана проверять БД или брокер.

##### Authorizations:

bearerAuth

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/health

### Response samples

- 200
- default

Content type
application/json
`
{

- "status": "ok"

}`

## Readiness

Готовность к трафику (БД, брокер сообщений при reference-архитектуре и т.д.).

##### Authorizations:

bearerAuth

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/ready

### Response samples

- 200
- 503
- default

Content type
application/json
`
{

- "status": "ready",
- "checks": { }

}`

## Версия сборки

Версия API и control-plane (`git_sha`, `build_time` и др.).

##### Authorizations:

bearerAuth

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/version

### Response samples

- 200
- default

Content type
application/json
`
{

- "api_version": "string",
- "git_sha": "string",
- "build_time": "2019-08-24T14:15:22Z"

}`

## Modules

Экземпляры модулей префиксов (AS, CDN, домены, статические IP-диапазоны) и вложенные записи. Чтение - viewer+; изменение - editor+.

## Список модулей

Модули tenant с опциональными фильтрами по типу и флагу `enabled`.

##### Authorizations:

bearerAuth

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).
type | string (ModuleType) Enum: "AS_PREFIXES" "CDN_CIDRS" "DOMAINS" "IP_RANGES"
enabled | boolean

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules

### Response samples

- 200
- 401
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "type": "AS_PREFIXES",
    - "name": "string",
    - "enabled": true,
    - "priority": 0,
    - "doh_profile_id": "string",
    - "refresh_interval_sec": 0,
    - "cron_expr": "string",
    - "default_community_id": "string"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Создать модуль

Создаёт экземпляр модуля. Поле `type` задаёт вид (`AS_PREFIXES`, `CDN_CIDRS`, `DOMAINS`, `IP_RANGES`). `module_id` в других путях - идентификатор экземпляра, не имя типа.

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

type required | string (ModuleType) Enum: "AS_PREFIXES" "CDN_CIDRS" "DOMAINS" "IP_RANGES"
name required | string
enabled | boolean Default: true
priority | integer Default: 0
doh_profile_id | string or null
refresh_interval_sec | integer or null
cron_expr | string or null
default_community_id | string or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules

### Request samples

- Payload

Content type
application/json
`
{

- "type": "AS_PREFIXES",
- "name": "string",
- "enabled": true,
- "priority": 0,
- "doh_profile_id": "string",
- "refresh_interval_sec": 0,
- "cron_expr": "string",
- "default_community_id": "string"

}`

### Response samples

- 201
- 401
- 403
- 422
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "type": "AS_PREFIXES",
- "name": "string",
- "enabled": true,
- "priority": 0,
- "doh_profile_id": "string",
- "refresh_interval_sec": 0,
- "cron_expr": "string",
- "default_community_id": "string"

}`

## Получить модуль

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}

### Response samples

- 200
- 401
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "type": "AS_PREFIXES",
- "name": "string",
- "enabled": true,
- "priority": 0,
- "doh_profile_id": "string",
- "refresh_interval_sec": 0,
- "cron_expr": "string",
- "default_community_id": "string"

}`

## Обновить модуль

Частичное обновление (расписание, DoH, приоритет, `enabled` и т.д.).

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

name | string
enabled | boolean
priority | integer
doh_profile_id | string or null
refresh_interval_sec | integer or null
cron_expr | string or null
default_community_id | string or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}

### Request samples

- Payload

Content type
application/json
`
{

- "name": "string",
- "enabled": true,
- "priority": 0,
- "doh_profile_id": "string",
- "refresh_interval_sec": 0,
- "cron_expr": "string",
- "default_community_id": "string"

}`

### Response samples

- 200
- 401
- 403
- 404
- 422
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "type": "AS_PREFIXES",
- "name": "string",
- "enabled": true,
- "priority": 0,
- "doh_profile_id": "string",
- "refresh_interval_sec": 0,
- "cron_expr": "string",
- "default_community_id": "string"

}`

## Удалить модуль

Мягкое удаление или перевод в `enabled=false` - конкретное поведение задаётся реализацией.

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}

### Response samples

- 401
- 403
- 404
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Список CDN-источников

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/cdn-sources

### Response samples

- 200
- 401
- 404
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "url": "http://example.com",
    - "source_kind": "string",
    - "community_id": "string",
    - "refresh_interval_sec": 0
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Добавить CDN-источник

URL, `source_kind`, опционально `community_id`.

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

url required | string <uri>
source_kind required | string
community_id | string or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/cdn-sources

### Request samples

- Payload

Content type
application/json
`
{

- "url": "http://example.com",
- "source_kind": "string",
- "community_id": "string"

}`

### Response samples

- 201
- 401
- 403
- 404
- 422
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "url": "http://example.com",
- "source_kind": "string",
- "community_id": "string",
- "refresh_interval_sec": 0

}`

## Обновить CDN-источник

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
source_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

url | string <uri>
source_kind | string
community_id | string or null
refresh_interval_sec | integer or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/cdn-sources/{source_id}

### Request samples

- Payload

Content type
application/json
`
{

- "url": "http://example.com",
- "source_kind": "string",
- "community_id": "string",
- "refresh_interval_sec": 0

}`

### Response samples

- 200
- 401
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "url": "http://example.com",
- "source_kind": "string",
- "community_id": "string",
- "refresh_interval_sec": 0

}`

## Удалить CDN-источник

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
source_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/cdn-sources/{source_id}

### Response samples

- 401
- 404
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Список AS-записей

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/as-entries

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "asn": 0,
    - "prefix": "string",
    - "community_id": "string"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Добавить AS-запись

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

asn | integer
prefix | string
community_id | string or null
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/as-entries

### Request samples

- Payload

Content type
application/json
`
{

- "asn": 0,
- "prefix": "string",
- "community_id": "string"

}`

### Response samples

- 201
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "asn": 0,
- "prefix": "string",
- "community_id": "string"

}`

## Обновить AS-запись

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
entry_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

asn | integer
prefix | string
community_id | string or null
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/as-entries/{entry_id}

### Request samples

- Payload

Content type
application/json
`
{

- "asn": 0,
- "prefix": "string",
- "community_id": "string"

}`

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "asn": 0,
- "prefix": "string",
- "community_id": "string"

}`

## Удалить AS-запись

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
entry_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/as-entries/{entry_id}

### Response samples

- 404
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Список доменных записей

FQDN и привязка к community.

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/domain-entries

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "fqdn": "string",
    - "community_id": "string"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Добавить доменную запись

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

fqdn required | string
community_id | string or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/domain-entries

### Request samples

- Payload

Content type
application/json
`
{

- "fqdn": "string",
- "community_id": "string"

}`

### Response samples

- 201
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "fqdn": "string",
- "community_id": "string"

}`

## Обновить доменную запись

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
entry_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

fqdn required | string
community_id | string or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/domain-entries/{entry_id}

### Request samples

- Payload

Content type
application/json
`
{

- "fqdn": "string",
- "community_id": "string"

}`

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "fqdn": "string",
- "community_id": "string"

}`

## Удалить доменную запись

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
entry_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/domain-entries/{entry_id}

### Response samples

- 404
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Список IP-диапазонов

Только для модулей с типом IP_RANGES (статические CIDR и community_id).

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/ip-range-entries

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "prefix": "203.0.113.0/24",
    - "community_id": "01JQXYZABCDEFGHIJKLMNOPQRS"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Добавить IP-диапазон

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

prefix required | string
community_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ UUID v7 или ULID.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/ip-range-entries

### Request samples

- Payload

Content type
application/json
`
{

- "prefix": "string",
- "community_id": "01JQXYZABCDEFGHIJKLMNOPQRS"

}`

### Response samples

- 201
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "prefix": "203.0.113.0/24",
- "community_id": "01JQXYZABCDEFGHIJKLMNOPQRS"

}`

## Обновить IP-диапазон

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
entry_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

prefix required | string
community_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ UUID v7 или ULID.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/ip-range-entries/{entry_id}

### Request samples

- Payload

Content type
application/json
`
{

- "prefix": "string",
- "community_id": "01JQXYZABCDEFGHIJKLMNOPQRS"

}`

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "prefix": "203.0.113.0/24",
- "community_id": "01JQXYZABCDEFGHIJKLMNOPQRS"

}`

## Удалить IP-диапазон

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
entry_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/ip-range-entries/{entry_id}

### Response samples

- 404
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Запустить ingest

Запуск обновления данных модуля (CDN / DoH / AS в зависимости от типа). Для `IP_RANGES` данные обычно только в БД: сервер может вернуть 204 (no-op) или 400, если refresh не поддерживается - поведение фиксируется в реализации. Рекомендуется передавать `Idempotency-Key`.

##### Authorizations:

bearerAuth

##### path Parameters

module_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/modules/{module_id}/refresh

### Response samples

- 202
- 400
- 401
- 404
- default

Content type
application/json
`
{

- "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "status": "queued"

}`

## DoH profiles

Профили DNS-over-HTTPS для модулей типа домены. Секрет в ответах не возвращается.

## Список DoH-профилей

##### Authorizations:

bearerAuth

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/doh-profiles

### Response samples

- 200
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "url": "http://example.com",
    - "timeout_ms": 0,
    - "vault_secret_ref": "string"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Создать DoH-профиль

URL и таймауты; секрет - через vault id или отдельный вызов установки секрета.

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

url required | string <uri>
timeout_ms | integer
vault_secret_ref | string or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/doh-profiles

### Request samples

- Payload

Content type
application/json
`
{

- "url": "http://example.com",
- "timeout_ms": 0,
- "vault_secret_ref": "string"

}`

### Response samples

- 201
- 422
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "url": "http://example.com",
- "timeout_ms": 0,
- "vault_secret_ref": "string"

}`

## Получить DoH-профиль

Секрет в ответе не возвращается.

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/doh-profiles/{id}

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "url": "http://example.com",
- "timeout_ms": 0,
- "vault_secret_ref": "string"

}`

## Обновить DoH-профиль

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

url | string <uri>
timeout_ms | integer
vault_secret_ref | string or null

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/doh-profiles/{id}

### Request samples

- Payload

Content type
application/json
`
{

- "url": "http://example.com",
- "timeout_ms": 0,
- "vault_secret_ref": "string"

}`

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "url": "http://example.com",
- "timeout_ms": 0,
- "vault_secret_ref": "string"

}`

## Удалить DoH-профиль

Допустимо только если профиль не используется модулями.

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/doh-profiles/{id}

### Response samples

- 404
- 409
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Communities

Справочник BGP community в скоупе tenant.

## Список BGP community

##### Authorizations:

bearerAuth

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/communities

### Response samples

- 200
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "name": "string",
    - "kind": "string"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Создать community

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

name required | string
kind | string
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/communities

### Request samples

- Payload

Content type
application/json
`
{

- "name": "string",
- "kind": "string"

}`

### Response samples

- 201
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "name": "string",
- "kind": "string"

}`

## Получить community

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/communities/{id}

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "name": "string",
- "kind": "string"

}`

## Обновить community

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

name | string
kind | string
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/communities/{id}

### Request samples

- Payload

Content type
application/json
`
{

- "name": "string",
- "kind": "string"

}`

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "name": "string",
- "kind": "string"

}`

## Удалить community

Только при отсутствии ссылок из других сущностей.

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/communities/{id}

### Response samples

- 404
- 409
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Peers

BGP-пиры и политики; привязка к спикеру или ко всем спикерам.

## Список пиров

##### Authorizations:

bearerAuth

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).
speaker_id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: speaker_id=01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/peers

### Response samples

- 200
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "neighbor": "string",
    - "remote_asn": 0,
    - "bgp_speaker_id": "string"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Создать пира

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

neighbor required | string
remote_asn required | integer
bgp_speaker_id | string or null
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/peers

### Request samples

- Payload

Content type
application/json
`
{

- "neighbor": "string",
- "remote_asn": 0,
- "bgp_speaker_id": "string"

}`

### Response samples

- 201
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "neighbor": "string",
- "remote_asn": 0,
- "bgp_speaker_id": "string"

}`

## Получить пира

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/peers/{id}

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "neighbor": "string",
- "remote_asn": 0,
- "bgp_speaker_id": "string"

}`

## Обновить пира

Политики, neighbor, ASN, привязка к `bgp_speaker_id` или `null` для всех спикеров.

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

neighbor | string
remote_asn | integer
bgp_speaker_id | string or null
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/peers/{id}

### Request samples

- Payload

Content type
application/json
`
{

- "neighbor": "string",
- "remote_asn": 0,
- "bgp_speaker_id": "string"

}`

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "neighbor": "string",
- "remote_asn": 0,
- "bgp_speaker_id": "string"

}`

## Удалить или отключить пира

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/peers/{id}

### Response samples

- 404
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Speakers

Регистрация и метаданные экземпляров BIRD (master/replica/canary).

## Список спикеров

Master / replica, endpoint и связанные поля.

##### Authorizations:

bearerAuth

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/speakers

### Response samples

- 200
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "role": "string",
    - "endpoint": "string",
    - "last_applied_revision_id": "string"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Зарегистрировать спикер

Реплика, canary и т.д.

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

role | string
endpoint required | string
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/speakers

### Request samples

- Payload

Content type
application/json
`
{

- "role": "string",
- "endpoint": "string"

}`

### Response samples

- 201
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "role": "string",
- "endpoint": "string",
- "last_applied_revision_id": "string"

}`

## Получить спикер

В т.ч. `last_applied_revision_id`.

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/speakers/{id}

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "role": "string",
- "endpoint": "string",
- "last_applied_revision_id": "string"

}`

## Обновить метаданные спикера

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

role | string
endpoint | string
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/speakers/{id}

### Request samples

- Payload

Content type
application/json
`
{

- "role": "string",
- "endpoint": "string"

}`

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "role": "string",
- "endpoint": "string",
- "last_applied_revision_id": "string"

}`

## Revisions

История ревизий конфигурации, снимки префиксов, превью и откат (часто асинхронно).

## История ревизий

##### Authorizations:

bearerAuth

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).
module_id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: module_id=01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/revisions

### Response samples

- 200
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "parent_revision_id": "string",
    - "content_hash": "string",
    - "created_at": "2019-08-24T14:15:22Z"
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Метаданные ревизии

Хэш, родитель, время, артефакты.

##### Authorizations:

bearerAuth

##### path Parameters

revision_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/revisions/{revision_id}

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "parent_revision_id": "string",
- "content_hash": "string",
- "created_at": "2019-08-24T14:15:22Z"

}`

## Снимок префиксов ревизии

##### Authorizations:

bearerAuth

##### path Parameters

revision_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/revisions/{revision_id}/prefixes

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "items":
  [
  - { }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Превью фрагментов BIRD

Только чтение, без apply.

##### Authorizations:

bearerAuth

##### path Parameters

revision_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/revisions/{revision_id}/preview

### Response samples

- 200
- 404
- default

Content type
application/json
`{ }`

## Откат через новую ревизию

Создаёт новую ревизию с содержимым отката от указанной. Часто возвращает 202 с `Location` на задачу. Рекомендуется `Idempotency-Key`.

##### Authorizations:

bearerAuth

##### path Parameters

revision_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/revisions/{revision_id}/rollback

### Response samples

- 202
- 401
- 404
- default

Content type
application/json
`
{

- "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "status": "queued"

}`

## Сравнить две ревизии

Формат diff (JSON Patch, табличный и т.д.) определяется реализацией.

##### Authorizations:

bearerAuth

##### path Parameters

revision_a required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
revision_b required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/revisions/{revision_a}/diff/{revision_b}

### Response samples

- 200
- 404
- default

Content type
application/json
`{ }`

## Deploy

Применение ревизий на спикерах и опциональный reload BIRD. Требуется роль operator.

## Применить конфигурацию

Применить целевую ревизию на спикерах (политика по умолчанию или из тела). Ответ 202 с `Location` на `/v1/jobs/{job_id}`. Рекомендуется или обязателен `Idempotency-Key` по политике продукта.

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
optional

revision_id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ UUID v7 или ULID.
strategy | string (ApplyStrategy) Value: "all_speakers" Стратегия выбора спикеров для apply.
dry_run | boolean Default: false

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/apply

### Request samples

- Payload

Content type
application/json
`
{

- "revision_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "strategy": "all_speakers",
- "dry_run": false

}`

### Response samples

- 202
- 401
- 403
- default

Content type
application/json
`
{

- "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "status": "queued"

}`

## Применить на одном спикере

Canary / точечный deploy. 202 + `Location` на job.

##### Authorizations:

bearerAuth

##### path Parameters

id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
optional

revision_id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ UUID v7 или ULID.
strategy | string (ApplyStrategy) Value: "all_speakers" Стратегия выбора спикеров для apply.
dry_run | boolean Default: false

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/speakers/{id}/apply

### Request samples

- Payload

Content type
application/json
`
{

- "revision_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "strategy": "all_speakers",
- "dry_run": false

}`

### Response samples

- 202
- 403
- 404
- default

Content type
application/json
`
{

- "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "status": "queued"

}`

## Мягкий reload BIRD

Опциональный явный reload политики, если отделён от apply; иначе может отсутствовать или быть частью apply.

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/bird/reload

### Response samples

- 202
- 501
- default

Content type
application/json
`
{

- "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "status": "queued"

}`

## Jobs

Асинхронные задачи; статус и отмена (best-effort).

## Список задач

##### Authorizations:

bearerAuth

##### query Parameters

cursor | string Непрозрачный курсор из предыдущего ответа.
limit | integer [ 1 .. 500 ] Default: 50 Размер страницы (по умолчанию 50).
status | string (JobStatus) Enum: "queued" "running" "succeeded" "failed" "cancelled" Статус задачи; перечень может расширяться.
kind | string Фильтр по виду задачи; точный перечень расширяем.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/jobs

### Response samples

- 200
- default

Content type
application/json
`
{

- "items":
  [
  - {
    - "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
    - "kind": "string",
    - "status": "queued",
    - "idempotency_key": "string",
    - "created_at": "2019-08-24T14:15:22Z",
    - "started_at": "string",
    - "finished_at": "string",
    - "error": "string",
    - "meta": { }
    }
  ],
- "next_cursor": "string",
- "has_more": true

}`

## Статус задачи

Прогресс, ошибка, связанные сущности в `meta`.

##### Authorizations:

bearerAuth

##### path Parameters

job_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/jobs/{job_id}

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "kind": "string",
- "status": "queued",
- "idempotency_key": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "started_at": "string",
- "finished_at": "string",
- "error": "string",
- "meta": { }

}`

## Запросить отмену задачи

Best-effort; гарантии зависят от вида задачи.

##### Authorizations:

bearerAuth

##### path Parameters

job_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/jobs/{job_id}/cancel

### Response samples

- 202
- 404
- default

Content type
application/json
`
{

- "job_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "kind": "string",
- "status": "queued",
- "idempotency_key": "string",
- "created_at": "2019-08-24T14:15:22Z",
- "started_at": "string",
- "finished_at": "string",
- "error": "string",
- "meta": { }

}`

## Node

API для evobgp-node (бандлы ревизий и enrollment). Отдельный ключ или mTLS, роль node.

## Последняя опубликованная ревизия для ноды

Вызывается evobgp-node с ключом роли `node`.

##### Authorizations:

bearerAuth

##### path Parameters

speaker_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/speakers/{speaker_id}/revisions/latest

### Response samples

- 200
- 404
- default

Content type
application/json
`
{

- "revision_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "published_at": "2019-08-24T14:15:22Z"

}`

## Скачать подписанный бандл

Архив с `manifest.json` и подписью (например Ed25519). Целостность по SHA-256 в манифесте. `Content-Type` - `application/octet-stream` или multipart; детали - в реализации.

##### Authorizations:

bearerAuth

##### path Parameters

speaker_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.
revision_id required | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS UUID v7 или ULID.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/speakers/{speaker_id}/bundle/{revision_id}

### Response samples

- 404
- default

Content type
application/problem+json
`
{

- "type": "../dictionary",
- "title": "string",
- "status": 0,
- "detail": "string",
- "instance": "../dictionary",
- "errors":
  [
  - {
    - "field": "string",
    - "pointer": "string",
    - "message": "string"
    }
  ]

}`

## Регистрация ноды

Обмен ключами и привязка к `speaker_id`; детали протокола уточняются отдельно.

##### Authorizations:

bearerAuth

##### Request Body schema: application/json
required

public_key | string
speaker_id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ UUID v7 или ULID.
property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/nodes/enroll

### Request samples

- Payload

Content type
application/json
`
{

- "public_key": "string",
- "speaker_id": "01JQXYZABCDEFGHIJKLMNOPQRS"

}`

### Response samples

- 200
- 422
- default

Content type
application/json
`
{

- "status": "enrolled",
- "speaker_id": "01JQXYZABCDEFGHIJKLMNOPQRS",
- "tenant_id": "01JQXYZABCDEFGHIJKLMNOPQRS"

}`

## Settings

Глобальные настройки и feature flags; изменение - только operator.

## Получить настройки

KV (лимиты CDN, feature flags и т.д.).

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/settings

### Response samples

- 200
- default

Content type
application/json
`{ }`

## Частично обновить настройки

Только роль operator.

##### Authorizations:

bearerAuth

##### header Parameters

X-Tenant-Id | string (ResourceId) ^[0-9A-Za-z_-]{20,36}$ Examples: 01JQXYZABCDEFGHIJKLMNOPQRS Явный tenant (только супер-роли). Без заголовка tenant определяется по ключу.
Idempotency-Key | string <= 256 characters Идемпотентность мутаций. Для `POST` apply и части refresh рекомендуется или обязателен по политике продукта.

##### Request Body schema: application/json
required

property name* additional property | any

### Responses

Базовый URL инсталляции (замените на свой)

https://api.example.com/v1/settings

### Request samples

- Payload

Content type
application/json
`{ }`

### Response samples

- 200
- 403
- default

Content type
application/json
`{ }`