Справочник

REST API

Базовый адрес — https://api.vlone.cloud/v1. Все ответы в JSON, кодировка UTF-8, время в ISO 8601 с зоной UTC.

Аутентификация

curl https://api.vlone.cloud/v1/projects \
  -H "Authorization: Bearer $VLONE_TOKEN"

Токен передаётся только в заголовке. Ключ в query-строке отклоняется с 400, потому что такие URL оседают в логах.

Проекты

МетодПутьОписание
GET/projectsСписок проектов
POST/projectsСоздать проект
GET/projects/{id}Получить проект
PATCH/projects/{id}Изменить настройки
DELETE/projects/{id}Удалить проект

Деплои

curl -X POST https://api.vlone.cloud/v1/projects/prj_8fa2/deployments \
  -H "Authorization: Bearer $VLONE_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "environment": "production",
    "image": "ghcr.io/example/api:1.4.2",
    "strategy": "canary",
    "canary_percent": 10
  }'

Пагинация

Курсорная, без смещений: смещения ломаются при вставках между запросами.

{
  "data": [ /* ... */ ],
  "page": {
    "next": "eyJpZCI6ImRwbF8yYzkxZmYifQ",
    "has_more": true
  }
}

Ошибки

{
  "error": {
    "code": "revision_not_found",
    "message": "Ревизия r999 не найдена в окружении production",
    "status": 404,
    "request_id": "req_4b81de2a",
    "docs": "https://ru.vlone.cloud/docs/api/#oshibki"
  }
}
СтатусКогда
400Тело или параметры не прошли валидацию
401Токен отсутствует, истёк или отозван
403Токену не хватает области действия
404Ресурс не существует или недоступен
409Конфликт: деплой уже идёт
422Запрос корректен, но невыполним
429Превышен лимит запросов
503Регион временно недоступен, повторите

Лимиты запросов

600 запросов в минуту на токен. Текущее состояние — в заголовках X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset. При 429 уважайте Retry-After.

Вебхуки

Подпись — HMAC-SHA256 от сырого тела в заголовке X-Vlone-Signature. Сравнивайте её в постоянном времени.

import hashlib
import hmac

def verify(raw_body: bytes, signature: str, secret: str) -> bool:
    expected = hmac.new(secret.encode(), raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, signature)

События: deployment.created, deployment.succeeded, deployment.failed, revision.rolled_back, alert.fired, alert.resolved, domain.certificate_renewed.