Для AI-агентов: markdown этой страницы — /docs-content/source-storage.md индекс документации — /llms.txt
Хранилище исходного кода
Хранилище исходного кода автоматически сохраняет снимки кода вашего приложения при каждом деплое. Если над приложением начинает работать другой человек или новая AI-сессия, последнюю версию можно скачать и продолжить с того же места — код не потеряется.
Разделы документации
- Автоматическое сохранение при деплое — что попадает в снапшот само, блок
sourceв ответе деплоя, деплой из сохранённой версии - Снапшот перед публикацией — что проверяется перед публикацией, отказ
409 SNAPSHOT_REQUIRED, публикация исходников с сервера - Сохранить снапшот —
POST /v1/apps/:id/sources, заголовки метаданных, дедупликация - Список версий и скачивание — история версий, метаданные одной версии, подписанная ссылка на архив
- Теги и комментарии версии —
PATCHметаданных и постановка тега - Удаление версий — удаление одной версии и массовая очистка
- Срок жизни версий и очистка — политика хранения, версии удалённого сервера, объекты в хранилище
- Серверные эндпоинты исходников — то же семейство с ключом сервера
- Реестр исходников и состояние портала —
GET /v1/me/sources, страница кабинета,capabilities.apps.sourceStorage
Зачем это нужно
Когда вы дорабатываете приложение, важно не потерять рабочую версию кода. Хранилище делает это автоматически: при каждом успешном деплое платформа сохраняет снимок исходников. Если позже над приложением начнёт работать другой человек или новая AI-сессия — он скачает последнюю версию и продолжит с того же места, без ручной пересылки архивов.
Снимок привязан к приложению, а не к конкретному разработчику: код остаётся у приложения, даже если меняется команда.
Чем это отличается от Git и GitHub
Это не система контроля версий и не замена Git. Хранилище решает более узкую задачу — страховка и передача проекта.
| Хранилище исходного кода | Git / GitHub | |
|---|---|---|
| Что хранит | целые снимки архива кода | историю изменений построчно |
| Когда сохраняет | автоматически при каждом деплое | вручную, по команде разработчика |
| Нужны ли навыки Git | нет | да |
| Ветки, слияния, сравнение версий | нет | да |
Нужна командная разработка с ветками и историей — используйте Git. Нужно просто не терять рабочий код и уметь вернуться к прошлой версии — достаточно хранилища.
Как это работает
- Вы дорабатываете приложение и запускаете деплой.
- Платформа сама сохраняет снимок исходников — очередную версию:
v1,v2,v3, … - В любой момент смотрите список версий и скачиваете нужную.
- Перед публикацией приложения платформа проверяет, что снимок сохранён.
правка кода → деплой → снимок vN сохранён автоматически
↓
список версий → скачать любую → продолжить работу
Основные понятия
- Снимок (снапшот) — заархивированная копия исходного кода приложения на момент сохранения.
- Версия
vN— порядковый номер снимка (v1,v2, …). Самый свежий считается текущим. - Тег — метка
manualилиpublished: помечает версию как важную, чтобы её не удалила автоматическая очистка. - Дедупликация — если код не изменился, новый снимок не создаётся, возвращается уже существующая версия. Действует в пределах одного владельца — сервера или приложения.
Доступ и эндпоинты
Базовый URL: https://vibecode.bitrix24.tech/v1
Авторизация: заголовок X-Api-Key. Управлять снапшотами могут ключ авторизации приложения (vibe_app_*), личный ключ автора приложения (vibe_api_*) или администратор портала.
Допустимые форматы архива: application/gzip, application/x-tar, application/zip, application/octet-stream.
Лимит тела: 500 МБ на один запрос.
Снапшоты приложения:
| Метод | Путь | Действие |
|---|---|---|
POST |
/v1/apps/:id/sources |
Сохранить снапшот |
GET |
/v1/apps/:id/sources |
Список версий |
GET |
/v1/apps/:id/sources/:versionId |
Метаданные одной версии |
GET |
/v1/apps/:id/sources/:versionId/download |
Подписанная ссылка на скачивание |
PATCH |
/v1/apps/:id/sources/:versionId |
Обновить теги / комментарий |
POST |
/v1/apps/:id/sources/:versionId/tag |
Добавить или снять тег |
DELETE |
/v1/apps/:id/sources/:versionId |
Удалить версию |
POST |
/v1/apps/:id/sources/cleanup |
Массовая очистка |
Снапшоты сервера — то же семейство с ключом сервера, отличия и полный список путей на странице Серверные эндпоинты исходников.
Сводный реестр: GET /v1/me/sources — все владельцы снапшотов, доступные ключу, Реестр исходников.
Контракт сохранения
Тело POST …/sources — сырые байты архива, не multipart/form-data. Метаданные передаются заголовками, а не полями формы и не query-параметрами.
| Заголовок | Обязательный | Описание |
|---|---|---|
Content-Type |
да | Формат архива из списка выше. Другое значение → 400 INVALID_CONTENT_TYPE |
Content-Length |
да | Размер тела в байтах. Без него (Transfer-Encoding: chunked) → 411 MISSING_CONTENT_LENGTH |
X-Filename |
нет | Имя файла для отображения. Если не указан — имя выводится из Content-Type. Символы вне набора a-zA-Z0-9._- → 400 INVALID_FILENAME |
X-Tags |
нет | Теги через запятую. Распознаются manual и published — они защищают версию от автоматической очистки |
X-Note |
нет | Комментарий, который сохраняется в записи о версии |
X-AI-Session-Id |
нет | Идентификатор AI-сессии, группирует снапшоты в манифесте |
curl -X POST https://vibecode.bitrix24.tech/v1/apps/<APP_ID>/sources \
-H "X-Api-Key: YOUR_APP_KEY" \
-H "Content-Type: application/gzip" \
-H "X-Tags: manual" \
-H "X-Note: Добавил OAuth-флоу" \
--data-binary @app-sources.tar.gz
Источник кода при развёртывании — поле source в POST /v1/infra/servers/:id/deploy принимает три взаимоисключающие формы:
| Форма | Что это |
|---|---|
source.content |
Встроенный архив в base64 — работает всегда, в том числе на galaxy-приложении |
source.url |
Подписанная ссылка из хранилища Вайбкод. На galaxy-приложении — за отдельным включением |
source.versionId |
Уже сохранённая версия вида vN. На galaxy-приложении — за отдельным включением |
Полный разбор сохранения — Сохранить снапшот, автосохранение и деплой из версии — Автоматическое сохранение при деплое.
Быстрый старт
Передать проект другому разработчику или новой AI-сессии — три вызова:
# 1. Что вообще сохранено под этим приложением
curl -H "X-Api-Key: YOUR_API_KEY" \
https://vibecode.bitrix24.tech/v1/apps/<APP_ID>/sources
# 2. Ссылка на архив нужной версии (действует 30 минут)
curl -H "X-Api-Key: YOUR_API_KEY" \
https://vibecode.bitrix24.tech/v1/apps/<APP_ID>/sources/v1/download
# 3. Скачать архив по полученной ссылке — без дополнительных заголовков
curl -o source-v1.tar.gz "<url из ответа выше>"
Коды ошибок
Отказы, специфичные для хранилища исходников:
| HTTP | Код | Когда возвращается |
|---|---|---|
| 400 | INVALID_CONTENT_TYPE |
Content-Type не входит в список допустимых форматов архива |
| 400 | INVALID_SHA256 |
Параметр sha256 не равен 64 шестнадцатеричным символам |
| 400 | INVALID_VERSION_ID |
Формат versionId не соответствует v<целое неотрицательное число> |
| 400 | INVALID_KEEP_LATEST |
Значение keepLatest не является целым неотрицательным числом |
| 400 | SOURCE_VERSION_REQUIRES_APP |
Деплой по versionId ключом, которому сервер не принадлежит, а владелец сервера не привязан к приложению |
| 403 | NOT_AUTHORIZED |
Ключ не является ключом приложения, личным ключом автора или ключом администратора портала |
| 403 | PORTAL_KEY_REQUIRED |
Ключ не привязан к порталу — сводный реестр такому ключу недоступен |
| 403 | SOURCE_APP_ID_MISMATCH |
Ключ авторизации vibe_app_… обращается к снапшотам другого приложения |
| 403 | INFRA_FORBIDDEN_FOR_COWORK_KEY |
Сохранение, правка метаданных или удаление вызваны ключом Cowork/Code — Проектный ключ для деплоя |
| 404 | APP_NOT_FOUND |
Приложение не существует, удалено или принадлежит другому порталу |
| 404 | VERSION_NOT_FOUND |
Версии с таким versionId нет или она удалена |
| 404 | SOURCE_VERSION_NOT_FOUND |
Версия не найдена ни в контексте сервера, ни в контексте приложения |
| 409 | SNAPSHOT_REQUIRED |
Публикация без сохранённого снапшота либо деплой с внешним URL |
| 409 | PROTECTED_BY_TAG |
Версия защищена тегом manual или published |
| 410 | SOURCE_VERSION_BYTES_PURGED |
Запись о версии жива, но байты уже вычищены из хранилища |
| 411 | MISSING_CONTENT_LENGTH |
Запрос на сохранение пришёл без Content-Length |
| 415 | UNSUPPORTED_ARCHIVE_FORMAT |
Первые байты архива противоречат заявленному Content-Type |
| 502 | SOURCE_DOWNLOAD_URL_FAILED |
Хранилище временно недоступно — повторите запрос |
Полный справочник кодов API — Коды ошибок.