# Brzi početak

Pokrenite svoje prvo generiranje u nekoliko minuta. Svih 1.496 modela prihvaća istu vrstu zahtjeva i vraća
isti objekt zahtjeva za slike, video i audio: naučite jednom ovdje.

> [!NOTE]
> Osnovni URL `https://api.doitong.com/v1`. Svaki poziv šalje `Authorization: Bearer <your key>`, a isti ključ radi za HTTP
> API i MCP poslužitelj.

## 1. Dohvatite API ključ

Izradite ključ na [https://doitong.com/developers/dashboard#keys](https://doitong.com/developers/dashboard#keys) i spremite ga u
varijablu okruženja: prikazuje se samo jednom. Svaki ključ može imati vlastiti proračun pa ga možete dodijeliti agentu
bez ugrožavanja cijelog računa. `GET /account` vraća vaše API stanje.

```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())
```

Pokretanja se plaćaju iz **API stanja** vašeg računa u API kreditima: 1.000 API kredita = 1 $, a svaki model košta
točno koliko naplaćuje njegov proizvođač. Nadoplatite na [https://doitong.com/developers/dashboard#balance](https://doitong.com/developers/dashboard#balance).

## 2. Zatražite ponudu, zatim pokrenite

`POST /quote/{model_id}` prihvaća ulazni JSON i vraća točnu cijenu. Ne treba ključ i ništa ne košta.
Pokretanje istog ulaza košta upravo toliko: ponuda je iznos naplate. (Iznimka su modeli koji se naplaćuju prema
potrošnji: njihova je ponuda najviši mogući trošak pokretanja, a neiskorišteni dio vraća se nakon pokretanja.)

```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 · quote
{
  "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"
}
```

Zatim pošaljite isto tijelo na `POST /run/{model_id}`. Dodajte `?wait=20` kako biste zadržali vezu do 20 sekundi: brzi
model vraća dovršeni rezultat u jednom obilasku. Pošaljite zaglavlje `Idempotency-Key` kako ponovni pokušaj nikad ne bi
pokrenuo (ili naplatio) postupak dvaput.

```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)
```

Odgovor je objekt zahtjeva:

```json 200 OK · request
{
  "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. Pratite status

Ako model još radi kada čekanje završi, dobit ćete `202 Accepted` s `id`-om zahtjeva i njegovim trenutačnim
`status`-om. Svaki zahtjev prolazi kroz isti životni ciklus:

Životni ciklus zahtjeva: `queued` → `running` → `succeeded` | `failed` | `canceled` (završeno; neuspjeli i otkazani zahtjevi se refundiraju).

Ponovno pročitajte zahtjev s njegovim id-om. `?wait=20` radi i ovdje, pa je dovoljna jednostavna petlja:

```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)
```

Kada je `status` `succeeded`, `outputs[].url` sadrži poveznice na datoteke u našoj pohrani. Ako zahtjev `failed` ili je
`canceled`, njegovi se API krediti automatski vraćaju, a `error` navodi razlog. Otkažite sve što je još `queued` ili
`running`:

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

Za dugotrajne video zadatke možete preskočiti anketiranje i umjesto toga proslijediti `webhook_url` (pogledajte [Webhooks](https://doitong.com/developers/docs/webhooks)).

## 4. Datoteke

Kao ulaz proslijedite bilo koji javni URL ili zatražite URL za prijenos od `POST /files`, prenesite datoteku na taj URL
pomoću `PUT` i upotrijebite vraćeni `file_url` (pogledajte [Datoteke](https://doitong.com/developers/docs/files)). Uspješan zahtjev navodi rezultate u `outputs[]` s
vrstom, vrstom sadržaja te, kada su poznate, dimenzijama i trajanjem.

```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]
> **Datoteke se čuvaju zauvijek ili 7 dana besplatno: vi birate.** Izlazne datoteke kopiraju se u našu
> pohranu prije nego što zahtjev uspije. Zadano ostaju dok ih ne izbrišete (100 API kredita
> po GB mjesečno); isključite preklopnik "Čuvaj datoteke zauvijek" na nadzornoj ploči ili proslijedite `?storage=temporary` da ih
> zadržite 7 dana besplatno (pogledajte [Datoteke](https://doitong.com/developers/docs/files#storage)).

## Pogreške

Svaki model ne uspijeva na isti način: jedan omotač sadrži `type`, točan `code`, problematični `param` i svaki problem
u `details`, pa agent može popraviti zahtjev bez čitanja proze. Neispravan zahtjev se ne naplaćuje.

```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"
  }
}
```

Svaka vrsta i kod navedeni su u [Pogreškama](https://doitong.com/developers/docs/errors).

## Cijene

Cijene su u USD i API kreditima te su prikazane na svakoj stranici modela prije pokretanja. Svaki zahtjev sadrži `cost` s
`credits`, `usd`, `charged` i `refunded`. Pokretanje se naplaćuje kada je prihvaćeno; zahtjevi u statusu `failed` i
`canceled` automatski se vraćaju. Neki modeli cijene određuju točno prema ulazu, neki prema duljini ili veličini
poslanih datoteka, a drugi naplaćuju *procijenjenu cijenu po pokretanju*: u svakom slučaju plaćate iznos ponude. Nekoliko
modela (jezični i vizualni modeli, glasovni alati i alati čije se procesno vrijeme naplaćuje) *naplaćuje se prema potrošnji*:
ponuda je najviši mogući trošak pokretanja, a dio koji pokretanje nije iskoristilo automatski se vraća. Pogledajte [Cijene](https://doitong.com/developers/docs/pricing).

## MCP i AI agenti

Povežite bilo koji MCP klijent na `https://api.doitong.com/v1/mcp` istim Bearer ključem. Vaš agent može pretraživati katalog, dobivati ponude i
pokretati modele te čitati svaku stranicu dokumentacije kao Markdown.

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

## Sljedeći koraci

- Pregledajte [sve modele](https://doitong.com/developers/models). Svaka stranica ima alat za izradu zahtjeva koji piše kod umjesto vas.
- Naučite životni ciklus zahtjeva: [Zahtjevi](https://doitong.com/developers/docs/requests).
- Upotrebljavajte iste nazive parametara za svaki model: [Parametri](https://doitong.com/developers/docs/parameters).
- Radite s AI agentom za programiranje? Dajte mu [https://doitong.com/developers/llms.txt](https://doitong.com/developers/llms.txt) ili povežite [MCP poslužitelj](https://doitong.com/developers/docs/mcp).
