Γρήγορη εκκίνηση
Εκτελέστε την πρώτη σας παραγωγή μέσα σε λίγα λεπτά. Και τα 1.496 μοντέλα δέχονται τον ίδιο τύπο αιτήματος και επιστρέφουν το ίδιο αντικείμενο αιτήματος για εικόνες, βίντεο και ήχο: μάθετέ το μία φορά εδώ.
1. Λάβετε ένα κλειδί API
Δημιουργήστε ένα κλειδί στη διεύθυνση https://doitong.com/developers/dashboard#keys και αποθηκεύστε το σε μια μεταβλητή περιβάλλοντος: εμφανίζεται μόνο μία φορά. Κάθε κλειδί μπορεί να έχει τον δικό του προϋπολογισμό, ώστε να μπορείτε να το δώσετε σε έναν πράκτορα χωρίς να διακινδυνεύσετε ολόκληρο τον λογαριασμό. Το GET /account επιστρέφει το υπόλοιπο API.
export DOITONG_API_KEY="doitong_..."
curl "https://api.doitong.com/v1/account" \
-H "Authorization: Bearer $DOITONG_API_KEY"
const res = await fetch("https://api.doitong.com/v1/account", {
headers: { Authorization: `Bearer ${process.env.DOITONG_API_KEY}` },
});
console.log(await res.json());
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.
2. Λάβετε προσφορά και, στη συνέχεια, εκτελέστε
Το POST /quote/{model_id} λαμβάνει το JSON εισόδου και επιστρέφει την ακριβή τιμή. Δεν χρειάζεται κλειδί και δεν κοστίζει τίποτα. Η εκτέλεση της ίδιας εισόδου κοστίζει ακριβώς αυτό: η προσφορά είναι η χρέωση. (Εξαίρεση αποτελεί ένα μοντέλο που χρεώνεται βάσει χρήσης: η προσφορά του είναι το μέγιστο κόστος της εκτέλεσης και το αχρησιμοποίητο μέρος επιστρέφεται μετά την εκτέλεση.)
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}'
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"
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
{
"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, ώστε μια επανάληψη να μην εκτελέσει (ή χρεώσει) ποτέ δύο φορές.
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"}'
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);
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)
Η απόκριση είναι ένα αντικείμενο αιτήματος:
{
"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Χρεώθηκε η προσφορά· τα outputs[] περιέχουν URL στον χώρο αποθήκευσής μαςfailedΑυτόματη επιστροφή χρημάτων· το σφάλμα εξηγεί την αιτίαcanceledΔιακόπηκε πριν από αποτέλεσμα· έγινε επιστροφή χρημάτων
Διαβάστε ξανά το αίτημα με το id του. Το ?wait=20 λειτουργεί και εδώ, οπότε αρκεί ένας απλός βρόχος:
curl "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t?wait=20" \
-H "Authorization: Bearer $DOITONG_API_KEY"
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);
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:
curl -X POST "https://api.doitong.com/v1/requests/req_8k2m4q7x1z9c3v5b6n0p2r4t/cancel" \
-H "Authorization: Bearer $DOITONG_API_KEY"
Για εργασίες παραγωγής βίντεο μεγάλης διάρκειας, μπορείτε να παραλείψετε την περιοδική αναζήτηση και να περάσετε ένα webhook_url (βλ. Webhook).
4. Αρχεία
Περάστε οποιοδήποτε δημόσιο URL ως είσοδο ή ζητήστε από το POST /files ένα URL μεταφόρτωσης, κάντε PUT του αρχείου εκεί και χρησιμοποιήστε το επιστρεφόμενο file_url (βλ. Αρχεία). Ένα επιτυχές αίτημα παραθέτει τα αποτελέσματά του στο outputs[] με τύπο, τύπο περιεχομένου και, όταν είναι γνωστά, διαστάσεις και διάρκεια.
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}'
Σφάλματα
Κάθε μοντέλο αποτυγχάνει με τον ίδιο τρόπο: ένα περίβλημα με type, έναν ακριβή code, την προβληματική param και κάθε πρόβλημα στο details, ώστε ένας πράκτορας να μπορεί να διορθώσει το αίτημα χωρίς να διαβάσει κείμενο. Για ένα μη έγκυρο αίτημα δεν χρεώνεται τίποτα.
{
"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"
}
}
Κάθε τύπος και κωδικός παρατίθεται στα Σφάλματα.
Τιμολόγηση
Οι τιμές είναι σε USD και πιστώσεις API και εμφανίζονται στη σελίδα κάθε μοντέλου πριν από την εκτέλεση. Κάθε αίτημα περιέχει cost με credits, usd, charged και refunded. Μια εκτέλεση χρεώνεται όταν γίνει αποδεκτή· τα αιτήματα failed και canceled επιστρέφονται αυτόματα. Ορισμένα μοντέλα τιμολογούνται ακριβώς από την είσοδο, ορισμένα από τη διάρκεια ή το μέγεθος των αρχείων που στέλνετε, ενώ άλλα χρεώνουν εκτιμώμενη τιμή ανά εκτέλεση: σε κάθε περίπτωση, η προσφορά είναι αυτό που πληρώνετε. Μερικά μοντέλα (μοντέλα γλώσσας και όρασης, φωνή, εργαλεία χρόνου επεξεργασίας) χρεώνονται βάσει χρήσης: η προσφορά είναι το μέγιστο κόστος της εκτέλεσης και το μέρος που δεν χρησιμοποίησε η εκτέλεση επιστρέφεται αυτόματα. Βλ. Τιμολόγηση.
MCP και πράκτορες AI
Συνδέστε οποιονδήποτε πελάτη MCP στο https://api.doitong.com/v1/mcp με το ίδιο κλειδί Bearer. Ο πράκτοράς σας μπορεί να αναζητά στον κατάλογο, να λαμβάνει προσφορές και να εκτελεί μοντέλα, καθώς και να διαβάζει κάθε σελίδα τεκμηρίωσης ως Markdown.
claude mcp add --transport http doitong-models https://api.doitong.com/v1/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Επόμενα βήματα
- Περιηγηθείτε σε όλα τα μοντέλα. Κάθε σελίδα διαθέτει ένα εργαλείο δημιουργίας αιτημάτων που γράφει τον κώδικα για εσάς.
- Μάθετε τον κύκλο ζωής του αιτήματος: Αιτήματα.
- Χρησιμοποιήστε τα ίδια ονόματα παραμέτρων σε κάθε μοντέλο: Παράμετροι.
- Εργάζεστε με έναν πράκτορα προγραμματισμού AI; Δώστε του το https://doitong.com/developers/llms.txt ή συνδέστε τον διακομιστή MCP.