Для AI-агентов: markdown этой страницы — /docs-content/source-storage/versions-download.md индекс документации — /llms.txt

Скачать архив

GET /v1/apps/:id/sources/:versionId/download

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

Операция доступна и при отключённом сохранении исходников: ранее сохранённая история остаётся читаемой.

Параметры

Параметр Тип Обяз. Описание
id (path) UUID да Идентификатор приложения. Получить — GET /v1/apps.
versionId (path) string да Идентификатор версии вида v<N>. Получить — Список версий. Номер savedVersionId из ответа деплоя сервера на личном ключе относится к истории сервера, а не приложения: по нему этот метод отдаст ссылку на архив другой версии приложения или 404 VERSION_NOT_FOUND. Такую версию скачивайте через серверные эндпоинты.

Примеры

curl — личный ключ

Terminal
# Получить ссылку
curl -H "X-Api-Key: YOUR_API_KEY" \
  https://vibecode.bitrix24.tech/v1/apps/<APP_ID>/sources/v3/download

# Скачать архив по полученной ссылке, без дополнительных заголовков
curl -o source-v3.tar.gz "<url из ответа выше>"

curl — OAuth-приложение

Terminal
# Получить ссылку
curl -H "X-Api-Key: YOUR_APP_KEY" \
  -H "Authorization: Bearer USER_SESSION_TOKEN" \
  https://vibecode.bitrix24.tech/v1/apps/<APP_ID>/sources/v3/download

# Скачать архив по полученной ссылке, без дополнительных заголовков
curl -o source-v3.tar.gz "<url из ответа выше>"

JavaScript — личный ключ

javascript
const { data } = await fetch(
  `https://vibecode.bitrix24.tech/v1/apps/${appId}/sources/v3/download`,
  { headers: { 'X-Api-Key': 'YOUR_API_KEY' } },
).then((r) => r.json())

const archive = await fetch(data.url)
const buffer = await archive.arrayBuffer()
// Дальше — распаковка архива: tar.gz читается tar-библиотекой, zip — JSZip или аналогом

JavaScript — OAuth-приложение

javascript
const { data } = await fetch(
  `https://vibecode.bitrix24.tech/v1/apps/${appId}/sources/v3/download`,
  {
    headers: {
      'X-Api-Key': 'YOUR_APP_KEY',
      'Authorization': 'Bearer USER_SESSION_TOKEN',
    },
  },
).then((r) => r.json())

const archive = await fetch(data.url)
const buffer = await archive.arrayBuffer()
// Дальше — распаковка архива: tar.gz читается tar-библиотекой, zip — JSZip или аналогом

Поля ответа

Поле Тип Описание
success boolean Всегда true при успехе.
data.url string Подписанная ссылка на архив. Дополнительных заголовков при скачивании не требует. Формат архива — поле contentType версии, см. Получить метаданные версии.
data.expiresAt string Момент истечения подписи (ISO 8601, UTC). Ссылка запрашивается на 30 минут, но подпись может истечь раньше: скачивайте архив сразу и сверяйтесь с этим полем.

Пример ответа

HTTP 200, подписанная ссылка в примере сокращена:

JSON
{
  "success": true,
  "data": {
    "url": "https://<storage-endpoint>/...",
    "expiresAt": "2026-10-07T09:12:22.000Z"
  }
}

Пример ответа при ошибке

404 — версии с таким идентификатором у приложения нет:

JSON
{
  "success": false,
  "error": {
    "code": "VERSION_NOT_FOUND",
    "message": "Version v99 not found"
  }
}

Ошибки

HTTP Код Описание
400 INVALID_VERSION_ID Формат versionId не соответствует v<целое неотрицательное число>.
403 SOURCE_APP_ID_MISMATCH Вызов сделан ключом авторизации vibe_app_…, выписанным на другое приложение. Такой ключ обращается только к снапшотам своего приложения, даже если оба приложения создал один автор.
403 NOT_AUTHORIZED Личный ключ не принадлежит ни автору приложения, ни администратору портала и не выписан на это приложение.
404 APP_NOT_FOUND Приложение не существует, удалено или принадлежит другому порталу.
404 VERSION_NOT_FOUND Версия с таким versionId не существует или была удалена.
410 SOURCE_VERSION_BYTES_PURGED Запись о версии жива, но её байты уже вычищены из хранилища. Восстановление одно — сохранить архив заново.
502 SOURCE_DOWNLOAD_URL_FAILED Хранилище временно недоступно — повторите запрос.

Полный список общих ошибок API — Ошибки.

Смотрите также