# Īsā pamācība

Palaidiet savu pirmo ģenerēšanu dažu minūšu laikā. Visi 1496 modeļi pieņem viena veida pieprasījumu un atgriež
vienu un to pašu pieprasījuma objektu attēliem, video un audio: apgūstiet to šeit vienreiz.

> [!NOTE]
> Bāzes URL `https://api.doitong.com/v1`. Katrā izsaukumā tiek nosūtīts `Authorization: Bearer <your key>`, un tā pati atslēga darbojas gan ar HTTP
> API, gan MCP serveri.

## 1. Iegūstiet API atslēgu

Izveidojiet atslēgu vietnē [https://doitong.com/developers/dashboard#keys](https://doitong.com/developers/dashboard#keys) un saglabājiet to vides
mainīgajā: tā tiek parādīta tikai vienreiz. Katrai atslēgai var būt savs budžets, tāpēc varat to nodot aģentam,
nepakļaujot riskam visu kontu. `GET /account` atgriež jūsu API atlikumu.

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

curl "https://api.doitong.com/v1/account" \
  -H "Authorization: Bearer $DOITONG_API_KEY"
```
```javascript
const res = await fetch("https://api.doitong.com/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.com/v1/account",
    headers={"Authorization": f"Bearer {os.environ['DOITONG_API_KEY']}"},
)
print(r.json())
```

Izpildes tiek apmaksātas no jūsu konta **API atlikuma** API kredītos: 1000 API kredītu = 1 $, un katrs modelis maksā
precīzi tā izstrādātāja noteikto cenu. Papildiniet atlikumu vietnē [https://doitong.com/developers/dashboard#balance](https://doitong.com/developers/dashboard#balance).

## 2. Saņemiet cenu piedāvājumu, pēc tam palaidiet

`POST /quote/{model_id}` pieņem ievades JSON un atgriež precīzu cenu. Tam nav nepieciešama atslēga, un tas neko nemaksā.
Tās pašas ievades palaišana maksā tieši norādīto summu: piedāvājums ir maksa. (Izņēmums ir modelis, kura cena
atkarīga no lietojuma: tā piedāvājums ir maksimālā summa, ko var maksāt izpilde, bet neizmantotā daļa tiek atmaksāta
pēc izpildes.)

```bash
curl -X POST "https://api.doitong.com/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.com/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.com/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 · cenas piedāvājums
{
  "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"
}
```

Pēc tam nosūtiet to pašu pamattekstu uz `POST /run/{model_id}`. Pievienojiet `?wait=20`, lai savienojums tiktu uzturēts līdz 20 sekundēm: ātrs
modelis atgriezīs pabeigto rezultātu vienā turp-atpakaļ pieprasījumā. Nosūtiet `Idempotency-Key` galveni, lai atkārtots
pieprasījums nekad neizpildītu darbību (vai neiekasētu maksu) divreiz.

```bash
curl -X POST "https://api.doitong.com/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.com/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.com/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)
```

Atbilde ir pieprasījuma objekts:

```json 200 OK · pieprasījums
{
  "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
}
```

## 3. Sekojiet statusam

Ja modelis joprojām darbojas, kad gaidīšanas laiks beidzas, saņemsiet `202 Accepted` ar pieprasījuma `id` un pašreizējo
`status`. Katrs pieprasījums iziet vienu un to pašu dzīves ciklu:

Pieprasījuma dzīves cikls: `queued` → `running` → `succeeded` | `failed` | `canceled` (pabeigts; par neveiksmīgiem un atceltiem pieprasījumiem tiek atmaksāti API kredīti).

Nolasiet pieprasījumu vēlreiz, izmantojot tā id. Arī šeit darbojas `?wait=20`, tāpēc pietiek ar vienkāršu ciklu:

```bash
curl "https://api.doitong.com/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.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20", { headers })).json();

