# Fichiers

Les modèles qui acceptent des images, des vidéos ou de l’audio les prennent sous l’une de trois formes. Chaque page de modèle indique ses paramètres de fichier (par exemple `image`, `images`, `videos`, `audios`).

## 1. Une URL publique

Toute URL `https://` (ou `http://`) que le modèle peut télécharger :

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

Le fichier doit être accessible sans témoins ni connexion et le rester jusqu’au démarrage de la requête. Chaque page de modèle répertorie les limites de taille et de dimensions de ses paramètres de fichier.

## 2. Un URI de données

Les petits fichiers peuvent être intégrés directement sous forme d’URI `data:` de 10 Mo maximum :

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

Le Base64 agrandit le corps d’environ un tiers par rapport au fichier; préférez donc les téléversements pour les fichiers volumineux.

## 3. Un téléversement

Pour les fichiers locaux, demandez une URL de téléversement, utilisez `PUT` pour y envoyer les octets, puis transmettez le `file_url` renvoyé au modèle. La création de l’URL de téléversement est gratuite.

```bash 1 · Obtenir une URL de téléversement
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 · téléversement
{
  "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 · Téléverser les octets avec exactement les en-têtes renvoyés
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · Utiliser file_url comme entrée du modèle
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": "..."}'
```

- Téléversements pris en charge : `.jpg`, `.jpeg`, `.png`, `.webp` (jusqu’à 15 Mo) et `.mp4`, `.mov`, `.webm` (jusqu’à 200 Mo). L’extension définit le type; `content_type` doit lui correspondre.
- L’URL de téléversement est valide pendant une heure. Le `file_url` reste valide.
- Pour l’audio, utilisez une URL publique ou un URI de données.

## Fichiers de sortie

> [!TIP]
> Les fichiers générés sont copiés dans notre stockage et renvoyés dans `outputs[].url` sous forme de liens vers `content.doitong.com`. Vous pouvez les transmettre directement à un autre modèle, par exemple une image produite par un modèle texte-image à un modèle image-vidéo.

Vous choisissez la durée de conservation des fichiers de sortie :

- **Indéfiniment** (`permanent`, par défaut) : jusqu’à leur suppression, pour 100 crédits API (0,10 $) par Go par mois, facturés une fois par jour à partir du solde API (1 Go = 1024³ octets).
- **7 jours** (`temporary`) : gratuit, puis suppression du stockage.

Définissez la valeur par défaut avec le bouton « Conserver les fichiers pour toujours » du [tableau de bord](https://doitong.com/developers/dashboard#balance) ou avec `PATCH /account/storage`, puis remplacez-la pour chaque exécution avec `?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"}'
```

Chaque requête affiche son propre `storage` (`mode`, `bytes`, `expires_at`, `expired`). Le réglage s’applique aux nouvelles requêtes; les fichiers que vous conservez déjà indéfiniment le restent jusqu’à leur suppression avec `DELETE /requests/{id}/files` (voir [Requêtes](https://doitong.com/developers/docs/requests#delete-files)). Si le solde API ne peut pas payer le stockage, vous recevez un courriel et disposez de 30 jours pour effectuer une recharge avant que les fichiers conservés deviennent temporaires.
