# Γρήγορη εκκίνηση

Εκτελέστε την πρώτη σας παραγωγή μέσα σε λίγα λεπτά. Και τα 1.496 μοντέλα δέχονται τον ίδιο τύπο αιτήματος και επιστρέφουν το ίδιο αντικείμενο αιτήματος για εικόνες, βίντεο και ήχο: μάθετέ το μία φορά εδώ.

> [!NOTE]
> Βασικό URL `https://api.doitong.com/v1`. Κάθε κλήση στέλνει `Authorization: Bearer <your key>`, και το ίδιο κλειδί λειτουργεί για το HTTP
> API και τον διακομιστή MCP.

## 1. Λάβετε ένα κλειδί 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.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())
```

Οι εκτελέσεις πληρώνονται από το **υπόλοιπο API** του λογαριασμού σας σε πιστώσεις API: 1.000 πιστώσεις API = 1 $, και κάθε μοντέλο κοστίζει ακριβώς την τιμή του δημιουργού του. Κάντε φόρτιση στη διεύθυνση [https://doitong.com/developers/dashboard#balance](https://doitong.com/developers/dashboard#balance).

## 2. Λάβετε προσφορά και, στη συνέχεια, εκτελέστε

Το `POST /quote/{model_id}` λαμβάνει το JSON εισόδου και επιστρέφει την ακριβή τιμή. Δεν χρειάζεται κλειδί και δεν κοστίζει τίποτα. Η εκτέλεση της ίδιας εισόδου κοστίζει ακριβώς αυτό: η προσφορά είναι η χρέωση. (Εξαίρεση αποτελεί ένα μοντέλο που χρεώνεται βάσει χρήσης: η προσφορά του είναι το μέγιστο κόστος της εκτέλεσης και το αχρησιμοποίητο μέρος επιστρέφεται μετά την εκτέλεση.)

```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 · προσφορά
{
  "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}`. Προσθέστε `?wait=20` για να διατηρήσετε τη σύνδεση έως και 20 δευτερόλεπτα: ένα γρήγορο μοντέλο επιστρέφει το ολοκληρωμένο αποτέλεσμα σε μία μετάβαση. Στείλτε μια κεφαλίδα `Idempotency-Key`, ώστε μια επανάληψη να μην εκτελέσει (ή χρεώσει) ποτέ δύο φορές.

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

Η απόκριση είναι ένα αντικείμενο αιτήματος:

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

## 3. Παρακολουθήστε την κατάσταση

Αν το μοντέλο εξακολουθεί να λειτουργεί όταν λήξει η αναμονή, λαμβάνετε `202 Accepted` με το `id` του αιτήματος και την τρέχουσα `status` του. Κάθε αίτημα περνά από τον ίδιο κύκλο ζωής:

Κύκλος ζωής αιτήματος: `queued` → `running` → `succeeded` | `failed` | `canceled` (ολοκληρωμένο· οι αποτυχημένες και ακυρωμένες χρεώσεις επιστρέφονται).

Διαβάστε ξανά το αίτημα με το id του. Το `?wait=20` λειτουργεί και εδώ, οπότε αρκεί ένας απλός βρόχος:

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

Όταν η `status` είναι `succeeded`, το `outputs[].url` περιέχει συνδέσμους προς τα αρχεία στην αποθήκευσή μας. Αν το αίτημα `failed` ή `canceled`, οι πιστώσεις API του επιστρέφονται αυτόματα και το `error` αναφέρει τον λόγο. Ακυρώστε οτιδήποτε βρίσκεται ακόμη σε κατάσταση `queued` ή `running`:

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

Για εργασίες παραγωγής βίντεο μεγάλης διάρκειας, μπορείτε να παραλείψετε την περιοδική αναζήτηση και να περάσετε ένα `webhook_url` (βλ. [Webhook](https://doitong.com/developers/docs/webhooks)).

## 4. Αρχεία

Περάστε οποιοδήποτε δημόσιο URL ως είσοδο ή ζητήστε από το `POST /files` ένα URL μεταφόρτωσης, κάντε `PUT` του αρχείου εκεί και χρησιμοποιήστε το επιστρεφόμενο `file_url` (βλ. [Αρχεία](https://doitong.com/developers/docs/files)). Ένα επιτυχές αίτημα παραθέτει τα αποτελέσματά του στο `outputs[]` με τύπο, τύπο περιεχομένου και, όταν είναι γνωστά, διαστάσεις και διάρκεια.

```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]
> **Αρχεία που διατηρούνται για πάντα ή 7 ημέρες δωρεάν: η επιλογή σας.** Τα αρχεία εξόδου αντιγράφονται στην
> αποθήκευσή μας πριν ολοκληρωθεί επιτυχώς ένα αίτημα. Από προεπιλογή παραμένουν μέχρι να τα διαγράψετε (100 πιστώσεις API
> ανά GB ανά μήνα). Απενεργοποιήστε τον διακόπτη "Διατήρηση αρχείων για πάντα" στον πίνακα ελέγχου ή περάστε `?storage=temporary` για να τα διατηρήσετε
> δωρεάν για 7 ημέρες (βλ. [Αρχεία](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"
  }
}
```

Κάθε τύπος και κωδικός παρατίθεται στα [Σφάλματα](https://doitong.com/developers/docs/errors).

## Τιμολόγηση

Οι τιμές είναι σε USD και πιστώσεις API και εμφανίζονται στη σελίδα κάθε μοντέλου πριν από την εκτέλεση. Κάθε αίτημα περιέχει `cost` με `credits`, `usd`, `charged` και `refunded`. Μια εκτέλεση χρεώνεται όταν γίνει αποδεκτή· τα αιτήματα `failed` και `canceled` επιστρέφονται αυτόματα. Ορισμένα μοντέλα τιμολογούνται ακριβώς από την είσοδο, ορισμένα από τη διάρκεια ή το μέγεθος των αρχείων που στέλνετε, ενώ άλλα χρεώνουν *εκτιμώμενη τιμή ανά εκτέλεση*: σε κάθε περίπτωση, η προσφορά είναι αυτό που πληρώνετε. Μερικά μοντέλα (μοντέλα γλώσσας και όρασης, φωνή, εργαλεία χρόνου επεξεργασίας) *χρεώνονται βάσει χρήσης*: η προσφορά είναι το μέγιστο κόστος της εκτέλεσης και το μέρος που δεν χρησιμοποίησε η εκτέλεση επιστρέφεται αυτόματα. Βλ. [Τιμολόγηση](https://doitong.com/developers/docs/pricing).

## MCP και πράκτορες AI

Συνδέστε οποιονδήποτε πελάτη MCP στο `https://api.doitong.com/v1/mcp` με το ίδιο κλειδί Bearer. Ο πράκτοράς σας μπορεί να αναζητά στον κατάλογο, να λαμβάνει προσφορές και να εκτελεί μοντέλα, καθώς και να διαβάζει κάθε σελίδα τεκμηρίωσης ως Markdown.

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

## Επόμενα βήματα

- Περιηγηθείτε σε [όλα τα μοντέλα](https://doitong.com/developers/models). Κάθε σελίδα διαθέτει ένα εργαλείο δημιουργίας αιτημάτων που γράφει τον κώδικα για εσάς.
- Μάθετε τον κύκλο ζωής του αιτήματος: [Αιτήματα](https://doitong.com/developers/docs/requests).
- Χρησιμοποιήστε τα ίδια ονόματα παραμέτρων σε κάθε μοντέλο: [Παράμετροι](https://doitong.com/developers/docs/parameters).
- Εργάζεστε με έναν πράκτορα προγραμματισμού AI; Δώστε του το [https://doitong.com/developers/llms.txt](https://doitong.com/developers/llms.txt) ή συνδέστε τον [διακομιστή MCP](https://doitong.com/developers/docs/mcp).
