> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Control de versiones y bloqueo de objetos

> Conservación de versiones anteriores y los modos de retención que impiden que un objeto se elimine.

<a id="versioning" />

## Control de versiones

<Tabs>
  <Tab title="Console">
    La tarjeta **Versioning** en la pestaña **Settings** del bucket muestra el estado actual y ofrece **Enable** y **Suspend**.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    PUT /v1/buckets/{bucket}/versioning
    { "status": "enabled" }
    ```

    `status` toma `enabled` o `suspended` solamente. No hay forma de volver a `disabled` — ese estado significa un bucket que nunca tuvo versionado, no uno que lo tuvo desactivado.
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic storage bucket set-versioning <bucket> --status enabled
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    err := storage.New(cfg).PutBucketVersioning(ctx, bucket,
        &storage.PutBucketVersioningRequest{Status: "enabled"})
    ```
  </Tab>
</Tabs>

Un bucket se encuentra en uno de tres estados:

<ResponseField name="disabled" type="never configured">
  El bucket no tiene historial de versiones. En la API S3 esto se reporta omitiendo el elemento de estado por completo, que es cómo S3 mismo lo reporta.
</ResponseField>

<ResponseField name="enabled" type="every write creates a version">
  Deletes escribe un marcador de eliminación en lugar de eliminar bytes. `GET
      /v1/buckets/{bucket}/object-versions` lista versiones y borra marcadores juntos.
</ResponseField>

<ResponseField name="suspended" type="was on, now off">
  **Se conservan las versiones existentes**; las nuevas escrituras dejan de crearlas. Esto es distinto de `disabled`, y la distinción es importante: suspender no borra el historial.
</ResponseField>

La API de almacenamiento utiliza el vocabulario de minúsculas de la plataforma; el punto final de S3 escribe los mismos estados `Enabled` y `Suspended` Cualquiera de las dos ortografías es aceptada en la entrada.

<Warning>
  Las versiones que ya no necesita no son gratuitas, cuentan contra sus bytes almacenados. Empareja el control de versiones con una regla de ciclo de vida `noncurrent_version_expiration`, o un bucket suspendido mantiene silenciosamente todas las versiones que ha hecho.
</Warning>

<a id="object-lock-and-retention" />

## Bloqueo y retención de objetos

En un bucket creado con `object_lock_enabled`, los objetos individuales pueden llevar un modo de retención y una fecha de retención, establecida en la carga con `X-Amz-Object-Lock-Mode` y `X-Amz-Object-Lock-Retain-Until-Date`, o posteriormente a través del sub-recurso `?retention`.

<Columns cols={2}>
  <Card title="GOBERNANZA" icon="shield">
    La retención puede ser acortada o un objeto bloqueado eliminado, pero solo por un llamador que envía `X-Amz-Bypass-Governance-Retention: true` **y** mantiene `storage:BypassGovernanceRetention` en el objeto.
  </Card>

  <Card title="Cumplimiento" icon="lock">
    Nada lo evita. Una escritura de `?retention` que mueva la fecha antes es rechazada, por lo que la retención solo puede ser extendida.
  </Card>
</Columns>

Una retención legal (`?legal-hold`) es independiente de la fecha de retención: mientras está activada, el objeto no puede eliminarse independientemente de cuándo caduque la retención. Una eliminación bloqueada por cualquiera de ellos se muestra como `403`, no como un no-op silencioso.

En la consola, ambos viven en el objeto mismo: su pestaña **Properties** tiene una tarjeta **Retention** (**Modo**, **Retener hasta**) y un interruptor **Retención legal**, y **Guardar cambios** los aplica juntos. Acortar una fecha de `GOVERNANCE` ofrece el bypass como un interruptor en lugar de hacer que envíe el encabezado. Sin embargo, la página de carga no tiene campos de bloqueo de objetos, por lo que la configuración de retención **en la carga** es solo API.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.