while (request.status === "queued" || request.status === "running") {
  const res = await fetch(`https://api.doitong.com/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.com/v1/requests/{request['id']}",
        params={"wait": 20},
        headers=headers,
    ).json()

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

Kad `status` ir `succeeded`, `outputs[].url` satur saites uz failiem mūsu krātuvē. Ja pieprasījums `failed` vai tika
`canceled`, tā API kredīti tiek automātiski atmaksāti, bet `error` norāda iemeslu. Atceliet visu, kas joprojām ir
`queued` vai `running`:

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

Gariem video darbiem varat izlaist statusa pārbaudi un tā vietā nodot `webhook_url` (skatiet [Tīmekļa āķi](https://doitong.com/developers/docs/webhooks)).

## 4. Faili

Kā ievadi nododiet jebkuru publisku URL vai pieprasiet augšupielādes URL ar `POST /files`, ievietojiet failu tajā ar
`PUT` un izmantojiet atgriezto `file_url` (skatiet [Faili](https://doitong.com/developers/docs/files)). Veiksmīgs pieprasījums uzskaita savus rezultātus
`outputs[]` ar tipu, satura tipu un, ja zināms, izmēriem un ilgumu.

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

> [!TIP]
> **Faili tiek glabāti mūžīgi vai bez maksas 7 dienas — jūsu izvēle.** Izvades faili tiek kopēti mūsu
> krātuvē, pirms pieprasījums tiek veiksmīgi pabeigts. Pēc noklusējuma tie paliek, līdz tos izdzēšat (100 API kredīti
> par GB mēnesī); izslēdziet informācijas panelī slēdzi "Glabāt failus mūžīgi" vai nododiet `?storage=temporary`, lai tos glabātu
> 7 dienas bez maksas (skatiet [Faili](https://doitong.com/developers/docs/files#storage)).

## Kļūdas

Katrs modelis kļūst kļūdains vienā un tajā pašā veidā: viens aploksnes objekts ar `type`, precīzu `code`, problemātisko
`param` un katru problēmu laukā `details`, lai aģents varētu izlabot pieprasījumu, nelasot aprakstu. Par nederīgu pieprasījumu
nekas netiek iekasēts.

```json 422 Neapstrādājama entītija
{
  "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"
  }
}
```

Visi tipi un kodi ir uzskaitīti sadaļā [Kļūdas](https://doitong.com/developers/docs/errors).

## Cenas

Cenas ir USD un API kredītos, un tās tiek parādītas katra modeļa lapā pirms palaišanas. Katram pieprasījumam ir `cost` ar
`credits`, `usd`, `charged` un `refunded`. Maksa par izpildi tiek iekasēta, kad tā tiek pieņemta; `failed` un `canceled` pieprasījumiem
maksa tiek automātiski atmaksāta. Dažiem modeļiem cena tiek aprēķināta precīzi pēc ievades, dažiem pēc nosūtīto failu
garuma vai izmēra, bet citi iekasē *aptuveno cenu par izpildi*: jebkurā gadījumā maksājat piedāvājumā norādīto summu. Dažiem
modeļiem (valodas un redzes modeļiem, balss un apstrādes laika rīkiem) maksa tiek aprēķināta pēc lietojuma: piedāvājums ir
maksimālā summa, ko var maksāt izpilde, un neizmantotā daļa tiek automātiski atmaksāta. Skatiet [Cenas](https://doitong.com/developers/docs/pricing).

## MCP un AI aģenti

Savienojiet jebkuru MCP klientu ar `https://api.doitong.com/v1/mcp`, izmantojot to pašu Bearer atslēgu. Jūsu aģents var meklēt katalogā, saņemt
cenu piedāvājumus un palaist modeļus, kā arī nolasīt katru dokumentācijas lapu Markdown formātā.

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

## Nākamās darbības

- Pārlūkojiet [visus modeļus](https://doitong.com/developers/models). Katrā lapā ir pieprasījumu veidotājs, kas uzraksta kodu jūsu vietā.
- Uzziniet par pieprasījuma dzīves ciklu: [Pieprasījumi](https://doitong.com/developers/docs/requests).
- Izmantojiet vienus un tos pašus parametru nosaukumus katram modelim: [Parametri](https://doitong.com/developers/docs/parameters).
- Strādājat ar AI kodēšanas aģentu? Nododiet tam [https://doitong.com/developers/llms.txt](https://doitong.com/developers/llms.txt) vai savienojiet [MCP serveri](https://doitong.com/developers/docs/mcp).
