---
title: "Restore an uploaded backup file as a new project"
method: POST
path: "/backup-restores"
tags: ["Backups and portability"]
---

# Restore an uploaded backup file as a new project

`POST /backup-restores`

## Request

- Base URL: `https://studio.weaverse.io/api/v1/content`
- URL: `https://studio.weaverse.io/api/v1/content/backup-restores`
- Auth: HTTP bearer

Restores an uploaded backup file as a new project in the caller's shop. Send `multipart/form-data` with exactly one `file` part: a backup as downloaded from `GET /projects/{projectId}/backups?backupId=` (brotli or plain JSON).

- Creates a new project and never overwrites an existing one, so no confirmation is required.
- Shop-level: there is no project id in the path. Project-bound agent tokens are never accepted.
- Upload at most 50 MB; decompressed at most 256 MB. The whole multipart body is byte-capped while streaming, and a second file part is rejected.
- 400 when the file is not a readable Weaverse backup or uses an unsupported backup schema; 415 when the body is not `multipart/form-data`.

Required scope: `project:manage`

## Request body `multipart/form-data`

- object
  - `file` string, binary, required

## Response `201`

Restored

- object
  - `object` 'project_restored'
  - `newProjectId` string

## Other responses

- `400`: Not a readable Weaverse backup
- `401`: Missing or invalid credentials
- `403`: Foreign project or missing scope (INSUFFICIENT_SCOPE)
- `413`: File too large
- `415`: Not multipart/form-data
- `500`: Restore failed (INTERNAL_ERROR)

---

[API](https://skmtc.dev/weaverse/apis/weaverse-content-api.md) - [All operations](https://skmtc.dev/weaverse/apis/weaverse-content-api/llms.txt) - [OpenAPI document](https://skmtc.dev/weaverse/apis/weaverse-content-api/revisions/d189794169bb?raw)
