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

# Snapshot

> Elenca, crea e ripristina gli snapshot di applicazioni e database, oppure elenca ogni snapshot dell'account.

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

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

Gli snapshot esistono in tre ambiti: per applicazione, per database e a livello di account.

## La struct Snapshot

I metodi di elenco restituiscono `[]squarecloud.Snapshot`:

| Campo      | Tipo     | Descrizione                                                |
| ---------- | -------- | ---------------------------------------------------------- |
| `Name`     | `string` | Nome dell'oggetto snapshot                                 |
| `Size`     | `int`    | Dimensione in byte                                         |
| `Modified` | `string` | Data dell'ultima modifica                                  |
| `Key`      | `string` | Query string firmata usata per costruire l'URL di download |

## Snapshot delle applicazioni

### Elencare

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

### Creare

`api.CreateApplicationSnapshot(appID)` genera un nuovo snapshot e restituisce un `squarecloud.SnapshotCreated` con l'URL di download firmato.

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

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

### Ripristinare

`api.RestoreApplicationSnapshot(appID, snapshotID, versionID)` riporta l'applicazione a una versione precedente dello snapshot.

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

## Snapshot dei database

L'ambito dei database rispecchia quello delle applicazioni:

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

## Elencare gli snapshot a livello di account

`api.UserSnapshots(scope)` restituisce ogni snapshot che possiedi tra tutte le tue applicazioni o database. L'ambito è una delle costanti `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>
  L'elenco degli snapshot a livello di account richiede un piano a pagamento attivo. Ogni piano ha inoltre una **quota giornaliera di snapshot** — una volta esaurita, la creazione fallisce con il codice `DAILY_SNAPSHOTS_LIMIT_REACHED`, distinto dal generico errore di rate limit `KEEP_CALM`.
</Note>
