---
title: "Back up a deployment's data to your own S3"
method: POST
path: "/backups"
tags: ["Platform"]
---

# Back up a deployment's data to your own S3

`POST /backups`

## Request

- Base URL: `https://api.imprezahost.com/v1`
- URL: `https://api.imprezahost.com/v1/backups`
- Auth: API key in header `X-API-Key` and API key in header `X-API-Secret`

Packs the app's data directory and uploads it in chunks to the
account's own Impreza S3 bucket, alongside a manifest carrying a
SHA-256 per chunk — so the backup is verifiable with your own S3
credentials, without us.

Returns immediately with a `backup_id`; a large app takes minutes.
Poll `GET /backups/{id}`.

The account does not need storage beforehand: if it has none, the
free Impreza S3 tier is created here and the backup proceeds. Only a
product that is actually free is ever ordered, so this call cannot
produce a bill — the response carries `storage_created: true` when it
happened. Outgrowing the included quota is handled by upgrading the
storage product itself.

Requires a running deployment and no other job in flight for the same
app. Refuses with `409 STORAGE_FULL` when the bucket is already at
100%, rather than starting work that can only end in a rejected
upload.

The response carries a `storage` block — bytes used, the limit, and
the percentage. That figure comes from a periodic scan, so space freed
moments earlier can take a few minutes to appear.

## Request body

- object
  - `deployment_id` string, required

## Response `202`

Backup job queued

## Other responses

- `401`: Invalid or missing API credentials
- `404`: Resource not found
- `409`: App not running, a job is already in flight, or the account has no storage
- `424`: The storage service could not be reached

---

[API](https://skmtc.dev/imprezahost/apis/impreza-host-public-api.md) · [All operations](https://skmtc.dev/imprezahost/apis/impreza-host-public-api/llms.txt) · [OpenAPI document](https://skmtc.dev/imprezahost/apis/impreza-host-public-api/revisions/db86511f604f?raw)
