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

# Copiar ou mover um objeto de blob

> Copia um objeto de blob para um novo caminho, ou o move. Mover mantém o ID; copiar cria um novo objeto que conta no armazenamento.

Copia um objeto de blob para um novo `path` na mesma conta, ou o move quando `move` é `true`. Uma movimentação mantém o `id` do objeto e altera apenas o `path`, então não aumenta o armazenamento. Uma cópia cria um novo objeto com um novo `id`, e os seus bytes contam para a cota.

**Escopo:** `blob:write`.

**source** `string` *required*

ID do objeto a ser copiado ou movido.

**path** `string` *required*

Caminho de destino, com as mesmas regras de [Enviar em uma requisição](https://docs.vertracloud.app/pt-br/api-reference/endpoint/blob/objects/upload.md).

**move** `boolean`

`true` move o objeto e mantém o seu ID. Padrão `false`: cópia.

**overwrite** `boolean`

Substitui um objeto que já existe em `path`. Padrão `false`.

**random\_suffix** `boolean`

Insere um sufixo aleatório antes da extensão. Padrão `false`.

**rename\_on\_conflict** `boolean`

Somente em cópias: quando `path` está ocupado, inclusive pelo próprio objeto de origem, salva a cópia como `nome-1.ext`, `nome-2.ext` e assim por diante, em vez de retornar `BLOB_OBJECT_ALREADY_EXISTS`. Padrão `false`. Não pode ser combinado com `overwrite` e é ignorado em uma movimentação.

**visibility** `string`

`public` ou `private` para o novo objeto. Padrão: a visibilidade do objeto de origem.

**workspace\_id** `string`

O ID do workspace, quando o blob pertence a um workspace. A chamada atua sobre o blob do proprietário do workspace e exige a permissão `blob:read` do workspace (`blob:manage` nas rotas que alteram dados). Deixe de fora para atuar sobre o seu próprio blob.

### Exemplo de requisição

```bash theme={null}
curl -X POST "https://blob.vertracloud.app/v1/objects/copy" \
  -H "Authorization: Bearer $VERTRA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"source":"0b6f7c1e-3d2a-4f5b-9a8c-1d2e3f4a5b6c","path":"backup/logo.png"}'
```

### Resposta

**response** `object`

O objeto no novo caminho.

**propriedades**

**id** `string`

ID estável do objeto. Nunca muda, mesmo quando o caminho, a visibilidade ou a expiração mudam.

**path** `string`

Caminho completo dentro da conta, por exemplo `images/avatars/joao.png`.

**size** `number`

Tamanho em bytes.

**content\_type** `string`

Tipo MIME, derivado no servidor a partir da extensão do arquivo.

**etag** `string`

Entity tag do conteúdo armazenado.

**sha256** `string | null`

SHA-256 do conteúdo em hexadecimal, quando o upload enviou um checksum. `null` caso contrário.

**visibility** `string`

`public` (legível pela URL pública) ou `private` (precisa de um link temporário ou de um compartilhamento).

**url** `string | null`

URL pública. `null` enquanto o objeto é privado.

**cache\_control** `string | null`

`immutable`, `max-age=<seconds>` ou `no-cache` (`no-cache` exige Enterprise-26 ou superior). `null` significa o padrão.

**content\_disposition** `string`

`inline` (exibido pelo navegador) ou `attachment` (baixado). HTML, SVG e XML são sempre `attachment`.

**filename** `string | null`

Nome sugerido no download. `null` usa o último segmento de `path`.

**metadata** `object`

Até 5 chaves, cada uma `[a-z0-9-]{1,64}`, 512 bytes no total. Enterprise-12 ou superior; `{}` nos demais planos.

**expires\_at** `string | null`

Quando o objeto é excluído, em timestamp ISO 8601. `null` significa sem expiração.

**created\_at** `string`

Data de criação em ISO 8601.

**updated\_at** `string`

Data da última alteração em ISO 8601.

```json Response theme={null}
{
  "response": {
    "id": "0b6f7c1e-3d2a-4f5b-9a8c-1d2e3f4a5b6c",
    "path": "images/logo.png",
    "size": 48213,
    "content_type": "image/png",
    "etag": "9b2cf535f27731c974343645a3085d39",
    "sha256": null,
    "visibility": "public",
    "url": "https://blob.vertracloud.dev/k7p2m9x4qa/images/logo.png",
    "cache_control": null,
    "content_disposition": "inline",
    "filename": null,
    "metadata": {},
    "expires_at": null,
    "created_at": "2026-10-14T12:00:00.000Z",
    "updated_at": "2026-10-14T12:00:00.000Z"
  }
}
```

### Respostas de erro

**code** `string`

O código de erro que indica o motivo da falha. Valores possíveis:

* `AUTH_TOKEN_MISSING` (`401`): o cabeçalho `Authorization` não foi enviado.
* `API_KEY_INVALID` (`401`): a chave de API não existe, foi revogada ou o segredo não confere.
* `API_KEY_SCOPE_DENIED` (`403`): a chave não tem o escopo que esta rota exige (`blob:read` ou `blob:write`); `details.required` informa qual.
* `WORKSPACE_PERMISSION_DENIED` (`403`): somente com `workspace_id`: você não é membro, ou o seu papel não tem a permissão de blob.
* `WORKSPACE_NOT_FOUND` (`404`): somente com `workspace_id`: não existe workspace com esse ID, ou você não é membro.
* `BLOB_NAMESPACE_SUSPENDED` (`403`): o armazenamento de blob da conta está suspenso, ou o plano expirou. Uploads e outras gravações são recusados desde o início do período de carência de 72 horas.
* `VALIDATION_ERROR` (`400`): um parâmetro ou campo do corpo falhou na validação. `details.path` informa o campo.
* `BLOB_OBJECT_NOT_FOUND` (`404`): o `source` não existe nesta conta.
* `BLOB_OBJECT_ALREADY_EXISTS` (`409`): `path` está ocupado e `overwrite` não é `true`.
* `STORAGE_QUOTA_EXCEEDED` (`403`): uma cópia ultrapassaria a cota de blob do plano. Movimentações não aumentam o armazenamento, então não são bloqueadas por ele.
* `BLOCKED_FILE_TYPE` (`422`): a extensão de destino está bloqueada ou não é permitida pela regra da pasta.

```json Error Response (401) theme={null}
{
  "code": "AUTH_TOKEN_MISSING"
}
```

```json Error Response (403) theme={null}
{
  "code": "API_KEY_SCOPE_DENIED"
}
```

```json Error Response (404) theme={null}
{
  "code": "WORKSPACE_NOT_FOUND"
}
```

```json Error Response (400) theme={null}
{
  "code": "VALIDATION_ERROR"
}
```

```json Error Response (409) theme={null}
{
  "code": "BLOB_OBJECT_ALREADY_EXISTS"
}
```

```json Error Response (422) theme={null}
{
  "code": "BLOCKED_FILE_TYPE"
}
```


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