Чанковая передача
Сессии, части, докачка после разрыва, отмена, выгрузка с Range. Основной сценарий работы агента.
Vault принимает данные только по API. Портал показывает состояние, но ничего не загружает — передачей занимается агент, и всё, что он делает, описано здесь.
Все вызовы идут на https://vault.goida.fun. Версия указывается в пути. Сейчас в сервисе живут три префикса, и это не беспорядок, а история:
| Префикс | Назначение | Состояние |
|---|---|---|
/v1/chunks |
передача объектов частями | текущий |
/api/v3/sync |
канал событий для агента | текущий |
/api/v2/sync |
канал событий, старый формат | до 1.03.2027 |
Путь передачи данных версионируется отдельно от канала событий: формат частей не менялся с первого релиза, а формат событий уже пережил одну несовместимую правку. Разводить их по разным версиям оказалось дешевле, чем тянуть общую нумерацию.
/api/v2/sync остаётся включённым ради агентов версии 1.3 и старше — их ещё немало на длинных контурах, где обновление проходит раз в год. Новые интеграции сразу берут /api/v3/sync: у v2 нет курсора, и после разрыва он переприсылает события за сутки.
Каждый запрос несёт токен агента в заголовке Authorization. Токен выпускает администратор пространства в кабинете; самостоятельной регистрации и обмена логина на токен нет.
Authorization: Bearer vlt_ag_7Q2m4Xd9pKcRt6Yb
X-Vault-Space: sp_3f9a21
X-Vault-Agent: db-01
Accept: application/json
Токен привязан к паре «агент + пространство» и несёт регион по умолчанию. Срок жизни — 180 дней; за две недели до истечения сервис начинает отдавать заголовок X-Vault-Token-Expires с датой, чтобы агент успел попросить продление до того, как копия упадёт посреди ночи.
Отозванный токен перестаёт работать сразу, без ожидания истечения кэша. Незавершённые сессии передачи при отзыве закрываются, принятые части остаются и доступны новой сессии в течение суток.
Ниже — минимальный путь от токена до подтверждённого объекта. Подробности каждого шага — в разделе Чанковая передача.
Администратор пространства создаёт агента и выдаёт токен. Проверить, что он живой, можно любым запросом к сессиям: невалидный токен вернёт 401 с кодом E2003.
POST /v1/chunks с именем объекта и его размером. В ответе придёт uploadId и рекомендованный размер части для вашего региона.
PUT /v1/chunks/{uploadId}/{partNumber} на каждую часть. Части можно лить параллельно, порядок не важен. Каждый ответ несёт etag — сохраните их.
POST /v1/chunks/{uploadId}/complete со списком пар partNumber и etag. Сервис сверяет список с принятым и только тогда собирает объект.
curl -X POST https://vault.goida.fun/v1/chunks \
-H "Authorization: Bearer vlt_ag_7Q2m4Xd9pKcRt6Yb" \
-H "X-Vault-Space: sp_3f9a21" \
-H "Content-Type: application/json" \
-d '{"key":"pg/main.dump","size":45742891008,"region":"ru"}'
HTTP/2 201
{
"uploadId": "up_5KpR2n8vQz",
"key": "pg/main.dump",
"region": "ru",
"partSize": 8388608,
"parts": 5451,
"expiresAt": "2026-07-31T22:14:07Z"
}
Агент шифрует каждую часть до отправки: содержимое — AES-256-GCM на ключе части, ключ части заворачивается в мастер-ключ пространства (X25519 + HKDF). На сервер уезжает шифротекст и обёрнутый ключ. Мастер-ключ не покидает машину и не восстанавливается на нашей стороне.
Открытыми остаются метаданные: имя объекта, размер, время, номер версии. По ним строится каталог и работает выбор версии при восстановлении. Если имена сами по себе чувствительны, включите режим непрозрачных ключей — тогда агент хранит соответствие локально, а на сервер уходит только идентификатор.
Потерянный мастер-ключ означает потерянные данные. Это не позиция поддержки, а следствие схемы: мы не располагаем материалом, которым можно расшифровать ваши части. Экспортируйте ключ при заведении пространства и держите его отдельно от копий.
О найденной уязвимости пишите по контактам из security.txt. Мы отвечаем на такие письма вне очереди.
Сессии, части, докачка после разрыва, отмена, выгрузка с Range. Основной сценарий работы агента.
Long-poll канал, курсор, таймауты удержания соединения, отличия v3 от v2.
Квоты, ограничения на части, частота запросов и полная таблица кодов.
Куда писать, как выбирается регион, сколько копий держится внутри него и когда регион уходит в режим чтения.