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

# Crear snapshot

> Realiza un snapshot de tu aplicación. Tiene un límite de tasa de 1 solicitud cada 5 segundos.

<Warning>Cada cuenta puede realizar hasta (RAM / 256) \* 2 snapshots cada 24 horas.</Warning>

<ParamField header="Authorization" type="string" placeholder="API Key" required>
  La clave de API de tu cuenta. Puedes encontrarla en la [configuración de tu cuenta](https://squarecloud.app/es/account/security).
</ParamField>

### Parámetros

<ParamField path="app_id" type="string" placeholder="Application ID" required>
  El ID de la aplicación. Puedes encontrarlo en la URL del panel de tu aplicación.
</ParamField>

### Comportamiento de soft deadline

Esta ruta sigue un modelo de **soft deadline**: ya no siempre responde de forma síncrona.

* Si el snapshot termina en **\~90 segundos**, la ruta responde con `200 success` y una URL de descarga firmada (válida por 30 días), exactamente como antes.
* Si el snapshot tarda más de **\~90 segundos** en generarse, la ruta responde **de inmediato** con `202` y el código `SNAPSHOT_PROCESSING`. **Esto no es un fallo.** El snapshot sigue generándose en segundo plano y aparecerá por sí solo en el [listado de snapshots](/es/api-reference/endpoint/apps/snapshots/list), normalmente en \~2 minutos. Este es el comportamiento esperado para aplicaciones grandes.

<Warning>
  No uses este endpoint `POST` como mecanismo de sondeo. Para verificar si un snapshot en `SNAPSHOT_PROCESSING` ha finalizado, usa el endpoint [Listar snapshots](/es/api-reference/endpoint/apps/snapshots/list) (`GET`), **no** otro `POST`. Volver a hacer un `POST` después de que el snapshot haya terminado inicia un snapshot completamente nuevo desde cero.
</Warning>

El cliente debe ramificar según la respuesta de la siguiente manera:

| Respuesta                                               | Significado                        | Qué hacer                                                                                                                                               |
| ------------------------------------------------------- | ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `status === "success"`                                  | El snapshot está listo.            | Usa la `url` para descargarlo.                                                                                                                          |
| `status === "error"` y `code === "SNAPSHOT_PROCESSING"` | El snapshot aún se está generando. | Espera \~2 minutos y luego confirma mediante [Listar snapshots](/es/api-reference/endpoint/apps/snapshots/list) (`GET`). **No** vuelvas a hacer `POST`. |
| `status === "error"` con cualquier otro `code`          | Fallo real.                        | Maneja el error (ver abajo).                                                                                                                            |

### Respuesta

<ResponseField name="status" type="string">
  Indica si la llamada fue exitosa. `success` si fue exitosa, `error` si no.
</ResponseField>

<ResponseField name="response" type="object">
  El contenido de la respuesta. Presente solo cuando `status` es `success`.

  <Expandable title="Alternar objeto">
    <ResponseField name="url" type="string">
      La URL para descargar el snapshot de tu aplicación.
    </ResponseField>

    <ResponseField name="key" type="string">
      La clave para descargar el snapshot de tu aplicación.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="SNAPSHOT_PROCESSING" type="202">
  Se devuelve cuando el snapshot supera el soft deadline de \~90 segundos. El snapshot sigue generándose en segundo plano y aparecerá por sí solo en el listado de snapshots, normalmente en \~2 minutos. No es un error: espera y confirma mediante el endpoint de listado `GET`.
</ResponseField>

### Errores

Una solicitud de snapshot puede ser rechazada con `429 Too Many Requests`. Usa el campo `code` para distinguir los dos casos:

<ResponseField name="KEEP_CALM" type="429">
  Enfriamiento a corto plazo: alcanzaste el límite por usuario (1 solicitud / 5 s) o por aplicación (1 solicitud / 180 s). Espera un poco y reintenta en breve.
</ResponseField>

<ResponseField name="DAILY_SNAPSHOTS_LIMIT_REACHED" type="429">
  Cuota diaria alcanzada: la cuenta agotó la asignación diaria de snapshots de su plan ((RAM / 256) × 2 por cada 24 h). La cuota se libera a medida que avanza la ventana móvil de 24 horas; para una asignación diaria mayor, mejora el plan.
</ResponseField>

<ResponseExample>
  ```json 200 Success theme={null}
  {
      "status": "success",
      "response": {
          "url": "https://snapshots.squarecloud.app/applications/23457145698959364/a23d130fcc9ddaf2d288ae9599a4292c32.zip?AWSAccessKeyId=i06Xdad2dRD74Pm8Xly&Expires=1753081182&Signature=riWPedawcsouRAPGU5n3kGHnWoOuw%3D",
          "key": "AWSAccessKeyId=i06Xdad2dRD74Pm8Xly&Expires=1753081182&Signature=riWPedawcsouRAPGU5n3kGHnWoOuw%3D"
      }
  }
  ```

  ```json 202 SNAPSHOT_PROCESSING theme={null}
  {
    "status": "error",
    "code": "SNAPSHOT_PROCESSING"
  }
  ```

  ```json 429 KEEP_CALM theme={null}
  {
    "status": "error",
    "code": "KEEP_CALM",
    "message": "You already requested a snapshot recently. Please wait a minute before trying again. 1r/5s"
  }
  ```

  ```json 429 DAILY_SNAPSHOTS_LIMIT_REACHED theme={null}
  {
    "status": "error",
    "code": "DAILY_SNAPSHOTS_LIMIT_REACHED",
    "message": "You are being rate limited for daily snapshots. 8r/24h"
  }
  ```
</ResponseExample>
