Для 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 — личный ключ
# Получить ссылку
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-приложение
# Получить ссылку
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 — личный ключ
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-приложение
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, подписанная ссылка в примере сокращена:
{
"success": true,
"data": {
"url": "https://<storage-endpoint>/...",
"expiresAt": "2026-10-07T09:12:22.000Z"
}
}
Пример ответа при ошибке
404 — версии с таким идентификатором у приложения нет:
{
"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 — Ошибки.