API
Bestellen Sie Leistungen direkt von Ihrer Website, aus Ihrem Shop oder per Skript: Leistungen und Preise abrufen, Bestellungen mit der Aufgabe aufgeben, ihren Stand verfolgen und die Ergebnisse abholen. Es ist dieselbe Leistung wie auf der Website, daher erscheinen über die API aufgegebene Bestellungen auch in Ihrem Konto.
Erste Schritte
- Melden Sie sich an und öffnen Sie Guthaben und API-Schlüssel.
- Erstellen Sie einen Schlüssel. Er wird nur einmal angezeigt: Kopieren Sie ihn und halten Sie ihn geheim wie ein Passwort. Sie können einen Schlüssel jederzeit widerrufen.
- Laden Sie Ihr Guthaben auf. Über die API aufgegebene Bestellungen werden davon bezahlt, in US-Dollar.
Senden Sie den Schlüssel mit jeder Anfrage:
Authorization: Bearer dlx_your_key
Adresse der API: https://dleex.com/api/v1. Anfragen und Antworten sind JSON. Preise und Beträge sind ganze US-Cent: 1500 bedeutet 15,00 $.
Leistungen
GET /services listet auf, was bestellt werden kann.
curl https://dleex.com/api/v1/services -H "Authorization: Bearer dlx_your_key"
[
{
"service": "seo-article",
"category": "seo",
"title": { "en": "SEO article", "ru": "SEO-статья" },
"linkRequired": false,
"files": null,
"script": null,
"briefQuestions": [
{ "q": { "en": "What is the article about?", "ru": "О чём статья?" }, "hint": { "en": "The topic, or a link to the page.", "ru": "..." } },
{ "q": { "en": "Who will read it?", "ru": "..." } }
],
"packages": [
{ "tier": "basic", "title": { "en": "...", "ru": "..." }, "priceUsdCents": 1500, "days": 2, "revisions": 1 },
{ "tier": "standard", "...": "..." },
{ "tier": "premium", "...": "..." }
],
"addons": [
{
"id": 7,
"title": { "en": "Express delivery", "ru": "Срочное выполнение" },
"description": null,
"priceUsdCents": 1000,
"extraDays": -1,
"tiers": ["standard", "premium"]
}
]
}
]
days gibt an, wie lange die Arbeit dauert; revisions, wie oft Sie Änderungen anfordern können. addons sind Extras, die Sie zu den Paketen in tiers bestellen können: Ihr Preis wird zum Paketpreis addiert und extraDays zur Lieferzeit (negativ: schneller, aber nie unter 1 Tag). briefQuestions sind die Fragen der Leistung zur Aufgabe, manche mit einem hint; beantworten Sie sie beim Bestellen in answers. Die Liste ist leer, wenn eine Leistung keine Fragen stellt. linkRequired ist true bei einer Leistung, die anhand dessen erbracht wird, was ein Link öffnet, etwa ein Profil oder Beitrag oder eine zu untertitelnde Aufnahme: Eine Bestellung dafür braucht link.
files ist null bei einer Leistung, die mit dem Briefing keine Dateien annimmt. Andernfalls steht dort, welche sie annimmt, z. B. {"accept": ["image"], "maxFiles": 3, "maxMb": 5, "required": true, "insteadOfLink": false}: die Arten (image, audio, video), wie viele Dateien mit einem Briefing oder Überarbeitungswunsch, wie groß jede Datei in MB sein darf, ob das Briefing mindestens eine braucht und ob eine Datei link ersetzen kann (linkRequired ist dann für Bestellungen ohne Dateien trotzdem true). Siehe Dateien.
script ist null bei einer Leistung, die keinen Text vorliest. Eine Sprecherleistung enthält den längsten Text, den jedes Paket vorliest, in Zeichen, z. B. {"maxChars": {"basic": 1000, "standard": 3000, "premium": 9000}}: Ihre Bestellungen brauchen script, den Text, der wortwörtlich vorgelesen wird. Die Aufnahme wird mit einer synthetischen Stimme gesprochen: Wo immer Sie sie veröffentlichen, weisen Sie Ihre Hörer darauf hin, dass die Stimme synthetisch ist (siehe AGB).
Guthaben
GET /balance
{ "balanceUsdCents": 10000, "currency": "USD" }
Bestellung aufgeben
POST /orders. Der Preis (Paket und Extras, abzüglich eines Rabatts) wird vom Guthaben abgebucht, und die Arbeit beginnt sofort.
| Feld | ||
|---|---|---|
service | Pflicht | Leistung aus /services |
tier | Pflicht | basic, standard oder premium |
text | Pflicht ohne answers, script oder awaitBrief | Die Aufgabe: was zu tun ist, bis zu 10.000 Zeichen. Mit script: wie vorgelesen werden soll (Ton, Tempo, Aussprache von Namen) |
link | optional | Ein Link zur Seite, zum Profil oder Beitrag oder zu einer Aufnahme: ein direkter Link zur Datei oder ein Dropbox- oder Yandex-Disk-Link. Pflicht, wo linkRequired true ist |
answers | optional | Antworten auf die briefQuestions der Leistung: [{"q": "question", "a": "answer"}], bis zu 8, jede Antwort bis zu 5.000 Zeichen |
script | Pflicht, wo script in /services nicht null ist, sonst abgelehnt | Der vorzulesende Text, wortwörtlich, bis zum maxChars des Pakets (höchstens 20.000 Zeichen, ein Zeilenumbruch zählt als eins). Lassen Sie zwischen Absätzen eine Leerzeile |
locale | optional | Sprache des Ergebnisses, en oder ru. Standardmäßig die Sprache Ihres Kontos |
addons | optional | IDs der Extras aus /services, die für dieses Paket angeboten werden, z. B. [7] |
promoCode | optional | Ein Gutscheincode; gilt er nicht, wird die Bestellung nicht aufgegeben (siehe Fehler) |
awaitBrief | optional | true, um das Briefing später zu senden, nach dem Hochladen der Dateien: Die Bestellung wird bezahlt und wartet als awaiting_brief. Lassen Sie dann text, link, answers und script weg. Siehe Dateien |
curl https://dleex.com/api/v1/orders -H "Authorization: Bearer dlx_your_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: <your-order-id>" \
-d '{"service":"seo-article","tier":"basic","text":"An article about trail running shoes, 5 keywords: ..."}'
Idempotency-Key ist optional und ermöglicht es, die Anfrage gefahrlos zu wiederholen; jede neue Bestellung braucht einen neuen Schlüssel. Siehe Idempotenz unten.
Geben Sie entweder text oder mindestens eine Antwort an, oder beides; für eine Sprecherleistung genügt script. Schreiben Sie jede Frage in q so, wie sie in briefQuestions steht, in der Sprache der Bestellung, und lassen Sie die weg, auf die Sie keine Antwort haben:
{
"service": "seo-article",
"tier": "basic",
"answers": [
{ "q": "What is the article about?", "a": "Choosing trail running shoes" },
{ "q": "Who will read it?", "a": "Runners moving from road to trail" }
]
}
Die Antwort ist die Bestellung (Status 201):
{
"id": 1042,
"status": "in_progress",
"service": "seo-article",
"tier": "basic",
"priceUsdCents": 1500,
"addons": [],
"discountUsdCents": 0,
"promoCode": null,
"locale": "en",
"text": "An article about trail running shoes...",
"link": null,
"answers": [],
"script": null,
"fileIds": [],
"files": [],
"revisionsLeft": 1,
"createdAt": "2026-10-16T11:00:00.000Z",
"dueAt": "2026-10-18T11:00:00.000Z",
"deliveredAt": null,
"autoAcceptAt": null,
"completedAt": null,
"results": []
}
Dateien
Manche Leistungen arbeiten mit Dateien des Kunden, etwa Fotos von abzutippenden Seiten oder einer zu untertitelnden Aufnahme: Ihr files in /services ist nicht null. Dateien werden zu einer Bestellung hochgeladen, die auf ihr Briefing wartet:
- Geben Sie die Bestellung mit
"awaitBrief": trueund ohnetext,link,answersundscriptauf. Sie wird sofort bezahlt, ihr Status istawaiting_brief; die Lieferzeit beginnt mit dem Briefing. - Senden Sie für jede Datei
POST /orders/{id}/filesmit{"name": "page-1.png", "size": 482113, "mime": "image/png"}:sizeist die genaue Größe in Byte,mimeist optional. Die Antwort (201) ist die Datei und das Ziel für den Upload:
{
"file": { "id": 77, "name": "page-1.png", "mime": "application/octet-stream", "size": 482113, "status": "pending", "used": false, "uploadExpiresAt": "2026-10-16T12:00:00.000Z", "createdAt": "2026-10-16T11:00:00.000Z" },
"upload": { "url": "https://...", "headers": { "content-type": "application/octet-stream" }, "expiresAt": "2026-10-16T12:00:00.000Z" }
}
- Senden Sie die Bytes der Datei per
PUTanupload.url, mit genau den angegebenenheadersund ohne API-Schlüssel, vorupload.expiresAt(eine Stunde):
curl -X PUT "$url" -H "content-type: application/octet-stream" --data-binary @page-1.png
POST /orders/{id}/files/{fileId}/complete. Eine Datei, deren Größe vonsizeabweicht oder deren Bytes keiner Art ausacceptentsprechen, wird mit422abgelehnt und gelöscht: Name undmimezählen dabei nicht. Andernfalls ist die Antwort die Datei, jetztchecking. Nach einigen Sekunden, bei einer langen Aufnahme nach einigen Minuten, ist siereadyoderrejectedmit dem Grund inreason, z. B.recording_no_soundoderfile_unreadable. Dasfilesder Bestellung zeigt ihren Stand.POST /orders/{id}/briefmittext,link,answersundscriptwie beiPOST /orders. Die fertigen, noch nicht gesendeten Dateien gehen mit, oder Sie listen die zu sendenden infileIdsauf. Solange eine davon nochcheckingist, wird das Briefing mit409 files_not_readyabgelehnt: Senden Sie es etwas später erneut. Die Antwort (200) ist die Bestellung, jetztin_progress.
DELETE /orders/{id}/files/{fileId} zieht eine noch nicht gesendete Datei zurück. Eine Bestellung nimmt höchstens 5 Dateien und insgesamt 4 GB an; eine Datei, deren Upload begonnen wurde, zählt mit, bis er abgeschlossen oder die Datei zurückgezogen ist, und einen Tag lang ab Beginn ihres Uploads zählen zurückgezogene oder abgelehnte Dateien zusammen mit den Dateien der Bestellung zu einem Limit von 12 GB: Darüber hinaus wird ein Upload mit 409 upload_quota und retryAt abgelehnt, dem Zeitpunkt, ab dem wieder Uploads angenommen werden. Eine gelieferte Bestellung nimmt auch Dateien für einen Überarbeitungswunsch an: Laden Sie sie auf dieselbe Weise hoch und senden Sie dann fileIds mit dem Wunsch.
Ohne awaitBrief wird eine Bestellung einer Leistung, deren Dateien required sind, mit 400 files_required abgelehnt, und eine, bei der eine Datei den Link ersetzen kann, ohne Link gesendet, mit 400 link_required.
In der Bestellung listet files Ihre Dateien mit ihrem status auf und fileIds diejenigen, die mit dem Briefing gesendet wurden. Eine fertige Datei hat eine url, die bis expiresAt gültig ist, wie bei Ergebnisdateien. Dateien werden 30 Tage nach Abschluss der Bestellung aufbewahrt.
Idempotenz
Eine Anfrage kann in ein Timeout laufen, nachdem die Bestellung bereits aufgegeben wurde. Um POST /orders zu wiederholen, ohne doppelt zu bezahlen, senden Sie einen Idempotency-Key-Header mit: eine Zeichenfolge aus 1 bis 255 druckbaren ASCII-Zeichen, die Sie einmal pro Bestellung festlegen, etwa eine UUID oder Ihre eigene Bestellnummer. Senden Sie beim Wiederholen denselben Schlüssel und denselben Body.
curl -i https://dleex.com/api/v1/orders -H "Authorization: Bearer dlx_your_key" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: shop-order-981" \
-d '{"service":"seo-article","tier":"basic","text":"An article about trail running shoes, 5 keywords: ..."}'
Wurde mit diesem Schlüssel bereits eine Bestellung aufgegeben, ist die Antwort diese Bestellung in ihrem aktuellen Stand, mit Status 201 und einem zusätzlichen Header. Es wird nichts erneut abgebucht:
HTTP/1.1 201 Created
Idempotent-Replayed: true
- Der Schlüssel gehört zu der Anfrage, mit der er zuerst gesendet wurde. Derselbe Schlüssel mit einem anderen Body, etwa anderen Extras oder einem anderen Gutscheincode, wird mit
422 idempotency_key_reusedabgelehnt, und es wird nichts abgebucht. - Treffen mehrere Anfragen mit demselben Schlüssel gleichzeitig ein, wird eine Bestellung aufgegeben, und die anderen antworten mit ihr. Eine Anfrage, die zu lange warten müsste, antwortet mit
409 idempotency_key_in_progressund bucht nichts ab: Wiederholen Sie sie kurz darauf. - Eine fehlgeschlagene Anfrage, zum Beispiel mit
400,402,404oder einem Fehler bei Extra oder Gutscheincode, verbraucht ihren Schlüssel nicht: Korrigieren Sie sie und senden Sie sie mit demselben Schlüssel erneut. - Ein Schlüssel wird 24 Stunden lang aufbewahrt. Danach gibt derselbe Schlüssel eine neue Bestellung auf.
- Schlüssel gelten getrennt für jedes Konto. Ohne den Header gibt jede Anfrage eine neue Bestellung auf.
Abnahme, Briefings und Überarbeitungswünsche nehmen keinen Schlüssel. Die Abnahme kann gefahrlos wiederholt werden: Ist die Bestellung abgeschlossen, antwortet eine Wiederholung mit 409 order_not_delivered. Ebenso ein Briefing: Ist es angekommen, antwortet eine Wiederholung mit 409 brief_not_expected, und die Bestellung ist in_progress. Bei einem Überarbeitungswunsch ist es anders: Während die Arbeit überarbeitet wird, antwortet eine Wiederholung mit 409 order_not_delivered, doch sobald die Überarbeitung geliefert ist, fordert eine Wiederholung eine weitere Überarbeitung an. Prüfen Sie die Bestellung vor dem Wiederholen eines Überarbeitungswunsches mit GET /orders/{id} (status und revisionsLeft).
Bestellungen verfolgen
GET /orders/{id} gibt eine Bestellung zurück, GET /orders Ihre Bestellungen, die neuesten zuerst. Die Liste akzeptiert status, limit (1 bis 100, standardmäßig 20) und before (eine Bestell-ID, um ältere Bestellungen abzurufen).
Bestellstatus:
| Status | Bedeutung |
|---|---|
awaiting_brief | Mit awaitBrief aufgegeben: wartet auf POST /orders/{id}/brief |
in_progress | Die Arbeit wird ausgeführt |
quality_check | Die Arbeit ist erledigt und wird vor der Lieferung geprüft |
delivered | Das Ergebnis ist fertig, siehe results. Nehmen Sie es bis autoAcceptAt ab oder fordern Sie Änderungen an |
revision | Die angeforderten Änderungen werden umgesetzt |
completed | Sie haben das Ergebnis abgenommen, oder es wurde automatisch abgenommen |
refunded | Das Geld ist auf Ihr Guthaben zurückgeflossen |
Fragen Sie alle paar Minuten ab; häufiger ist nicht nötig. Ist die Bestellung delivered, enthält results die Arbeit: kind ist text (Markdown), report (ein Lieferbericht für Social-Media-Bestellungen) oder files (Dateien zum Herunterladen, mit einer optionalen Notiz in body). Jedes Ergebnis hat eine files-Liste, die bei Texten und Berichten leer ist: Jede Datei hat name, mime, size in Byte und eine url, die bis expiresAt gültig ist, etwa eine Stunde. Rufen Sie die Bestellung erneut ab, um frische Links zu erhalten. Der Link kann auf den Dateispeicher weiterleiten, folgen Sie also Weiterleitungen, z. B. curl -L -o result.png "$url", und senden Sie dabei keinen API-Schlüssel mit: Der Link allein öffnet die Datei.
Abnahme und Überarbeitungen
POST /orders/{id}/acceptnimmt das Ergebnis ab und schließt die Bestellung ab.POST /orders/{id}/revisionmit{"text": "what to change"}fordert Änderungen an, solangerevisionsLeftgrößer als null ist. Wenn die Leistung Dateien annimmt, listetfileIdsdie für den Wunsch hochgeladenen Dateien auf; ohne diese Angabe gehen die fertigen, noch nicht gesendeten Dateien mit.
Wenn Sie eine gelieferte Bestellung weder abnehmen noch eine Überarbeitung anfordern, wird sie 3 Tage nach der Lieferung automatisch abgenommen, zum Zeitpunkt in autoAcceptAt (null in anderen Status). Eine neue Lieferung nach einer Überarbeitung startet die 3 Tage neu. Sie können die Arbeit auch auf der Website abnehmen. Schreiben Sie nach der Lieferung im Bestellchat auf der Website, wird die Bestellung nicht automatisch abgenommen, und autoAcceptAt ist null, bis Sie sie abnehmen oder wir die Arbeit überarbeiten oder erstatten. Nachdem wir Ihre Nachricht beantwortet haben, können wir die 3 Tage auch neu starten: autoAcceptAt zeigt dann den neuen Zeitpunkt.
Fehler
Fehler kommen mit einem HTTP-Status und einem Code:
{ "code": "insufficient_balance" }
| Status | Code | Bedeutung |
|---|---|---|
| 400 | validation | Ein Feld fehlt oder ist ungültig; fields listet sie auf |
| 400 | link_required | Diese Leistung braucht link |
| 400 | files_required | Diese Leistung braucht eine Datei: Geben Sie die Bestellung mit awaitBrief auf und laden Sie sie hoch |
| 400 | script_required | Diese Leistung liest einen Text vor: Senden Sie ihn in script |
| 400 | script_too_long | script ist länger, als das Paket vorliest; maxChars in der Antwort ist das Maximum. Es wurde nichts abgebucht |
| 400 | script_not_accepted | Die Leistung liest keinen Text vor (ihr script in /services ist null): Lassen Sie script weg. Es wurde nichts abgebucht |
| 400 | files_not_accepted, file_too_large | Die Leistung nimmt keine Dateien an, oder die Datei ist größer als ihr maxMb |
| 400 | invalid_idempotency_key | Idempotency-Key ist leer, länger als 255 Zeichen oder kein druckbares ASCII |
| 401 | invalid_api_key | Kein Schlüssel, ein falscher oder ein widerrufener Schlüssel. Schlüssel werden auch widerrufen, wenn die unbestätigte E-Mail-Adresse des Kontos durch Anmelden mit Google oder durch Festlegen eines neuen Passworts bestätigt wird |
| 402 | insufficient_balance | Nicht genug Guthaben; es wurde nichts abgebucht |
| 404 | package_not_found, order_not_found, file_not_found | Leistung, Paket, Bestellung oder Datei nicht vorhanden |
| 409 | order_not_delivered, no_revisions_left | Die Bestellung ist dafür nicht im passenden Status |
| 409 | brief_not_expected | Die Bestellung wartet nicht auf ihr Briefing: Sie wurde ohne awaitBrief aufgegeben, oder ihr Briefing wurde bereits gesendet |
| 409 | uploads_closed | Dateien werden nur angenommen, solange die Bestellung auf ihr Briefing wartet oder geliefert ist |
| 409 | files_limit | Mehr Dateien, als die Leistung mit einem Briefing oder Wunsch annimmt, oder mehr als 5 Dateien bzw. 4 GB für die Bestellung |
| 409 | upload_quota | Mit dieser Datei liegen die Dateien der Bestellung (gesendete und unfertige Uploads eingeschlossen) zusammen mit den am letzten Tag begonnenen und seitdem zurückgezogenen oder abgelehnten über 12 GB: Versuchen Sie es nach retryAt erneut |
| 409 | files_not_ready, file_rejected | Eine zu sendende Datei wird noch geprüft oder wurde abgelehnt |
| 409 | upload_incomplete | Über den Link wurde noch nichts hochgeladen: Schließen Sie den PUT ab und schließen Sie dann den Upload erneut ab |
| 409 | file_in_use, file_busy | Die Datei wurde mit dem Briefing oder einem Wunsch gesendet und bleibt bei der Bestellung, oder sie wird gerade von ihrer Prüfung verschoben: Versuchen Sie es gleich noch einmal |
| 409 | addon_unavailable | Ein Extra wird für diese Leistung und dieses Paket nicht angeboten |
| 409 | promo_not_found, promo_inactive, promo_used_up, promo_already_used, promo_first_order_only, promo_min_order | Der Gutscheincode existiert nicht, ist derzeit nicht aktiv, ist aufgebraucht, wurde von Ihnen bereits verwendet, gilt nur für eine erste Bestellung oder erfordert einen höheren Bestellwert. Es wurde nichts abgebucht |
| 409 | idempotency_key_in_progress | Eine Anfrage mit diesem Idempotency-Key wird noch verarbeitet; wiederholen Sie sie kurz darauf |
| 410 | upload_expired, file_removed | Der Upload-Link ist abgelaufen, bevor etwas hochgeladen wurde, oder Sie haben die Datei zurückgezogen: Starten Sie einen neuen Upload |
| 415 | file_type_not_accepted | Der angegebene mime gehört zu keiner Art, die die Leistung annimmt |
| 422 | idempotency_key_reused | Dieser Idempotency-Key wurde bereits mit einer anderen Anfrage verwendet |
| 422 | upload_size_mismatch, file_type_not_accepted | Die hochgeladene Datei hat nicht die Größe size, oder ihre Bytes gehören zu keiner Art, die die Leistung annimmt; sie wurde gelöscht |
| 422 | file_unreadable, recording_no_sound, check_failed | Abschluss einer Datei, die bei der Prüfung abgelehnt wurde: Sie lässt sich nicht öffnen, die Aufnahme hat keinen Ton, oder sie konnte nicht geprüft werden. Laden Sie die Datei erneut oder eine andere hoch |
| 429 | rate_limited | Mehr als 120 Anfragen pro Minute mit einem Schlüssel; warten Sie die Sekunden aus Retry-After ab |
Rückerstattungen
Wenn wir eine Bestellung erstatten, geht das Geld zurück auf das Guthaben, und die Bestellung wird refunded.