# দ্রুত শুরু

কয়েক মিনিটে আপনার প্রথম জেনারেশন চালান। সব ১,৪৯৬টি মডেল একই ধরনের রিকোয়েস্ট নেয় এবং ছবি, ভিডিও ও অডিওর জন্য একই রিকোয়েস্ট অবজেক্ট ফেরত দেয়: এখানে একবার শিখলেই হবে।

> [!NOTE]
> বেস URL `https://api.doitong.ru/v1`। প্রতিটি কল `Authorization: Bearer <your key>` পাঠায়, এবং একই API কী HTTP
> API ও MCP সার্ভার—উভয়ের জন্য কাজ করে।

## ১. একটি API কী নিন

[https://doitong.com/developers/dashboard#keys](https://doitong.com/developers/dashboard#keys)-এ একটি কী তৈরি করুন এবং সেটি একটি
এনভায়রনমেন্ট ভেরিয়েবলে রাখুন: এটি শুধু একবারই দেখানো হয়। প্রতিটি কী-তে নিজস্ব বাজেট থাকতে পারে, তাই পুরো
অ্যাকাউন্ট ঝুঁকিতে না ফেলে একটি এজেন্টকে কী দিতে পারেন। `GET /account` আপনার API ব্যালান্স ফেরত দেয়।

```bash
export DOITONG_API_KEY="doitong_..."

curl "https://api.doitong.ru/v1/account" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```
```javascript
const res = await fetch("https://api.doitong.ru/v1/account", {
  headers: { Authorization: `Bearer ${process.env.DOITONG_API_KEY}` },
});

console.log(await res.json());
```
```python
import os
import requests

r = requests.get(
    "https://api.doitong.ru/v1/account",
    headers={"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"},
)
print(r.json())
```

রানগুলো আপনার অ্যাকাউন্টের **API ব্যালান্স** থেকে API ক্রেডিটে পরিশোধ করা হয়: ১,০০০ API ক্রেডিট = ১$, এবং প্রতিটি মডেলের
খরচ তার নির্মাতার নির্ধারিত মূল্যের সমান। [https://doitong.ru/developers/dashboard#balance](https://doitong.ru/developers/dashboard#balance)-এ টপ-আপ করুন।

## ২. কোট নিন, তারপর চালান

`POST /quote/{model_id}` ইনপুট JSON নেয় এবং সঠিক মূল্য ফেরত দেয়। এর জন্য কোনো API কী লাগে না এবং কোনো খরচও হয় না।
একই ইনপুট চালালে ঠিক ওই মূল্যই খরচ হয়: কোটই চার্জ। (ব্যবহার অনুযায়ী চার্জ হওয়া মডেল এর ব্যতিক্রম: এর
কোট হলো রানটির সর্বোচ্চ সম্ভাব্য খরচ, এবং অব্যবহৃত অংশ রান শেষ হওয়ার পর অর্থ ফেরত দেওয়া হয়।)

```bash
curl -X POST "https://api.doitong.ru/v1/quote/kling-video/v3/pro/image-to-video" \
  -H "Content-Type: application/json" \
  -d '{"image": "https://example.com/fox.jpg", "duration": 5, "generate_audio": true}'
```
```javascript
const res = await fetch("https://api.doitong.ru/v1/quote/kling-video/v3/pro/image-to-video", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ image: "https://example.com/fox.jpg", duration: 5, generate_audio: true }),
});

const quote = await res.json();
console.log(quote.credits, quote.usd); // 840 "0.84"
```
```python
import requests

r = requests.post(
    "https://api.doitong.ru/v1/quote/kling-video/v3/pro/image-to-video",
    json={"image": "https://example.com/fox.jpg", "duration": 5, "generate_audio": True},
)
print(r.json()["credits"], r.json()["usd"])  # 840 0.84
```

```json 200 OK · কোট
{
  "object": "quote",
  "model": "kling-video/v3/pro/image-to-video",
  "credits": 840,
  "usd": "0.84",
  "unit": "second",
  "quantity": 5,
  "unit_credits": 168,
  "mode": "exact",
  "breakdown": "5 s × 168 API credits"
}
```

এরপর একই বডি `POST /run/{model_id}`-এ পাঠান। সংযোগ সর্বোচ্চ 20 সেকেন্ড ধরে রাখতে `?wait=20` যোগ করুন: দ্রুত
মডেল একবারের রাউন্ড ট্রিপেই সম্পূর্ণ ফলাফল ফেরত দেয়। `Idempotency-Key` হেডার পাঠান, যাতে রিট্রাই হলে কখনোই
দুবার রান (বা চার্জ) না হয়।

```bash
curl -X POST "https://api.doitong.ru/v1/run/flux/schnell?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: lighthouse-001" \
  -d '{"prompt": "A lighthouse on a rocky coast at dusk, warm light in the window"}'
```
```javascript
const res = await fetch("https://api.doitong.ru/v1/run/flux/schnell?wait=20", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.DOITONG_API_KEY}`,
    "Content-Type": "application/json",
    "Idempotency-Key": "lighthouse-001",
  },
  body: JSON.stringify({ prompt: "A lighthouse on a rocky coast at dusk, warm light in the window" }),
});

