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

# Gestión de snapshots

> En esta sección, aprenderás a crear, obtener y restaurar snapshots de tus aplicaciones y bases de datos usando el SDK de Python.

[Client]: client

[Application]: client#application

Los snapshots son copias de seguridad de tu aplicación o base de datos en un momento específico. Te permiten restaurar tu aplicación o base de datos a un estado anterior si es necesario. Square Cloud ofrece snapshots ilimitados con copias de seguridad diarias automáticas.

## Crear un snapshot de una aplicación

`client.snapshot` devuelve un objeto `Snapshot`.

<Tabs>
  <Tab title="Usando Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshot = await client.snapshot(app_id='application_id')
        
        print(snapshot.url)  # Download URL for the snapshot
        print(snapshot.key)  # Snapshot key identifier
    ```
  </Tab>

  <Tab title="Usando Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshot = await app.snapshot()
        
        print(snapshot.url)  # Download URL for the snapshot
        print(snapshot.key)  # Snapshot key identifier
    ```
  </Tab>
</Tabs>

## Descargar un snapshot

El objeto `Snapshot` proporciona un método para descargar el snapshot como un archivo zip.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    snapshot = await client.snapshot(app_id='application_id')
    
    # Download snapshot to current directory
    zip_file = await snapshot.download()
    
    # Download snapshot to specific directory
    zip_file = await snapshot.download(path='./backups')
```

## Listar los snapshots de una aplicación

`client.all_app_snapshots` devuelve una lista de objetos `SnapshotInfo`.

<Tabs>
  <Tab title="Usando Client">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        snapshots = await client.all_app_snapshots(app_id='application_id')
        
        for snapshot in snapshots:
            print(f"Snapshot ID: {snapshot.id}")
            print(f"  Size: {snapshot.size}")
            print(f"  Created at: {snapshot.created_at}")
    ```
  </Tab>

  <Tab title="Usando Application">
    ```python theme={null}
    import squarecloud as square

    client = square.Client(api_key='API_KEY')

    async def example():
        app = await client.app('application_id')
        snapshots = await app.all_snapshots()
        
        for snapshot in snapshots:
            print(f"Snapshot ID: {snapshot.id}")
            print(f"  Size: {snapshot.size}")
            print(f"  Created at: {snapshot.created_at}")
    ```
  </Tab>
</Tabs>

## Restaurar un snapshot

`client.restore_snapshot` devuelve un objeto `Response`. Puedes restaurar snapshots tanto de aplicaciones como de bases de datos.

```python theme={null}
import squarecloud as square

client = square.Client(api_key='API_KEY')

async def example():
    # Restore an application snapshot
    response = await client.restore_snapshot(
        application_type='app',
        app_id='application_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Snapshot restored: {response.status}")
    
    # Restore a database snapshot
    response = await client.restore_snapshot(
        application_type='database',
        app_id='database_id',
        snapshot_id='snapshot_id',
        version_id='version_id'
    )
    
    print(f"Database snapshot restored: {response.status}")
```

## Estructuras de datos de los snapshots

### Snapshot

El objeto `Snapshot` representa un snapshot creado:

| Propiedad | Tipo  | Descripción                      |
| --------- | ----- | -------------------------------- |
| `url`     | `str` | URL de descarga del snapshot     |
| `key`     | `str` | Identificador único del snapshot |

### SnapshotInfo

El objeto `SnapshotInfo` representa los metadatos de un snapshot:

| Propiedad    | Tipo  | Descripción                                         |
| ------------ | ----- | --------------------------------------------------- |
| `id`         | `str` | Identificador único del snapshot                    |
| `size`       | `str` | Tamaño del snapshot                                 |
| `created_at` | `str` | Marca de tiempo de creación del snapshot (ISO 8601) |

## Buenas prácticas

* **Copias de seguridad automáticas**: Square Cloud crea automáticamente snapshots diarios de tus aplicaciones y bases de datos.
* **Snapshots ilimitados**: Crea tantos snapshots manuales como necesites sin costes adicionales.
* **Periodo de retención**: Los snapshots se conservan durante 30 días.
* **Tiempo de restauración**: El proceso de restauración tarda aproximadamente 60 segundos para garantizar que todos los datos estén estables.
* **Pruebas**: Antes de restaurar un snapshot, considera crear una nueva aplicación o base de datos para probar primero el proceso de restauración.

## Límites de los snapshots

* **Snapshots diarios por plan**: Cada plan puede generar `(RAM / 256) * 2` snapshots por día
  * Ejemplo: plan Hobby con 2048MB = 16 snapshots diarios (480 al mes)
* **Retención**: Todos los snapshots se conservan durante los últimos 30 días
* **Coste**: Sin coste adicional por los snapshots
