API
Kendi web sitenizden, mağazanızdan veya betiğinizden hizmet siparişi verin: hizmetleri ve fiyatları listeleyin, görev tanımıyla sipariş verin, siparişleri takip edin ve sonuçları alın. Sitedeki hizmetin aynısıdır; bu nedenle API üzerinden verilen siparişler hesabınızda da görünür.
Başlarken
- Giriş yapın ve Bakiye ve API anahtarları sayfasını açın.
- Bir anahtar oluşturun. Anahtar yalnızca bir kez gösterilir: kopyalayın ve bir şifre gibi gizli tutun. Bir anahtarı dilediğiniz zaman iptal edebilirsiniz.
- Bakiye yükleyin. API üzerinden verilen siparişler, ABD doları cinsinden bakiyeden ödenir.
Anahtarı her istekle birlikte gönderin:
Authorization: Bearer dlx_your_key
API adresi: https://dleex.com/api/v1. İstekler ve yanıtlar JSON biçimindedir. Fiyatlar ve tutarlar tam sayı ABD senti cinsindendir: 1500, 15,00 $ anlamına gelir.
Hizmetler
GET /services, sipariş edilebilecekleri listeler.
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, işin ne kadar sürdüğünü; revisions, kaç kez değişiklik isteyebileceğinizi gösterir. addons, tiers içindeki paketlerle birlikte sipariş edebileceğiniz ek hizmetlerdir: fiyatı paketin fiyatına, extraDays ise paketin teslim süresine eklenir (negatifse daha hızlıdır, ancak hiçbir zaman 1 günün altına inmez). briefQuestions, hizmetin görev hakkında sorduğu sorulardır, bazılarında bir hint bulunur; sipariş verirken bunları answers içinde yanıtlayın. Hizmet hiçbir şey sormuyorsa liste boştur. Bir bağlantının açtığı içerik (örneğin bir profil veya gönderi ya da altyazı eklenecek bir kayıt) üzerinden yapılan bir hizmette linkRequired değeri true olur: bu hizmetin siparişi için link gerekir.
Brifle birlikte dosya almayan bir hizmette files değeri null olur. Aksi halde hangi dosyaları aldığını belirtir, örneğin {"accept": ["image"], "maxFiles": 3, "maxMb": 5, "required": true, "insteadOfLink": false}: dosya türleri (image, audio, video, document: PDF, DOCX, XLSX), bir brif veya revizyon talebiyle kaç dosya gönderilebileceği, her dosyanın MB cinsinden en fazla ne kadar büyük olabileceği, brif için en az bir dosyanın gerekip gerekmediği ve bir dosyanın link yerine geçip geçemeyeceği (bu durumda dosyasız gönderilen siparişler için linkRequired yine true olur). Bkz. Dosyalar.
Metin seslendirmeyen bir hizmette script değeri null olur. Seslendirme hizmetinde her paketin okuduğu en uzun metin karakter cinsinden belirtilir, örneğin {"maxChars": {"basic": 1000, "standard": 3000, "premium": 9000}}: bu hizmetin siparişleri için script, yani kelimesi kelimesine okunacak metin gerekir. Kayıt sentezlenmiş bir sesle okunur: kaydı nerede yayımlarsanız yayımlayın, dinleyicilerinize sesin sentezlenmiş olduğunu bildirin (bkz. Hizmet Şartları).
Bakiye
GET /balance
{ "balanceUsdCents": 10000, "currency": "USD" }
Sipariş verme
POST /orders. Bedel (paket ve ek hizmetler, varsa indirim düşülerek) bakiyeden alınır ve iş hemen başlar.
| Alan | ||
|---|---|---|
service | zorunlu | /services içindeki hizmet |
tier | zorunlu | basic, standard veya premium |
text | answers, script veya awaitBrief yoksa zorunlu | Görev: ne yapılacağı, en fazla 10.000 karakter. script ile birlikte: nasıl okunacağı (ton, tempo, adların nasıl söyleneceği) |
link | isteğe bağlı | Sayfanın, profilin veya gönderinin ya da bir kaydın bağlantısı: dosyanın doğrudan bağlantısı veya bir Dropbox ya da Yandex Disk bağlantısı. linkRequired değeri true olan hizmetlerde zorunludur |
answers | isteğe bağlı | Hizmetin briefQuestions sorularına yanıtlar: [{"q": "question", "a": "answer"}], en fazla 8 adet, her yanıt en fazla 5.000 karakter |
script | /services içindeki script değeri null değilse zorunlu, diğer durumlarda reddedilir | Kelimesi kelimesine seslendirilecek metin; paketin maxChars değerine kadar (en fazla 20.000 karakter, satır sonu bir karakter sayılır). Paragraflar arasında boş satır bırakın |
locale | isteğe bağlı | Sonucun dili, en veya ru. Varsayılan olarak hesabınızın dili |
addons | isteğe bağlı | /services içinde bu paket için sunulan ek hizmetlerin kimlikleri, örneğin [7] |
promoCode | isteğe bağlı | Bir promosyon kodu; geçerli değilse sipariş verilmez (bkz. Hatalar) |
awaitBrief | isteğe bağlı | Brifi daha sonra, dosyaları yükledikten sonra göndermek için true: sipariş ödenir ve awaiting_brief durumunda bekler. Bu durumda text, link, answers ve script göndermeyin. Bkz. Dosyalar |
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 isteğe bağlıdır ve isteği güvenle tekrarlamanızı sağlar; her yeni sipariş için yeni bir anahtar gerekir. Aşağıdaki Idempotency bölümüne bakın.
text veya en az bir yanıt ya da her ikisini birden gönderin; seslendirme için script yeterlidir. Her soruyu q içine briefQuestions içinde yazıldığı gibi, sipariş dilinde yazın ve yanıtınız olmayan soruları göndermeyin:
{
"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" }
]
}
Yanıt, siparişin kendisidir (durum 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": []
}
Dosyalar
Bazı hizmetler, müşterinin dosyaları üzerinden çalışır; örneğin metne dökülecek sayfa görselleri veya altyazı eklenecek bir kayıt: bu hizmetlerin /services içindeki files değeri null değildir. Dosyalar, brifini bekleyen bir siparişe yüklenir:
- Siparişi
"awaitBrief": trueile vetext,link,answersvescriptolmadan verin. Sipariş hemen ödenir ve durumuawaiting_briefolur; teslim süresi brif ile başlar. - Her dosya için
{"name": "page-1.png", "size": 482113, "mime": "image/png"}ilePOST /orders/{id}/filesgönderin:sizebayt cinsinden tam boyuttur,mimeisteğe bağlıdır. Yanıt (201), dosyayı ve dosyanın nereye yükleneceğini içerir:
{
"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" }
}
- Dosyanın baytlarını,
upload.expiresAtzamanından önce (bir saat), tam olarak verilenheadersile ve API anahtarı olmadanupload.urladresinePUTile gönderin:
curl -X PUT "$url" -H "content-type: application/octet-stream" --data-binary @page-1.png
POST /orders/{id}/files/{fileId}/complete. Boyutusizedeğerinden farklı olan veya baytlarıacceptiçindeki bir türe ait olmayan dosya422ile reddedilir ve silinir: ad vemimedikkate alınmaz. Aksi halde yanıt, artıkcheckingdurumundaki dosyadır. Birkaç saniye sonra (uzun bir kayıtta birkaç dakika sonra) dosyareadyolur ya darejectedolur ve gerekçereasoniçinde yer alır, örneğinrecording_no_soundveyafile_unreadable. Siparişinfilesalanı dosyaların durumunu gösterir.POST /orders/{id}/briefisteğini,POST /ordersiçindeki gibitext,link,answersvescriptile gönderin. Henüz gönderilmemiş hazır dosyalar brifle birlikte gider; isterseniz gönderileceklerifileIdsiçinde listeleyin. Bunlardan biri hâlâcheckingdurumundayken brif409 files_not_readyile reddedilir: biraz sonra yeniden gönderin. Yanıt (200), artıkin_progressdurumundaki sipariştir.
DELETE /orders/{id}/files/{fileId}, henüz gönderilmemiş bir dosyayı geri alır. Bir sipariş en fazla 5 dosya ve toplam 4 GB alır; yüklemesi başlatılmış bir dosya, tamamlanana veya geri alınana kadar hesaba katılır; geri alınan veya reddedilen dosyalar ise yüklemelerinin başlangıcından itibaren bir gün boyunca, siparişin dosyalarıyla birlikte 12 GB sınırına dahil edilir: bu sınır aşıldığında yükleme 409 upload_quota ve yüklemenin yeniden kabul edileceği zamanı gösteren retryAt ile reddedilir. Teslim edilmiş bir sipariş, revizyon talebi için de dosya alır: dosyaları aynı şekilde yükleyin, ardından talep ile birlikte fileIds gönderin.
awaitBrief olmadan, dosyaları required olan bir hizmetin siparişi 400 files_required ile; dosyanın bağlantı yerine geçebildiği bir hizmetin bağlantısız gönderilen siparişi ise 400 link_required ile reddedilir.
Siparişte files, dosyalarınızı status değerleriyle birlikte listeler; fileIds ise brifle birlikte gidenleri gösterir. Hazır bir dosyanın, sonuç dosyalarında olduğu gibi expiresAt zamanına kadar çalışan bir url adresi vardır. Dosyalar, siparişin kapanmasından itibaren 30 gün saklanır.
Idempotency
Sipariş zaten verildikten sonra bir istek zaman aşımına uğrayabilir. POST /orders isteğini iki kez ödeme yapmadan tekrarlamak için isteğe bir Idempotency-Key başlığı ekleyin: her sipariş için bir kez seçtiğiniz, 1 ile 255 arası yazdırılabilir ASCII karakterden oluşan bir dize; örneğin bir UUID veya kendi sipariş numaranız. İsteği tekrarlarken aynı anahtarı ve aynı gövdeyi gönderin.
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: ..."}'
Bu anahtarla zaten bir sipariş verildiyse yanıt, o siparişin güncel halidir; durum 201'dir ve bir başlık daha eklenir. Yeniden hiçbir tahsilat yapılmaz:
HTTP/1.1 201 Created
Idempotent-Replayed: true
- Anahtar, ilk kez birlikte gönderildiği isteğe aittir. Aynı anahtar farklı bir gövdeyle (örneğin başka ek hizmetler veya başka bir promosyon koduyla) gönderilirse
422 idempotency_key_reusedile reddedilir ve hiçbir tahsilat yapılmaz. - Aynı anahtarla birkaç istek aynı anda gelirse tek bir sipariş verilir ve diğer istekler bu siparişle yanıtlanır. Çok uzun beklemesi gereken bir istek
409 idempotency_key_in_progressile yanıtlanır ve hiçbir tahsilat yapılmaz: kısa bir süre sonra tekrarlayın. - Başarısız olan bir istek (örneğin
400,402,404ya da bir ek hizmet veya promosyon kodu hatasıyla) anahtarını tüketmez: hatayı düzeltin ve aynı anahtarla yeniden gönderin. - Anahtar 24 saat saklanır. Bu süreden sonra aynı anahtar yeni bir sipariş verir.
- Anahtarlar her hesap için ayrıdır. Başlık olmadan her istek yeni bir sipariş verir.
Onaylama, brif ve revizyon talepleri anahtar almaz. Onaylamayı tekrarlamak güvenlidir: sipariş tamamlandıktan sonra tekrar 409 order_not_delivered yanıtını alır. Brif için de aynısı geçerlidir: brif kabul edildikten sonra tekrar 409 brief_not_expected yanıtını alır ve sipariş in_progress durumundadır. Revizyon talebi farklıdır: iş yeniden yapılırken tekrar 409 order_not_delivered yanıtını alır, ancak yeniden yapılan iş teslim edildikten sonra tekrar, yeni bir revizyon talep eder. Bir revizyon talebini tekrarlamadan önce siparişi GET /orders/{id} (status ve revisionsLeft) ile kontrol edin.
Siparişlerin takibi
GET /orders/{id} tek bir siparişi, GET /orders ise siparişlerinizi en yeniden başlayarak döndürür. Liste status, limit (1 ile 100 arası, varsayılan 20) ve before (daha eski siparişleri almak için bir sipariş kimliği) parametrelerini alır.
Sipariş durumu:
| Durum | Anlamı |
|---|---|
awaiting_brief | awaitBrief ile verildi: POST /orders/{id}/brief bekleniyor |
in_progress | İş yapılıyor |
quality_check | İş tamamlandı ve teslimattan önce kontrol ediliyor |
delivered | Sonuç hazır, bkz. results. autoAcceptAt zamanına kadar onaylayın veya değişiklik isteyin |
revision | İstediğiniz değişiklikler yapılıyor |
completed | Sonucu onayladınız veya sonuç otomatik olarak onaylandı |
refunded | Para bakiyenize iade edildi |
Birkaç dakikada bir kontrol edin; daha sık sormanıza gerek yoktur. Sipariş delivered olduğunda iş results içindedir: kind değeri text (Markdown), report (sosyal medya siparişleri için teslimat raporu) veya files (indirilecek dosyalar, body içinde isteğe bağlı bir notla) olur. Her sonucun, metinler ve raporlar için boş olan bir files listesi vardır: her dosyanın name, mime, bayt cinsinden size değerleri ve expiresAt zamanına (yaklaşık bir saat) kadar çalışan bir url adresi bulunur. Yeni bağlantılar için siparişi yeniden okuyun. Bağlantı dosya deposuna yönlendirebilir; bu nedenle yönlendirmeleri izleyin, örneğin curl -L -o result.png "$url", ve bağlantıyla birlikte API anahtarı göndermeyin: dosyayı açmak için bağlantı tek başına yeterlidir.
Onaylama ve revizyonlar
POST /orders/{id}/acceptsonucu onaylar ve siparişi tamamlar.{"text": "what to change"}ile gönderilenPOST /orders/{id}/revision,revisionsLeftsıfırdan büyük olduğu sürece değişiklik ister. Hizmet dosya alıyorsafileIds, talep için yüklenen dosyaları listeler; bu alan yoksa henüz gönderilmemiş hazır dosyalar taleple birlikte gider.
Teslim edilen bir siparişi ne onaylar ne de revize ettirirseniz sipariş, teslimattan 3 gün sonra, autoAcceptAt içindeki zamanda (diğer durumlarda null) otomatik olarak onaylanır. Bir revizyondan sonraki yeni teslimat 3 günlük süreyi yeniden başlatır. İşi sitede de onaylayabilirsiniz. Teslimattan sonra sitedeki sipariş sohbetine yazarsanız sipariş otomatik olarak onaylanmaz ve siz onaylayana ya da biz işi yeniden yapana veya bedelini iade edene kadar autoAcceptAt değeri null olur. Mesajınızı yanıtladıktan sonra 3 günlük süreyi yeniden başlatabiliriz: bu durumda autoAcceptAt yeni zamanı gösterir.
Hatalar
Hatalar bir HTTP durumu ve bir kodla birlikte döner:
{ "code": "insufficient_balance" }
| Durum | Kod | Anlamı |
|---|---|---|
| 400 | validation | Bir alan eksik veya hatalı; fields bunları listeler |
| 400 | link_required | Bu hizmet için link gerekir |
| 400 | files_required | Bu hizmet için dosya gerekir: siparişi awaitBrief ile verin ve dosyayı yükleyin |
| 400 | script_required | Bu hizmet bir metni seslendirir: metni script içinde gönderin |
| 400 | script_too_long | script, paketin okuduğundan uzun; yanıttaki maxChars alabileceği en fazla uzunluktur. Hiçbir tahsilat yapılmadı |
| 400 | script_not_accepted | Hizmet metin seslendirmez (/services içindeki script değeri null): script göndermeyin. Hiçbir tahsilat yapılmadı |
| 400 | files_not_accepted, file_too_large | Hizmet dosya almıyor veya dosya, hizmetin maxMb değerinden büyük |
| 400 | invalid_idempotency_key | Idempotency-Key boş, 255 karakterden uzun veya yazdırılabilir ASCII değil |
| 401 | invalid_api_key | Anahtar yok, anahtar hatalı veya iptal edilmiş. Hesabın doğrulanmamış e-postası Google ile giriş yapılarak veya yeni şifre belirlenerek doğrulandığında da anahtarlar iptal edilir |
| 402 | insufficient_balance | Bakiyede yeterli para yok; hiçbir tahsilat yapılmadı |
| 404 | package_not_found, order_not_found, file_not_found | Böyle bir hizmet, paket, sipariş veya dosya yok |
| 409 | order_not_delivered, no_revisions_left | Sipariş bu işlem için uygun durumda değil |
| 409 | brief_not_expected | Sipariş brifini beklemiyor: awaitBrief olmadan verildi veya brifi zaten gönderildi |
| 409 | uploads_closed | Dosyalar yalnızca sipariş brifini beklerken veya teslim edilmişken kabul edilir |
| 409 | files_limit | Hizmetin bir brif veya taleple aldığından fazla dosya ya da sipariş için 5 dosya veya 4 GB sınırı aşıldı |
| 409 | upload_quota | Bu dosyayla birlikte, siparişin dosyaları (gönderilenler ve tamamlanmamış yüklemeler dahil) ile son bir gün içinde başlatılıp sonra geri alınan veya reddedilen dosyalar 12 GB'ı aşıyor: retryAt zamanından sonra yeniden deneyin |
| 409 | files_not_ready, file_rejected | Gönderilecek bir dosya hâlâ kontrol ediliyor veya reddedildi |
| 409 | upload_incomplete | Bağlantıya henüz hiçbir şey yüklenmedi: PUT işlemini bitirin, ardından yüklemeyi yeniden tamamlayın |
| 409 | file_in_use, file_busy | Dosya brifle veya bir taleple birlikte gönderildi ve siparişte kalır ya da kontrol sırasında taşınıyor: biraz sonra yeniden deneyin |
| 409 | addon_unavailable | Bir ek hizmet bu hizmet ve paket için sunulmuyor |
| 409 | promo_not_found, promo_inactive, promo_used_up, promo_already_used, promo_first_order_only, promo_min_order | Promosyon kodu mevcut değil, şu anda etkin değil, kullanım hakkı tükendi, sizin tarafınızdan zaten kullanıldı, yalnızca ilk sipariş için geçerli veya daha yüksek tutarlı bir sipariş gerektiriyor. Hiçbir tahsilat yapılmadı |
| 409 | idempotency_key_in_progress | Bu Idempotency-Key ile gönderilen bir istek hâlâ işleniyor; kısa bir süre sonra tekrarlayın |
| 410 | upload_expired, file_removed | Yükleme bağlantısının süresi hiçbir şey yüklenmeden doldu veya dosyayı geri aldınız: yeni bir yükleme başlatın |
| 415 | file_type_not_accepted | Belirtilen mime, hizmetin kabul ettiği bir türe ait değil |
| 422 | idempotency_key_reused | Bu Idempotency-Key farklı bir istekle zaten kullanıldı |
| 422 | upload_size_mismatch, file_type_not_accepted | Yüklenen dosyanın boyutu size ile aynı değil veya baytları hizmetin kabul ettiği bir türe ait değil; dosya silindi |
| 422 | file_unreadable, recording_no_sound, check_failed, document_no_text, document_protected | Kontrolün reddettiği bir dosya tamamlanıyor: dosya açılmıyor, kayıtta ses yok veya dosya kontrol edilemedi. Dosyayı yeniden ya da başka bir dosya yükleyin. Belgede okunacak metin yok, örneğin bir tarama (document_no_text), veya belge şifreyle korunuyor (document_protected). |
| 429 | rate_limited | Bir anahtarla dakikada 120 istek sınırı aşıldı; Retry-After içindeki saniye kadar bekleyin |
İadeler
Bir siparişin bedelini iade edersek para bakiyeye geri döner ve sipariş refunded olur.