# File

I modelli che accettano immagini, video o audio li supportano in tre formati. Ogni pagina del modello indica i relativi parametri
file (ad esempio `image`, `images`, `videos`, `audios`).

## 1. Un URL pubblico

Qualsiasi URL `https://` (o `http://`) che il modello possa scaricare:

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

Il file deve essere raggiungibile senza cookie o accesso e restare raggiungibile fino all'avvio della richiesta. Ogni pagina del modello
elenca i limiti di dimensione e risoluzione dei relativi parametri file.

## 2. Un URI dati

I file piccoli possono essere inclusi come URI `data:` fino a 10 MB:

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

Base64 rende il corpo circa un terzo più grande del file, quindi preferisci gli upload per qualsiasi file di grandi dimensioni.

## 3. Un upload

Per i file locali, richiedi un URL di upload, esegui `PUT` dei byte su quell'URL e passa al modello il `file_url` restituito.
La creazione dell'URL di upload è gratuita.

```bash 1 · Ottenere un URL di 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 · Caricare i byte con esattamente gli header restituiti
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · Usare file_url come input del modello
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": "..."}'
```

- Upload supportati: `.jpg`, `.jpeg`, `.png`, `.webp` (fino a 15 MB) e `.mp4`, `.mov`, `.webm` (fino a 200 MB).
  L'estensione imposta il tipo; `content_type` deve corrispondere.
- L'URL di upload è valido per un'ora. Il `file_url` resta valido.
- Per l'audio, usa un URL pubblico o un URI dati.

## File di output

> [!TIP]
> I file generati vengono copiati nella nostra archiviazione e restituiti in `outputs[].url` come link su `content.doitong.com`. Puoi
> passarli direttamente a un altro modello, ad esempio un'immagine da un modello text-to-image a un modello image-to-video.

Scegli tu per quanto tempo conservare i file di output:

- **Per sempre** (`permanent`, il predefinito): fino a quando li elimini, per 100 crediti API
  (0,10 $) per GB al mese, addebitati una volta al giorno dal saldo API (1 GB = 1024³ byte).
- **7 giorni** (`temporary`): gratuito, poi eliminato dalla nostra archiviazione.

Imposta il valore predefinito con l'interruttore "Conserva i file per sempre" nella [dashboard](https://doitong.com/developers/dashboard#balance) o con
`PATCH /account/storage`, e sostituiscilo per ogni esecuzione 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"}'
```

Ogni richiesta mostra il proprio `storage` (`mode`, `bytes`, `expires_at`, `expired`). L'impostazione si applica alle nuove richieste;
i file che conservi già per sempre restano tali finché non li elimini con `DELETE /requests/{id}/files` (vedi
[Richieste](https://doitong.com/developers/docs/requests#delete-files)). Se il saldo API non può pagare l'archiviazione, ricevi un'email
e hai 30 giorni per effettuare una ricarica prima che i file conservati diventino temporanei.
