# Fichiers

Les modèles qui acceptent des images, de la vidéo ou de l'audio les prennent sous l'une des trois formes suivantes. 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 cookie 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 sous forme d'URI `data:` de 10 MB maximum :

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

Base64 augmente la taille du 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, envoyez-y les octets avec `PUT`, puis transmettez au modèle le `file_url` renvoyé. 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 MB) et `.mp4`, `.mov`, `.webm` (jusqu'à 200 MB). 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 provenant d'un modèle texte-vers-image vers un modèle image-vers-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 et par mois, facturés une fois par jour sur le solde API (1 Go = 1024³ octets).
- **7 jours** (`temporary`) : gratuit, puis supprimé de notre stockage.

Définissez la valeur par défaut avec le bouton « Conserver les fichiers indéfiniment » du [tableau de bord](https://doitong.com/developers/dashboard#balance) ou avec `PATCH /account/storage`, et 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 e-mail et disposez de 30 jours pour recharger votre solde avant que les fichiers conservés ne deviennent temporaires.
