---
title: "Final backups of deleted projects: one per deleted project, kept 30 days for disaster recovery, newest first, with the host's last report"
method: GET
path: "/operator/final-backups"
tags: ["Operator"]
---

# Final backups of deleted projects: one per deleted project, kept 30 days for disaster recovery, newest first, with the host's last report

`GET /operator/final-backups`

## Request

- Base URL: `https://hostingsurge.com/api/v1`
- URL: `https://hostingsurge.com/api/v1/operator/final-backups`
- Auth: one of:
  - HTTP bearer
  - API key in cookie `__Host-hs_session`

## Query parameters

- `limit` integer
- `offset` integer, nullable

## Response `200`

Final backups

- object
  - `generatedAt` string, required: ISO-8601 timestamp
  - `retentionDays` integer, required
  - `counts` object, required
    - `pending` integer, required
    - `running` integer, required
    - `done` integer, required
    - `failed` integer, required
    - `removed` integer, required
    - `total` integer, required
    - `storedBytes` integer, required
  - `agent` object, nullable, required: when `hs-backup final` on the server last reported; null: it never has (the host script is not installed or its timer is not running)
    - `host` string, required
    - `version` string, required
    - `lastSeenAt` string, required: ISO-8601 timestamp
  - `items` object[], required: newest first, including removed ones (the history)
    - `id` string, uuid, required
    - `organizationId` string, uuid, required
    - `organizationName` string, required: the team's name when the project was deleted
    - `projectId` string, uuid, required
    - `projectName` string, required
    - `projectSlug` string, required
    - `kind` 'app' | 'static' | 'wordpress' | 'service', required
    - `needsData` boolean, required: true: the project had data on the server (a one-click app, a WordPress site, volumes); its stopped engine resources stay until the snapshot exists. false: only the project definition is backed up
    - `state` 'pending' | 'running' | 'done' | 'failed' | 'removed', required: pending: waiting for the host (or between two attempts); running: the host is making the snapshot; done: the snapshot exists and expires at expiresAt; failed: the host gave up after 8 attempts (an operator can retry); removed: the snapshot is forgotten (expired, removed by an operator, or given up before a snapshot existed)
    - `attempts` integer, required
    - `lastError` string, nullable, required
    - `requestedAt` string, required: ISO-8601 timestamp
    - `requestedBy` string, nullable, required: the e-mail address of who deleted the project
    - `snapshotId` string, nullable, required
    - `sizeBytes` integer, nullable, required
    - `details` object, required: what the host put into the snapshot (volumes, database dumps, folders); never file contents
    - `doneAt` string, nullable, required: ISO-8601 timestamp
    - `expiresAt` string, nullable, required: ISO-8601 timestamp
    - `engineDeletedAt` string, nullable, required: when the project's engine resources (app, volumes, service) were deleted
    - `envDeletedAt` string, nullable, required: when the project's environment variables were deleted from the database (their values live on in the snapshot only)
    - `removalRequestedAt` string, nullable, required: ISO-8601 timestamp
    - `removalReason` string, nullable, required
    - `removedAt` string, nullable, required: ISO-8601 timestamp
    - `removedBy` string, nullable, required: "expiry", or "operator:<user id>"

## Other responses

- `403`: Not a platform operator, a bearer-authenticated request, or a session older than 5 minutes (code forbidden; details.reauthenticate is true for the last case)

---

[API](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api.md) · [All operations](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/llms.txt) · [OpenAPI document](https://skmtc.dev/hostingsurge/apis/hostingsurge-platform-api/revisions/4d08337cdff1?raw)
