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

> Lista, crea y restaura snapshots de aplicaciones y bases de datos, o lista todos los snapshots de la cuenta.

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

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

Los snapshots existen en tres ámbitos: por aplicación, por base de datos y a nivel de cuenta.

## El struct Snapshot

Los métodos de listado devuelven `[]squarecloud.Snapshot`:

| Campo      | Tipo     | Descripción                                                       |
| ---------- | -------- | ----------------------------------------------------------------- |
| `Name`     | `string` | Nombre del objeto de snapshot                                     |
| `Size`     | `int`    | Tamaño en bytes                                                   |
| `Modified` | `string` | Fecha de última modificación                                      |
| `Key`      | `string` | Query string firmado que se usa para construir la URL de descarga |

## Snapshots de aplicaciones

### Listado

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

### Creación

`api.CreateApplicationSnapshot(appID)` dispara un snapshot nuevo y devuelve un `squarecloud.SnapshotCreated` con la URL de descarga firmada.

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

fmt.Println(created.URL) // URL de descarga firmada
fmt.Println(created.Key)
```

### Restauración

`api.RestoreApplicationSnapshot(appID, snapshotID, versionID)` revierte la aplicación a una versión anterior de snapshot.

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

## Snapshots de bases de datos

El ámbito de bases de datos refleja el de aplicaciones:

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

## Listado de snapshots a nivel de cuenta

`api.UserSnapshots(scope)` devuelve todos los snapshots que posees en todas tus aplicaciones o bases de datos. El ámbito es una de las 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>
  El listado de snapshots a nivel de cuenta requiere un plan de pago activo. Cada plan también tiene una **cuota diaria de snapshots** — una vez agotada, la creación falla con el código `DAILY_SNAPSHOTS_LIMIT_REACHED`, distinto del error genérico de rate limit `KEEP_CALM`.
</Note>
