# delete_storage_backup

Source: https://modulify.ai/docs/api/backups/delete-storage-backup

Permanently deletes one storage backup of a site, leaving the live storage of the site untouched.

- Title: Delete a storage backup
- Scope: `sites:delete`
- Access: Destructive
- Endpoint: `POST /v1/delete_storage_backup`

The archive is destroyed and cannot be recovered, and because a storage backup is the only copy of those files from that moment, that moment is lost entirely. Deleting it does not hand a manual backup slot back: that slot stays counted for a day.

A backup still being archived is refused until it finishes, with `This backup is still being archived!` So are the backup a running restore is restoring and the **Before restore** backup that restore took, with `This backup is being used by a restore that is still running. Delete it when the restore finishes!`, until `get_storage_restore_status` says the restore has ended.

It needs the **Delete projects** permission in the workspace, so a role without it is refused however many times the call is retried. The tool tells the client to confirm the exact archive with you first, and never to delete backups to save space on its own initiative. See [Delete a backup](https://modulify.ai/docs/editor/backups#delete-a-backup).

## Request

Call it with a `POST` to `https://api.modulify.ai/v1/delete_storage_backup`, sending the inputs below as a JSON object. The token needs the `sites:delete` scope.

> **Warning**
>
> This method is marked destructive: it deletes or overwrites data. Check the inputs before you call it, and send an [Idempotency-Key](https://modulify.ai/docs/api/idempotency) header whenever you might retry it.

```bash
curl -X POST https://api.modulify.ai/v1/delete_storage_backup \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"projectId":"PROJECT_ID","backupId":"BACKUP_ID"}'
```

Over MCP, the same method is the [delete_storage_backup tool](https://modulify.ai/docs/mcp/backups/delete-storage-backup).

## Inputs

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | Yes | The site the backup belongs to. |
| `backupId` | string | Yes | The backup to delete, from `list_storage_backups`. |

## Response

Every call answers with the [JSON envelope](https://modulify.ai/docs/api/requests-and-responses#the-response) of `success`, `message`, `data`, `code` and `version`. `data` holds the result described above, and on a method that returns a total, `count` carries it. The [response headers](https://modulify.ai/docs/api/requests-and-responses#headers-on-every-method-call) carry the call's `X-Request-Id` and what is left of your per-minute budget in `X-RateLimit-Limit`, `X-RateLimit-Remaining` and `X-RateLimit-Reset`. [Errors](https://modulify.ai/docs/api/errors) explains every status code a call can answer with.