const request = await res.json();
console.log(request.status, request.outputs[0]?.url);
```
```python
import os
import requests

r = requests.post(
    "https://api.doitong.ru/v1/run/flux/schnell",
    params={"wait": 20},
    headers={
        "Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}",
        "Idempotency-Key": "lighthouse-001",
    },
    json={"prompt": "A lighthouse on a rocky coast at dusk, warm light in the window"},
)
request = r.json()
print(request["status"], request["outputs"][0]["url"] if request["outputs"] else None)
```

রেসপন্সটি একটি রিকোয়েস্ট অবজেক্ট:

```json 200 OK · রিকোয়েস্ট
{
  "id": "req_8k2m4q7x1z9c3v5b6n0p2r4t",
  "object": "request",
  "model": "flux/schnell",
  "status": "succeeded",
  "cost": { "credits": 3, "usd": "0.003", "charged": 3, "refunded": 0 },
  "outputs": [
    { "type": "image", "url": "https://content.doitong.com/dev-api/2026/10/20/req_8k2m4q7x1z9c3v5b6n0p2r4t/0-output.jpeg",
      "content_type": "image/jpeg", "width": 1024, "height": 768, "stored": true }
  ],
  "error": null
}
```

## ৩. স্ট্যাটাস অনুসরণ করুন

অপেক্ষার সময় শেষ হলে মডেলটি এখনও কাজ করলে, আপনি রিকোয়েস্টের `id` এবং বর্তমান `status`-সহ `202 Accepted` পাবেন।
প্রতিটি রিকোয়েস্ট একই জীবনচক্রের মধ্য দিয়ে যায়:

অনুরোধের জীবনচক্র: `queued` → `running` → `succeeded` | `failed` | `canceled` (চূড়ান্ত; ব্যর্থ ও বাতিল করা রিফান্ড করা হয়).

এর id ব্যবহার করে রিকোয়েস্টটি আবার পড়ুন। এখানেও `?wait=20` কাজ করে, তাই একটি সাধারণ লুপই যথেষ্ট:

```bash
curl "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```
```javascript
const headers = { Authorization: `Bearer ${process.env.DOITONG_API_KEY}` };
let request = await (await fetch("https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20", { headers })).json();

while (request.status === "queued" || request.status === "running") {
  const res = await fetch(`https://api.doitong.ru/v1/requests/${request.id}?wait=20`, { headers });
  request = await res.json();
}

console.log(request.status, request.outputs[0]?.url);
```
```python
import os
import requests

headers = {"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"}
request = {"id": "req_8k2m4q7x1z9c3v5b6n0p2r4t", "status": "queued"}

while request["status"] in ("queued", "running"):
    request = requests.get(
        f"https://api.doitong.ru/v1/requests/{request['id']}",
        params={"wait": 20},
        headers=headers,
    ).json()

print(request["status"], request["outputs"][0]["url"] if request["outputs"] else None)
```

`status` যখন `succeeded`, তখন `outputs[].url`-এ আমাদের স্টোরেজে থাকা ফাইলগুলোর লিংক থাকে। রিকোয়েস্ট `failed` বা
`canceled` হলে এর API ক্রেডিট স্বয়ংক্রিয়ভাবে ফেরত দেওয়া হয় এবং `error`-এ কারণটি লেখা থাকে। এখনও `queued` বা
`running` থাকা যেকোনো কিছু বাতিল করুন:

```bash
curl -X POST "https://api.doitong.ru/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```

