# Archivos

Los modelos que aceptan imágenes, video o audio los admiten en cualquiera de estas tres formas. Cada página de modelo indica sus parámetros de
archivos (por ejemplo, `image`, `images`, `videos`, `audios`).

## 1. Una URL pública

Cualquier URL `https://` (o `http://`) que el modelo pueda descargar:

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

El archivo debe estar disponible sin cookies ni inicio de sesión y seguir disponible hasta que comience la solicitud. Cada página de modelo
enumera los límites de tamaño y dimensiones de sus parámetros de archivo.

## 2. Un URI de datos

Los archivos pequeños pueden incluirse directamente como un URI `data:` de hasta 10 MB:

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

Base64 hace que el cuerpo sea aproximadamente un tercio más grande que el archivo, así que prefiere cargas para cualquier archivo grande.

## 3. Una carga

Para archivos locales, solicita una URL de carga, haz `PUT` de los bytes allí y pasa el `file_url` devuelto al modelo.
Crear la URL de carga es gratis.

```bash 1 · Obtener una URL de carga
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 · carga
{
  "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 · Cargar los bytes exactamente con los encabezados devueltos
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · Usar file_url como entrada del 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": "..."}'
```

- Cargas compatibles: `.jpg`, `.jpeg`, `.png`, `.webp` (hasta 15 MB) y `.mp4`, `.mov`, `.webm` (hasta 200 MB).
  La extensión define el tipo; `content_type` debe coincidir.
- La URL de carga es válida durante una hora. `file_url` permanece válida.
- Para audio, usa una URL pública o un URI de datos.

## Archivos de salida

> [!TIP]
> Los archivos generados se copian a nuestro almacenamiento y se devuelven en `outputs[].url` como enlaces a `content.doitong.com`. Puedes
> pasarlos directamente a otro modelo, por ejemplo una imagen de un modelo de texto a imagen a un modelo de imagen a video.

Tú eliges cuánto tiempo se conservan los archivos de salida:

- **Para siempre** (`permanent`, el predeterminado): hasta que los elimines, por 100 créditos de API
  ($0.10) por GB al mes, cobrados una vez al día del saldo de API (1 GB = 1024³ bytes).
- **7 días** (`temporary`): gratis; luego se eliminan de nuestro almacenamiento.

Establece el valor predeterminado con el interruptor "Conservar archivos para siempre" en el [panel](https://doitong.com/developers/dashboard#balance) o con
`PATCH /account/storage`, y anúlalo por ejecución con `?storage=temporary` (o `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 solicitud muestra su propio `storage` (`mode`, `bytes`, `expires_at`, `expired`). La configuración se aplica a las nuevas solicitudes;
los archivos que ya conservas para siempre permanecen hasta que los elimines con `DELETE /requests/{id}/files` (consulta
[Solicitudes](https://doitong.com/developers/docs/requests#delete-files)). Si el saldo de API no puede pagar el almacenamiento, recibes un correo
y tienes 30 días para hacer una recarga antes de que los archivos conservados se vuelvan temporales.
