> ## 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

> Listez, créez et restaurez des snapshots pour les applications et les bases de données, ou listez tous les snapshots du compte.

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

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

Les snapshots existent en trois portées : par application, par base de données et à l'échelle du compte.

## La struct Snapshot

Les méthodes de listage renvoient `[]squarecloud.Snapshot` :

| Champ      | Type     | Description                                                               |
| ---------- | -------- | ------------------------------------------------------------------------- |
| `Name`     | `string` | Nom de l'objet snapshot                                                   |
| `Size`     | `int`    | Taille en octets                                                          |
| `Modified` | `string` | Date de dernière modification                                             |
| `Key`      | `string` | Chaîne de requête signée utilisée pour construire l'URL de téléchargement |

## Snapshots d'applications

### Lister

```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)
}
```

### Créer

`api.CreateApplicationSnapshot(appID)` déclenche un nouveau snapshot et renvoie un `squarecloud.SnapshotCreated` avec l'URL de téléchargement signée.

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

fmt.Println(created.URL) // URL de téléchargement signée
fmt.Println(created.Key)
```

### Restaurer

`api.RestoreApplicationSnapshot(appID, snapshotID, versionID)` ramène l'application à une version antérieure d'un snapshot.

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

## Snapshots de bases de données

La portée base de données reflète celle des applications :

```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)
}
```

## Lister les snapshots à l'échelle du compte

`api.UserSnapshots(scope)` renvoie tous les snapshots que vous possédez à travers toutes vos applications ou bases de données. La portée est l'une des constantes `squarecloud.SnapshotScope*` :

```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>
  Le listage des snapshots à l'échelle du compte nécessite un plan payant actif. Chaque plan a également un **quota quotidien de snapshots** — une fois épuisé, la création échoue avec le code `DAILY_SNAPSHOTS_LIMIT_REACHED`, distinct de l'erreur générique de limitation `KEEP_CALM`.
</Note>
