Документация Deploya

Deploya Deploy API v1

# Deploya Deploy API v1

Базовый URL: `https://app.deploya.ru/api/v1`. Авторизация: `Authorization: Bearer dpl_live_...`.

## Деплой

`POST /api/v1/deployments`, тип `multipart/form-data`:

- `archive` — обязательный ZIP с готовым статическим сайтом;
- `projectId` — идентификатор существующего проекта; без него создаётся новый;
- `name`, `subdomain`, `teamId` — необязательны при создании;
- `baseDomain` — системная зона нового проекта; по умолчанию `deploya.online`, для зоны `deploya.ru` передайте её явно;
- `entrypoint` — главный HTML, по умолчанию определяется автоматически;
- `target` — `production` или `preview` (preview доступен после первого production-деплоя).

Для безопасного повтора передавайте `Idempotency-Key: <uuid>`. Один ключ в течение 24 часов возвращает тот же результат и не создаёт повторную версию.

Загрузки production и preview расходуют общую дневную и месячную квоту владельца сайта. Успешный ответ содержит `updateUsage` владельца после загрузки. При исчерпании API отвечает HTTP 429 с `error.code=UPDATE_LIMIT_REACHED`, `error.details.updateUsage` и заголовком `Retry-After` в секундах. Оба периода содержат `used`, `limit`, `remaining`, `resetAt`; `limit: null` означает безлимит. Сроки сброса — по Москве. Опубликованные сайты и восстановление сохранённых версий остаются доступны.

```bash
curl -X POST https://app.deploya.ru/api/v1/deployments \
  -H "Authorization: Bearer $DEPLOYA_TOKEN" \
  -H "Idempotency-Key: $(uuidgen)" \
  -F "archive=@site.zip" \
  -F "name=Мой сайт" \
  -F "target=production"
```

## Управление

- `GET /me` — аккаунт, scopes, тарифные лимиты, занятое хранилище и остаток проектов;
- `GET /projects`, `GET /projects/:id`, `GET /teams` — выбор проекта и команды;
- `GET /projects/:id` также возвращает `updateUsage` владельца проекта для предварительной проверки командного деплоя; `GET /me` содержит личную квоту в `usage.updates`;
- `PATCH /projects/:id` — название, поддомен, системная доменная зона и entrypoint без создания копии;
- `PATCH /projects/:id/status`, `DELETE /projects/:id` — остановка/запуск и удаление;
- `GET /projects/:id/stats` — аналитика;
- `GET|PATCH /projects/:id/indexing` — индексация: чтение с projects:read, изменение с projects:write и управляющей ролью, JSON `{ "enabled": true|false }`. Ответ: available, enabled, primaryUrl, customDomain, canManage. Free не может включить, Plus — только для выбранного проекта; Pro и Бизнес — для всех проектов владельца. Ошибки: INVALID_INDEXING_ENABLED (400), INDEXING_NOT_AVAILABLE или FORBIDDEN (403), PROJECT_NOT_FOUND (404);
- `GET /projects/:id/versions`, `POST /projects/:id/versions/:versionId/restore` — версии;
- `DELETE /projects/:id/versions/:versionId` — безвозвратно удалить архивную или preview-версию и файлы. Нужны projects:write и управляющая роль; текущая версия (CURRENT_VERSION) и активное согласование (VERSION_IN_REVIEW) защищены ответом 409. versionId — ID из списка, не порядковый номер версии. Ответ содержит ok, message и storage;
- `GET|POST /projects/:id/domains`, проверка и удаление домена — управление доменами.

Машиночитаемая схема: https://docs.deploya.ru/openapi.json.