> ## Documentation Index
> Fetch the complete documentation index at: https://docs.squarecloud.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Snapshots

> Snapshots für Anwendungen und Datenbanken auflisten, erstellen und wiederherstellen oder jeden Snapshot im Konto auflisten.

```go theme={null}
client := rest.NewClient(os.Getenv("SQUARECLOUD_API_KEY"))
defer client.Close()

api := rest.New(client)
```

Snapshots gibt es in drei Geltungsbereichen: pro Anwendung, pro Datenbank und kontoweit.

## Das Snapshot-Struct

Auflistende Methoden geben `[]squarecloud.Snapshot` zurück:

| Feld       | Typ      | Beschreibung                                       |
| ---------- | -------- | -------------------------------------------------- |
| `Name`     | `string` | Name des Snapshot-Objekts                          |
| `Size`     | `int`    | Größe in Bytes                                     |
| `Modified` | `string` | Datum der letzten Änderung                         |
| `Key`      | `string` | Signierter Query-String zum Bauen der Download-URL |

## Anwendungs-Snapshots

### Auflisten

```go theme={null}
snapshots, err := api.GetApplicationSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

for _, snap := range snapshots {
	fmt.Println(snap.Name, snap.Size, snap.Modified)
}
```

### Erstellen

`api.CreateApplicationSnapshot(appID)` stößt einen frischen Snapshot an und gibt einen `squarecloud.SnapshotCreated` mit der signierten Download-URL zurück.

```go theme={null}
created, err := api.CreateApplicationSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}

fmt.Println(created.URL) // signed download URL
fmt.Println(created.Key)
```

### Wiederherstellen

`api.RestoreApplicationSnapshot(appID, snapshotID, versionID)` setzt die Anwendung auf eine frühere Snapshot-Version zurück.

```go theme={null}
err := api.RestoreApplicationSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000",
	"abc123def4567890",
)
if err != nil {
	panic(err)
}
```

## Datenbank-Snapshots

Der Datenbank-Bereich spiegelt den Anwendungs-Bereich wider:

```go theme={null}
snapshots, err := api.GetDatabaseSnapshots("abc123def456abc123def456")
if err != nil {
	panic(err)
}

created, err := api.CreateDatabaseSnapshot("abc123def456abc123def456")
if err != nil {
	panic(err)
}
fmt.Println(created.URL)

err = api.RestoreDatabaseSnapshot(
	"abc123def456abc123def456",
	"00000000-0000-4000-8000-000000000000_mongo",
	"v1",
)
if err != nil {
	panic(err)
}
```

## Snapshots kontoweit auflisten

`api.UserSnapshots(scope)` gibt jeden Snapshot zurück, den du über alle deine Anwendungen oder Datenbanken hinweg besitzt. Der Scope ist eine der `squarecloud.SnapshotScope*`-Konstanten:

```go theme={null}
appSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeApplications)
if err != nil {
	panic(err)
}

dbSnapshots, err := api.UserSnapshots(squarecloud.SnapshotScopeDatabases)
if err != nil {
	panic(err)
}
```

<Note>
  Die kontoweite Snapshot-Auflistung erfordert einen aktiven kostenpflichtigen Plan. Jeder Plan hat außerdem ein **tägliches Snapshot-Kontingent** — ist es aufgebraucht, schlägt die Erstellung mit dem Code `DAILY_SNAPSHOTS_LIMIT_REACHED` fehl, getrennt vom generischen Rate-Limit-Fehler `KEEP_CALM`.
</Note>
