# ফাইল

যে মডেলগুলো ছবি, ভিডিও বা অডিও নেয়, সেগুলো তিনটির যেকোনো একটি ফর্মে গ্রহণ করে। প্রতিটি মডেল পেজে তার ফাইল
প্যারামিটারগুলো চিহ্নিত করা থাকে (যেমন `image`, `images`, `videos`, `audios`)।

## 1. একটি সর্বজনীন URL

মডেলটি ডাউনলোড করতে পারে এমন যেকোনো `https://` (অথবা `http://`) URL:

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

ফাইলটি কুকি বা লগইন ছাড়াই অ্যাক্সেসযোগ্য হতে হবে এবং রিকোয়েস্ট শুরু হওয়া পর্যন্ত অ্যাক্সেসযোগ্য থাকতে হবে। প্রতিটি মডেল
পেজে তার ফাইল প্যারামিটারের আকার ও মাত্রার সীমা দেওয়া থাকে।

## 2. একটি data URI

ছোট ফাইল সর্বোচ্চ 10 MB-এর `data:` URI হিসেবে সরাসরি পাঠানো যায়:

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

Base64 বডিকে ফাইলের তুলনায় প্রায় এক-তৃতীয়াংশ বড় করে, তাই বড় কিছুর জন্য আপলোড ব্যবহার করাই ভালো।

## 3. একটি আপলোড

স্থানীয় ফাইলের জন্য একটি আপলোড URL চেয়ে নিন, সেখানে বাইটগুলো `PUT` করুন এবং ফেরত পাওয়া `file_url` মডেলে পাঠান।
আপলোড URL তৈরি করা বিনামূল্যে।

```bash 1 · একটি আপলোড URL পান
curl -X POST "https://api.doitong.ru/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 · আপলোড
{
  "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 · ঠিক ফেরত পাওয়া হেডার ব্যবহার করে বাইটগুলো আপলোড করুন
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @product.jpg
```

```bash 3 · মডেলের ইনপুট হিসেবে file_url ব্যবহার করুন
curl -X POST "https://api.doitong.ru/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": "..."}'
```

- সমর্থিত আপলোড: `.jpg`, `.jpeg`, `.png`, `.webp` (সর্বোচ্চ 15 MB) এবং `.mp4`, `.mov`, `.webm` (সর্বোচ্চ 200 MB)।
  এক্সটেনশনটি টাইপ নির্ধারণ করে; `content_type`-এর সঙ্গে এটি মিলতে হবে।
- আপলোড URL এক ঘণ্টা বৈধ। `file_url` বৈধই থাকে।
- অডিওর জন্য সর্বজনীন URL অথবা data URI ব্যবহার করুন।

## আউটপুট ফাইল

> [!TIP]
> তৈরি করা ফাইলগুলো আমাদের স্টোরেজে কপি করা হয় এবং `outputs[].url`-এ `content.doitong.com`-এর লিংক হিসেবে ফেরত দেওয়া হয়। আপনি
> সেগুলো সরাসরি অন্য একটি মডেলে পাঠাতে পারেন, যেমন একটি text-to-image মডেলের ছবি image-to-video মডেলে পাঠানো।

আউটপুট ফাইল কতক্ষণ রাখা হবে তা আপনি বেছে নিতে পারেন:

- **চিরকাল** (`permanent`, ডিফল্ট): আপনি মুছে না দেওয়া পর্যন্ত, প্রতি GB প্রতি মাসে ১০০ API ক্রেডিট
  (০.১০$), দিনে একবার API ব্যালান্স থেকে চার্জ করা হবে (1 GB = 1024³ bytes)।
- **৭ দিন** (`temporary`): বিনামূল্যে, এরপর আমাদের স্টোরেজ থেকে মুছে ফেলা হবে।

[ড্যাশবোর্ড](https://doitong.com/developers/dashboard#balance)-এর "ফাইল চিরকাল সংরক্ষণ করুন" সুইচ দিয়ে ডিফল্ট নির্ধারণ করুন অথবা
`PATCH /account/storage` ব্যবহার করুন, এবং প্রতি রানের জন্য `?storage=temporary` (অথবা `permanent`) দিয়ে তা পরিবর্তন করুন:

```bash
curl -X PATCH "https://api.doitong.ru/v1/account/storage" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"mode": "temporary"}'
```

প্রতিটি রিকোয়েস্টে তার নিজস্ব `storage` (`mode`, `bytes`, `expires_at`, `expired`) দেখা যায়। এই সেটিং নতুন রিকোয়েস্টে প্রযোজ্য;
আপনি ইতিমধ্যে চিরকাল রাখছেন এমন ফাইলগুলো মুছে না দেওয়া পর্যন্ত থেকে যায়। মুছতে `DELETE /requests/{id}/files` ব্যবহার করুন (দেখুন
[রিকোয়েস্ট](https://doitong.com/developers/docs/requests#delete-files))। API ব্যালান্স স্টোরেজের খরচ পরিশোধ করতে না পারলে, আপনি একটি ইমেল পাবেন
এবং রাখা ফাইলগুলো অস্থায়ী হয়ে যাওয়ার আগে টপ-আপ করার জন্য ৩০ দিন সময় পাবেন।
