# Arquivos

Modelos que aceitam imagens, vídeo ou áudio aceitam esses arquivos em qualquer uma de três formas. Cada página de modelo identifica seus parâmetros de arquivo (por exemplo, `image`, `images`, `videos`, `audios`).

## 1. Uma URL pública

Qualquer URL `https://` (ou `http://`) que o modelo possa baixar:

```json
{ "image": "https://example.com/photos/product.jpg" }
```

O arquivo deve estar acessível sem cookies ou login e continuar acessível até o início da requisição. Cada página de modelo lista os limites de tamanho e dimensões de seus parâmetros de arquivo.

## 2. Uma URI de dados

Arquivos pequenos podem ser enviados em linha como uma URI `data:` de até 10 MB:

```json
{ "image": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..." }
```

O Base64 torna o corpo cerca de um terço maior que o arquivo, portanto prefira uploads para qualquer arquivo grande.

## 3. Um upload

Para arquivos locais, solicite uma URL de upload, faça `PUT` dos bytes nela e passe o `file_url` retornado ao modelo. Criar a URL de upload é grátis.

```bash 1 · Obter uma URL de upload
curl -X POST "https://api.doitong.com/v1/files" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "product.jpg", "content_type": "image/jpeg", "size": 482113}'
```

```json 201 Created · upload
{
  "object": "upload",
  "upload_url": "https://…signed upload URL…",
  "file_url": "https://content.doitong.com/…/product.jpg",
  "method": "PUT",
  "headers": { "Content-Type": "image/jpeg" },
  "content_type": "image/jpeg",
  "expires_in": 3600,
  "max_bytes": 15728640
}
```

```bash 2 · Fazer upload dos bytes com exatamente os cabeçalhos retornados
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · Usar file_url como entrada do modelo
curl -X POST "https://api.doitong.com/v1/run/{model_id}?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"image": "https://content.doitong.com/…/product.jpg", "prompt": "..."}'
```

- Uploads compatíveis: `.jpg`, `.jpeg`, `.png`, `.webp` (até 15 MB) e `.mp4`, `.mov`, `.webm` (até 200 MB). A extensão define o tipo; `content_type` deve corresponder a ela.
- A URL de upload é válida por uma hora. O `file_url` permanece válido.
- Para áudio, use uma URL pública ou uma URI de dados.

## Arquivos de saída

> [!TIP]
> Os arquivos gerados são copiados para nosso armazenamento e retornados em `outputs[].url` como links em `content.doitong.com`. Você pode passá-los diretamente para outro modelo, por exemplo uma imagem de um modelo text-to-image para um modelo image-to-video.

Você escolhe por quanto tempo os arquivos de saída são mantidos:

- **Para sempre** (`permanent`, o padrão): até você excluí-los, por 100 créditos de API ($ 0,10) por GB por mês, cobrados uma vez por dia do saldo de API (1 GB = 1024³ bytes).
- **7 dias** (`temporary`): grátis, depois excluídos do nosso armazenamento.

Defina o padrão com a chave "Manter arquivos para sempre" no [dashboard](https://doitong.com/developers/dashboard#balance) ou com `PATCH /account/storage`, e substitua por execução com `?storage=temporary` (ou `permanent`):

```bash
curl -X PATCH "https://api.doitong.com/v1/account/storage" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode": "temporary"}'
```

Cada requisição mostra seu próprio `storage` (`mode`, `bytes`, `expires_at`, `expired`). A configuração se aplica a novas requisições; os arquivos que você já mantém para sempre permanecem até serem excluídos com `DELETE /requests/{id}/files` (consulte [Requisições](https://doitong.com/developers/docs/requests#delete-files)). Se o saldo de API não puder pagar pelo armazenamento, você receberá um e-mail e terá 30 dias para fazer uma recarga antes que os arquivos mantidos se tornem temporários.