দীর্ঘ ভিডিও জবের ক্ষেত্রে পোলিং বাদ দিয়ে পরিবর্তে একটি `webhook_url` পাঠাতে পারেন (দেখুন [Webhooks](https://doitong.com/developers/docs/webhooks))।

## ৪. ফাইল

ইনপুট হিসেবে যেকোনো পাবলিক URL পাঠান, অথবা আপলোড URL-এর জন্য `POST /files`-এ রিকোয়েস্ট করুন, সেখানে ফাইলটি
`PUT` করুন এবং ফেরত পাওয়া `file_url` ব্যবহার করুন (দেখুন [Files](https://doitong.com/developers/docs/files))। সফল রিকোয়েস্টের
ফলাফল `outputs[]`-এ type, content type এবং জানা থাকলে dimensions ও duration-সহ তালিকাভুক্ত থাকে।

```bash
curl -X POST "https://api.doitong.ru/v1/files" \
  -H "Authorization: Bearer $DOITONG_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "fox.jpg", "content_type": "image/jpeg", "size": 482113}'
```

> [!TIP]
> **ফাইল চিরকাল রাখা হবে, নাকি বিনামূল্যে ৭ দিন: আপনার পছন্দ।** রিকোয়েস্ট সফল হওয়ার
> আগে আউটপুট ফাইলগুলো আমাদের স্টোরেজে কপি করা হয়। ডিফল্টভাবে আপনি মুছে না দেওয়া পর্যন্ত সেগুলো থাকে
> (প্রতি GB প্রতি মাসে ১০০ API ক্রেডিট); ড্যাশবোর্ডে "ফাইল চিরকাল সংরক্ষণ করুন" বন্ধ করুন, অথবা
> বিনামূল্যে ৭ দিন রাখার জন্য `?storage=temporary` পাঠান (দেখুন [Files](https://doitong.com/developers/docs/files#storage))।

## ত্রুটি

প্রতিটি মডেল একইভাবে ব্যর্থ হয়: একটি এনভেলপে `type`, সঠিক `code`, সমস্যাসৃষ্টিকারী `param` এবং `details`-এ
প্রতিটি সমস্যা থাকে, যাতে কোনো এজেন্ট গদ্য না পড়েই রিকোয়েস্ট ঠিক করতে পারে। অবৈধ রিকোয়েস্টের জন্য কোনো চার্জ হয় না।

```json 422 Unprocessable Entity
{
  "error": {
    "type": "invalid_request",
    "code": "invalid_input",
    "message": "duration must be one of 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15.",
    "param": "duration",
    "details": [ { "param": "duration", "message": "duration must be one of 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15." } ],
    "request_id": null,
    "doc_url": "https://doitong.com/developers/docs/errors#invalid_input"
  }
}
```

প্রতিটি type ও code [Errors](https://doitong.com/developers/docs/errors)-এ তালিকাভুক্ত আছে।

## মূল্য নির্ধারণ

মূল্য USD ও API ক্রেডিটে দেওয়া হয় এবং রান করার আগে প্রতিটি মডেল পেজে দেখানো হয়। প্রতিটি রিকোয়েস্টে `cost`-এর
সঙ্গে `credits`, `usd`, `charged` এবং `refunded` থাকে। রিকোয়েস্ট গ্রহণ করা হলে রানটির জন্য চার্জ হয়; `failed` ও
`canceled` রিকোয়েস্টের অর্থ স্বয়ংক্রিয়ভাবে ফেরত দেওয়া হয়। কিছু মডেলের মূল্য ইনপুট থেকেই নির্ধারিত হয়, কিছু
আপনার পাঠানো ফাইলের দৈর্ঘ্য বা আকার অনুযায়ী, আবার অন্যগুলো *প্রতি রান আনুমানিক মূল্য* হিসেবে চার্জ করে: যেভাবেই
হোক, কোটই আপনার পরিশোধযোগ্য মূল্য। কয়েকটি মডেল (ভাষা ও ভিশন মডেল, ভয়েস, প্রসেসিং-টাইম টুল) *ব্যবহার অনুযায়ী
চার্জ* হয়: কোট হলো রানটির সর্বোচ্চ সম্ভাব্য খরচ, এবং রানটি যে অংশ ব্যবহার করেনি তা স্বয়ংক্রিয়ভাবে ফেরত দেওয়া হয়।
দেখুন [Pricing](https://doitong.com/developers/docs/pricing)।

## MCP ও AI এজেন্ট

একই Bearer কী ব্যবহার করে যেকোনো MCP ক্লায়েন্টকে `https://api.doitong.ru/v1/mcp`-এ সংযুক্ত করুন। আপনার এজেন্ট ক্যাটালগ
সার্চ করতে, মডেলের কোট নিতে ও রান করতে এবং প্রতিটি ডকুমেন্টেশন পেজ Markdown হিসেবে পড়তে পারবে।

```bash Claude Code
claude mcp add --transport http doitong-models https://api.doitong.ru/v1/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"
```

## পরবর্তী ধাপ

- [সব মডেল](https://doitong.com/developers/models) ব্রাউজ করুন। প্রতিটি পেজে একটি রিকোয়েস্ট বিল্ডার আছে, যা আপনার জন্য কোড লিখে দেয়।
- রিকোয়েস্টের জীবনচক্র জানুন: [Requests](https://doitong.com/developers/docs/requests)।
- প্রতিটি মডেলে একই প্যারামিটারের নাম ব্যবহার করুন: [Parameters](https://doitong.com/developers/docs/parameters)।
- কোনো AI কোডিং এজেন্টের সঙ্গে কাজ করছেন? তাকে [https://doitong.com/developers/llms.txt](https://doitong.com/developers/llms.txt) দিন অথবা [MCP server](https://doitong.com/developers/docs/mcp)-এর সঙ্গে সংযুক্ত করুন।
