Обновление схемы API — 10 августа 2026
Корневой swagger.json заменён последним экспортом от команды бэкенда. Контракт теперь называется ZennoHosting API
вместо ZennoHosting API (DEV). Базовый адрес и схема авторизации OAuth2 не изменились. Число операций уменьшилось с 76
до 72.
Добавленные эндпоинты
- Лимиты ресурсов:
GET /limitsвозвращает квоты пользователя — проекты, токены доступа, сети, публичные адреса и суммарные CPU, RAM и диск по всем машинам — каждую с лимитом, текущим потреблением и остатком. - Ограничения длины имён:
GET /limits/name-lengthsвозвращает максимальные длины имён проекта, сети, машины, SSH-ключа и токена доступа, а также длину значения публичного SSH-ключа. Это правила валидации, а не квоты. - Счётчики состояний машин:
GET /projects/{projectId}/vms/state-countsвозвращает число машин проекта с разбивкой по статусу жизненного цикла и по состоянию питания; счётчики считаются на сервере.
Оба эндпоинта лимитов собраны под новым тегом Limits.
Удалённые эндпоинты
- Административные saga-эндпоинты
/admin/sagas— список, детали, finalize и force-compensate — анонсированные в обновлении от 14 июля 2026. Вместе с ними ушли их страницы справочника, схемы и страницы параметровsaga-type,statesиcorrelation-id. - Платёжные эндпоинты
/payments. Они и раньше исключались из документируемой поверхности черезexcludedTags, поэтому на сайте ничего не изменилось.
Изменения схем, важные для клиентов
- Новое поле
statusу машин, сетей и публичных адресов. EnumResourceStatus—creating,active,updating,deleting,failed— теперь рекомендуемый способ показывать состояние ресурса. Прежняя параoperation/operationStatusсохранена только для обратной совместимости. OperationResponse.lastErrorзаменено наfailureCodeс типом нового enumOperationFailureCode:insufficientCapacity,timeout,internal.- Новый тип
ApiProblemDetailsдобавляет к телу ошибки полеcode— устойчивый машиночитаемый признак конкретной ошибки. Сейчас он объявлен ровно у одного ответа:409при создании машины, гдеcodeравенinsufficientCapacity. Все остальные ответы об ошибке по-прежнему используют базовый тип безcode. - У
ConfigurationResponseпоявилисьavailabilityиmaxCount— справочные признаки того, есть ли сейчас мощности под конфигурацию. - У
RebuildVmRequestпоявилосьdeleteBackupsсо значением по умолчаниюfalse. - У
BackupResponseпоявилосьsourceImageId; для копий, созданных до появления поля, оно равноnull. - У
NetworkResponse,PublicIpResponseиVmResponseпоявилосьstatus. ProjectResponse.vmCountпомечено устаревшим в пользуresourceCounts.vms.- Десять новых схем:
ApiProblemDetails,OperationFailureCode,ResourceLimitsResponse,ResourceNameLengthLimitsResponse,ResourceQuotaResponse,ResourceStatus,VmPowerStateCountsResponse,VmResourceLimitsResponse,VmStateCountsResponse,VmStatusCountsResponse. Ни одна схема не удалена.
Ломающие изменения и что делать
- Клиенты, читавшие
lastErrorу операции, должны перейти наfailureCode: старое поле удалено, а не помечено устаревшим. - Любой инструмент, вызывающий
/admin/sagas, получит 404. Замены в этом контракте нет. - Для отображения состояния ресурса переходите с
operation/operationStatusнаstatus. Учтите:statusравенactiveи после неудачной операции, если сбой обработан штатно — запуск, остановка, перезагрузка или изменение конфигурации, которые можно просто повторить, оставляют ресурс активным. Об исходе операции судите по её записи, а не по состоянию ресурса. - Требование OAuth2 не изменилось. Перегенерируйте типы API перед обновлением.
Что сделано в документации вместе с этим обновлением
- Новые авторские страницы: Лимиты и квоты, Ошибки API и Инвентаризация и мониторинг.
- Статусы и жизненный цикл переписана вокруг поля
status; там же перечислены поля, оставленные только для совместимости. - В гайды добавлены
availability/maxCount,sourceImageIdиdeleteBackups. - Подписи операций в справочнике теперь короткие, а не целые предложения; внутренние имена типов .NET больше не попадают в публичные описания.
Известные пробелы контракта
Переданы команде бэкенда, здесь зафиксированы как есть:
- Регистр значений enum непоследователен:
ResourceStatusиOperationFailureCodeв нижнем camelCase (creating,internal), аApiOperationStatus,VmBootStatusиResourceOperation— в PascalCase (Queued,Running,Provision). - Описание
OperationFailureCodeссылается на значение по умолчаниюInternal, которого в enum нет; фактическое значение —internal. ApiProblemDetailsподключён к одному ответу, поэтому полагаться наcodeво всём API пока нельзя.GET .../vms/{vmId}/metricsвозвращает предопределённые тестовые данные, аPOST .../vms/{vmId}/resizeвсегда отвечает503 Service Unavailable. Оба остаются в справочнике, но исключены из авторских гайдов.