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

# Controle de versão e bloqueio de objetos

> Manter versões anteriores e os modos de retenção que impedem que um objeto seja excluído.

<a id="versioning" />

## Versionamento

<Tabs>
  <Tab title="Console">
    O cartão **Versioning** na guia **Settings** do bucket mostra o estado atual e oferece **Enable** e **Suspend**.
  </Tab>

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

    `status` leva `enabled` ou `suspended` somente. Não há como voltar para `disabled` — esse estado significa um bucket que nunca teve controle de versão, não um que o teve desligado.
  </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>

Um bucket está em um dos três estados:

<ResponseField name="disabled" type="never configured">
  O bucket não tem histórico de versão. Na API S3 isso é relatado omitindo o elemento status completamente, que é como o próprio S3 o relata.
</ResponseField>

<ResponseField name="enabled" type="every write creates a version">
  Deletes escreve um marcador de exclusão em vez de remover bytes. `GET
      /v1/buckets/{bucket}/object-versions` lista versões e exclui marcadores juntos.
</ResponseField>

<ResponseField name="suspended" type="was on, now off">
  **As versões existentes são mantidas**; novas gravações param de criá-las. Isso é diferente de `disabled`, e a distinção importa: suspender não apaga o histórico.
</ResponseField>

A API de armazenamento usa o vocabulário de letras minúsculas da plataforma; o endpoint do S3 escreve os mesmos estados `Enabled` e `Suspended` em seu XML. Qualquer ortografia é aceita na entrada.

<Warning>
  As versões que você não precisa mais não são livres — elas contam contra seus bytes armazenados. Emparelhe o versionamento com uma regra de ciclo de vida `noncurrent_version_expiration`, ou um bucket suspenso mantém silenciosamente todas as versões que já foram feitas.
</Warning>

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

## Bloqueio e retenção de objetos

Em um bucket criado com `object_lock_enabled`, objetos individuais podem carregar um modo de retenção e uma data de retenção, definidos no upload com `X-Amz-Object-Lock-Mode` e `X-Amz-Object-Lock-Retain-Until-Date`, ou posteriormente através do sub-recurso `?retention`.

<Columns cols={2}>
  <Card title="GOVERNANÇA" icon="shield">
    A retenção pode ser encurtada ou um objeto bloqueado excluído, mas somente por um chamador que envia `X-Amz-Bypass-Governance-Retention: true` **and** mantém `storage:BypassGovernanceRetention` no objeto.
  </Card>

  <Card title="CONFORMIDADE" icon="lock">
    Nada o ignora. Uma gravação de `?retention` que moveria a data mais cedo é recusada, então a retenção só pode ser estendida.
  </Card>
</Columns>

Uma retenção legal (`?legal-hold`) é independente da data de retenção: enquanto estiver ativado, o objeto não pode ser excluído, independentemente de quando a retenção expirar.Uma exclusão bloqueada por qualquer um deles aparece como `403`Não é uma operação silenciosa.

No console, ambos vivem no próprio objeto: sua guia **Properties** tem um cartão **Retention** (**Modo**, **Reter até**) e um interruptor **Retenção legal**, e **Salvar alterações** aplica-os juntos. Encurtar uma data `GOVERNANCE` oferece o bypass como uma opção em vez de fazer você enviar o cabeçalho. A página de upload não tem campos de bloqueio de objeto, portanto, a configuração de retenção **no upload** é apenas para API.


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