# File

Model yang menerima gambar, video, atau audio dapat menerima ketiganya dalam salah satu dari tiga bentuk. Setiap halaman model menandai parameter file-nya (misalnya `image`, `images`, `videos`, `audios`).

## 1. URL publik

URL `https://` (atau `http://`) apa pun yang dapat diunduh oleh model:

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

File harus dapat diakses tanpa cookie atau login, dan tetap dapat diakses hingga permintaan dimulai. Setiap halaman model mencantumkan batas ukuran dan dimensi parameter file-nya.

## 2. URI data

File kecil dapat disertakan langsung sebagai URI `data:` hingga 10 MB:

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

Base64 membuat body sekitar sepertiga lebih besar daripada file, jadi gunakan upload untuk file berukuran besar.

## 3. Upload

Untuk file lokal, minta URL upload, lakukan `PUT` byte ke URL tersebut, lalu teruskan `file_url` yang dikembalikan ke model. Membuat URL upload gratis.

```bash 1 · Dapatkan URL 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 · Upload byte dengan header yang dikembalikan persis
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · Gunakan file_url sebagai input model
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 yang didukung: `.jpg`, `.jpeg`, `.png`, `.webp` (hingga 15 MB) dan `.mp4`, `.mov`, `.webm` (hingga 200 MB). Ekstensi menentukan jenisnya; `content_type` harus cocok.
- URL upload berlaku selama satu jam. `file_url` tetap valid.
- Untuk audio, gunakan URL publik atau URI data.

## File output

> [!TIP]
> File yang dihasilkan disalin ke penyimpanan kami dan dikembalikan dalam `outputs[].url` sebagai tautan di `content.doitong.com`. Anda dapat langsung meneruskannya ke model lain, misalnya gambar dari model text-to-image ke model image-to-video.

Anda dapat memilih berapa lama file output disimpan:

- **Selamanya** (`permanent`, bawaan): hingga Anda menghapusnya, dengan biaya 100 kredit API ($0,10) per GB per bulan, ditagih sekali sehari dari saldo API (1 GB = 1024³ byte).
- **7 hari** (`temporary`): gratis, lalu dihapus dari penyimpanan kami.

Atur nilai bawaan dengan tombol "Simpan file selamanya" di [dasbor](https://doitong.com/developers/dashboard#balance) atau dengan `PATCH /account/storage`, dan ganti pengaturan tersebut per eksekusi dengan `?storage=temporary` (atau `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"}'
```

Setiap permintaan menampilkan `storage` miliknya sendiri (`mode`, `bytes`, `expires_at`, `expired`). Pengaturan berlaku untuk permintaan baru; file yang sudah Anda simpan selamanya akan tetap ada hingga Anda menghapusnya dengan `DELETE /requests/{id}/files` (lihat [Permintaan](https://doitong.com/developers/docs/requests#delete-files)). Jika saldo API tidak dapat membayar penyimpanan, Anda menerima email dan memiliki 30 hari untuk mengisi ulang sebelum file yang disimpan menjadi sementara.
