API
お客様のウェブサイト、ショップ、スクリプトからサービスを注文できます。サービスと料金の一覧の取得、依頼内容を添えた注文、進捗の確認、成果物の取得が可能です。サイトと同じサービスなので、API経由の注文もお客様のアカウントに表示されます。
はじめに
- ログインして残高とAPIキーを開きます。
- キーを作成します。キーは一度しか表示されません。コピーして、パスワードと同様に秘密にしてください。キーはいつでも無効化できます。
- 残高をチャージします。API経由の注文はこの残高から米ドルで支払われます。
すべてのリクエストにキーを付けて送信します。
Authorization: Bearer dlx_your_key
APIのアドレス:https://dleex.com/api/v1。リクエストとレスポンスはJSON形式です。料金と金額は整数の米セント単位です。1500は$15.00を表します。
サービス
GET /servicesは注文可能なサービスの一覧を返します。
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は作業にかかる日数、revisionsは修正を依頼できる回数です。addonsは、tiersに含まれるプランと一緒に注文できるオプションです。オプションの料金はプランの料金に、extraDaysはプランの納期に加算されます(負の値は納期の短縮を表しますが、1日未満にはなりません)。briefQuestionsは、サービスが作業内容について尋ねる質問で、一部にはhintが付いています。注文時にanswersで回答してください。質問のないサービスでは、この一覧は空になります。linkRequiredは、プロフィールや投稿、字幕を付ける録音など、リンク先の内容をもとに作業するサービスではtrueになり、その注文にはlinkが必要です。
filesは、依頼内容と一緒にファイルを受け付けないサービスではnullです。それ以外のサービスでは、受け付けるファイルを示します。例:{"accept": ["image"], "maxFiles": 3, "maxMb": 5, "required": true, "insteadOfLink": false}。ファイルの種類(image、audio、video)、1件の依頼内容または修正依頼に添付できるファイル数、1ファイルあたりの最大サイズ(MB)、依頼内容にファイルが1つ以上必要かどうか、ファイルでlinkを代替できるかどうかを表します(代替できる場合も、ファイルなしで送信する注文ではlinkRequiredはtrueのままです)。ファイルを参照してください。
scriptは、テキストを読み上げないサービスではnullです。ナレーションサービスでは、各プランで読み上げられるテキストの最大文字数を示します。例:{"maxChars": {"basic": 1000, "standard": 3000, "premium": 9000}}。その注文にはscriptが必要で、一字一句そのまま読み上げるテキストを指定します。録音は合成音声で読み上げられます。どこで公開する場合も、音声が合成音声であることを聞き手に明示してください(利用規約を参照)。
残高
GET /balance
{ "balanceUsdCents": 10000, "currency": "USD" }
注文する
POST /orders。料金(プランとオプションの合計から割引を差し引いた額)が残高から引き落とされ、すぐに作業が始まります。
| フィールド | ||
|---|---|---|
service | 必須 | /servicesのサービス |
tier | 必須 | basic、standard、premiumのいずれか |
text | answers、script、awaitBriefのいずれもない場合は必須 | 依頼内容:作業の内容(最大10,000文字)。scriptがある場合は読み方(トーン、スピード、名前の読み方など) |
link | 任意 | ページ、プロフィール、投稿、または録音へのリンク:ファイルへの直接リンク、またはDropboxやYandex Diskのリンク。linkRequiredがtrueの場合は必須 |
answers | 任意 | サービスのbriefQuestionsへの回答:[{"q": "question", "a": "answer"}]。最大8件、各回答は最大5,000文字 |
script | /servicesのscriptがnullでない場合は必須、それ以外の場合は指定不可 | 一字一句そのまま読み上げるテキスト。プランのmaxCharsまで(上限20,000文字、改行は1文字として数えます)。段落の間には空行を入れてください |
locale | 任意 | 成果物の言語。enまたはru。デフォルトはアカウントの言語 |
addons | 任意 | /servicesでこのプランに提供されているオプションのID。例:[7] |
promoCode | 任意 | クーポンコード。適用できない場合、注文は作成されません(エラーを参照) |
awaitBrief | 任意 | ファイルのアップロード後に依頼内容を送る場合はtrue。注文は支払い済みとなり、awaiting_briefの状態で待機します。この場合、text、link、answers、scriptは指定しないでください。ファイルを参照 |
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は任意で、リクエストを安全に再送できるようにします。新しい注文にはそれぞれ新しいキーが必要です。下記の冪等性を参照してください。
textか1件以上の回答、またはその両方を指定してください。ナレーションの場合はscriptだけで足ります。qにはbriefQuestionsにあるとおりの質問を注文の言語で記入し、回答のない質問は省略してください。
{
"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" }
]
}
レスポンスは注文です(ステータス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": []
}
ファイル
文字起こしするページの画像や字幕を付ける録音など、購入者のファイルをもとに作業するサービスがあります。こうしたサービスでは、/servicesのfilesがnullではありません。ファイルは、依頼内容を待っている注文にアップロードします。
"awaitBrief": trueを指定し、text、link、answers、scriptを指定せずに注文します。支払いはすぐに行われ、ステータスはawaiting_briefになります。納期は依頼内容を送信した時点から始まります。- ファイルごとに、
POST /orders/{id}/filesに{"name": "page-1.png", "size": 482113, "mime": "image/png"}を送信します。sizeはバイト単位の正確なサイズで、mimeは任意です。レスポンス(201)は、ファイルとそのアップロード先です。
{
"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" }
}
upload.expiresAt(1時間後)までに、指定されたheadersをそのまま付け、APIキーは付けずに、ファイルのバイト列をupload.urlへPUTします。
curl -X PUT "$url" -H "content-type: application/octet-stream" --data-binary @page-1.png
POST /orders/{id}/files/{fileId}/completeを送信します。サイズがsizeと異なるファイルや、バイト列がacceptのどの種類にも当たらないファイルは422で拒否され、削除されます。ファイル名やmimeは判定に使われません。それ以外の場合、レスポンスはファイルで、状態はcheckingになります。数秒後(長い録音の場合は数分後)にreadyになるか、rejectedとなってreasonに理由が入ります。例:recording_no_sound、file_unreadable。各ファイルの状態は注文のfilesで確認できます。POST /orders/{id}/briefに、POST /ordersと同様にtext、link、answers、scriptを送信します。まだ送信していない準備済みのファイルが一緒に送られます。送るファイルを指定する場合はfileIdsに列挙してください。いずれかのファイルがまだcheckingの間は、依頼内容は409 files_not_readyで拒否されます。少し時間をおいて再送してください。レスポンス(200)は注文で、状態はin_progressになります。
DELETE /orders/{id}/files/{fileId}は、まだ送信していないファイルを取り消します。1件の注文に添付できるのは、最大5ファイル・合計4 GBまでです。アップロードを開始したファイルは、完了するか取り消されるまで数に含まれます。また、取り消されたファイルや拒否されたファイルは、アップロード開始から1日間、注文のファイルと合わせて12 GBの上限に算入されます。上限を超えると、アップロードは409 upload_quotaとretryAt(再び受け付けられる時刻)で拒否されます。納品済みの注文では、修正依頼用のファイルも受け付けます。同じ方法でアップロードし、修正依頼と一緒にfileIdsを送信してください。
awaitBriefを指定しない場合、ファイルがrequiredのサービスの注文は400 files_requiredで拒否されます。また、ファイルでリンクを代替できるサービスの注文をリンクなしで送ると、400 link_requiredで拒否されます。
注文のfilesには、お客様のファイルがstatusとともに一覧表示され、fileIdsには依頼内容と一緒に送られたファイルが入ります。準備済みのファイルには、成果物のファイルと同様に、expiresAtまで有効なurlがあります。ファイルは注文の終了後30日間保管されます。
冪等性
注文が作成された後に、リクエストがタイムアウトすることがあります。二重に支払うことなくPOST /ordersを再送するには、Idempotency-Keyヘッダーを付けて送信してください。値は1~255文字の印字可能なASCII文字列で、UUIDや独自の注文番号など、注文ごとに一度だけ決めます。再送するときは、同じキーと同じボディを送信してください。
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: ..."}'
このキーで既に注文が作成されている場合、レスポンスはその注文の現在の状態で、ステータスは201、ヘッダーが1つ追加されます。再度課金されることはありません。
HTTP/1.1 201 Created
Idempotent-Replayed: true
- キーは、最初に送信したリクエストに紐づきます。同じキーで異なるボディ(別のオプションや別のクーポンコードなど)を送ると
422 idempotency_key_reusedで拒否され、課金はされません。 - 同じキーのリクエストが同時に複数届いた場合、作成される注文は1件で、他のリクエストはその注文を返します。待ち時間が長すぎるリクエストは
409 idempotency_key_in_progressを返し、課金はされません。少し時間をおいて再送してください。 - 失敗したリクエスト(
400、402、404、オプションやクーポンコードのエラーなど)では、キーは消費されません。問題を修正し、同じキーで再送してください。 - キーは24時間保持されます。それ以降は、同じキーで新しい注文が作成されます。
- キーはアカウントごとに独立しています。ヘッダーがない場合、リクエストのたびに新しい注文が作成されます。
承認、依頼内容、修正依頼にはキーは不要です。承認は安全に再送できます。注文が完了した後の再送には409 order_not_deliveredが返ります。依頼内容も同様で、受け付けられた後の再送には409 brief_not_expectedが返り、注文はin_progressのままです。修正依頼は異なります。作業のやり直し中の再送には409 order_not_deliveredが返りますが、やり直しが納品された後に再送すると、もう一度修正を依頼することになります。修正依頼を再送する前に、GET /orders/{id} (status と revisionsLeft)で注文を確認してください。
注文の確認
GET /orders/{id}は1件の注文を、GET /ordersはお客様の注文を新しい順に返します。一覧ではstatus、limit(1~100、デフォルトは20)、before(注文ID。これより古い注文を取得します)を指定できます。
注文のステータス:
| ステータス | 意味 |
|---|---|
awaiting_brief | awaitBrief付きで作成済み:POST /orders/{id}/briefを待っています |
in_progress | 作業中です |
quality_check | 作業が完了し、納品前のチェック中です |
delivered | 成果物の準備ができました。resultsを参照してください。autoAcceptAtまでに承認するか、修正を依頼してください |
revision | ご依頼の修正を行っています |
completed | 成果物が承認されたか、自動的に承認されました |
refunded | 代金が残高に返金されました |
数分おきに確認してください。それより頻繁に確認する必要はありません。注文がdeliveredになると、resultsに成果物が入ります。kindはtext(Markdown)、report(SNS関連の注文の納品レポート)、files(ダウンロード用のファイル。bodyに任意のメモ付き)のいずれかです。各成果物にはfilesの一覧があり、テキストとレポートでは空です。各ファイルにはname、mime、バイト単位のsizeと、expiresAt(約1時間)まで有効なurlがあります。新しいリンクが必要な場合は、注文をもう一度取得してください。リンクはファイルストレージにリダイレクトされる場合があるため、リダイレクトに従ってください(例:curl -L -o result.png "$url")。また、APIキーは付けずに送信してください。リンクだけでファイルを開けます。
承認と修正
POST /orders/{id}/acceptは成果物を承認し、注文を完了します。POST /orders/{id}/revisionに{"text": "what to change"}を送ると、修正を依頼できます(revisionsLeftが0より大きい間)。ファイルを受け付けるサービスでは、修正依頼用にアップロードしたファイルをfileIdsに列挙します。指定しない場合は、まだ送信していない準備済みのファイルが一緒に送られます。
納品された注文を承認も修正依頼もしない場合、納品から3日後のautoAcceptAtの時刻に自動的に承認されます(それ以外の状態ではnull)。修正後に再び納品されると、3日間のカウントが新たに始まります。納品はサイト上でも承認できます。納品後にサイトの注文チャットにメッセージを書き込むと、注文は自動承認されず、お客様が承認するか、こちらで作業をやり直すか返金するまで、autoAcceptAtはnullになります。メッセージへの返信後に、3日間のカウントを再開することもあります。その場合、autoAcceptAtに新しい時刻が表示されます。
エラー
エラーはHTTPステータスとコードで返されます。
{ "code": "insufficient_balance" }
| ステータス | コード | 意味 |
|---|---|---|
| 400 | validation | フィールドが不足しているか、正しくありません。fieldsに該当するフィールドが列挙されます |
| 400 | link_required | このサービスにはlinkが必要です |
| 400 | files_required | このサービスにはファイルが必要です。awaitBriefを指定して注文し、ファイルをアップロードしてください |
| 400 | script_required | このサービスはテキストを読み上げます。テキストをscriptで送信してください |
| 400 | script_too_long | scriptがプランで読み上げられる文字数を超えています。レスポンスのmaxCharsが上限です。課金はされていません |
| 400 | script_not_accepted | このサービスはテキストを読み上げません(/servicesのscriptがnull)。scriptを省略してください。課金はされていません |
| 400 | files_not_accepted, file_too_large | このサービスはファイルを受け付けないか、ファイルがmaxMbを超えています |
| 400 | invalid_idempotency_key | Idempotency-Keyが空、255文字超、または印字可能なASCII文字以外を含んでいます |
| 401 | invalid_api_key | キーがない、キーが間違っている、またはキーが無効化されています。アカウントの未確認のメールアドレスが、Googleでのログインや新しいパスワードの設定によって確認された場合も、キーは無効化されます |
| 402 | insufficient_balance | 残高が不足しています。課金はされていません |
| 404 | package_not_found, order_not_found, file_not_found | 該当するサービス、プラン、注文、ファイルがありません |
| 409 | order_not_delivered, no_revisions_left | 注文がこの操作を行える状態ではありません |
| 409 | brief_not_expected | 注文は依頼内容を待っていません。awaitBriefなしで作成されたか、依頼内容が既に送信されています |
| 409 | uploads_closed | ファイルを受け付けるのは、注文が依頼内容を待っている間か、納品済みの場合のみです |
| 409 | files_limit | 1件の依頼内容または修正依頼でサービスが受け付ける数を超えるファイル、または注文全体で5ファイルか4 GBを超えています |
| 409 | upload_quota | このファイルを含め、注文のファイル(送信済みのものと未完了のアップロードを含む)と、過去1日以内に開始され、その後取り消されたか拒否されたファイルの合計が12 GBを超えています。retryAt以降に再試行してください |
| 409 | files_not_ready, file_rejected | 送信するファイルがまだチェック中か、拒否されました |
| 409 | upload_incomplete | リンクにまだ何もアップロードされていません。PUTを完了してから、もう一度アップロードを完了してください |
| 409 | file_in_use, file_busy | ファイルは依頼内容または修正依頼と一緒に送られて注文に残っているか、チェックのために移動中です。少し時間をおいて再試行してください |
| 409 | addon_unavailable | このサービスとプランでは提供されていないオプションです |
| 409 | promo_not_found, promo_inactive, promo_used_up, promo_already_used, promo_first_order_only, promo_min_order | クーポンコードが存在しない、現在有効でない、利用上限に達した、既に使用済み、初回注文限定、またはより高額な注文が必要です。課金はされていません |
| 409 | idempotency_key_in_progress | このIdempotency-Keyのリクエストはまだ処理中です。少し時間をおいて再送してください |
| 410 | upload_expired, file_removed | 何もアップロードされないうちにアップロード用リンクの期限が切れたか、ファイルを取り消しました。新しいアップロードを開始してください |
| 415 | file_type_not_accepted | 指定されたmimeは、サービスが受け付ける種類ではありません |
| 422 | idempotency_key_reused | このIdempotency-Keyは、既に別のリクエストで使用されています |
| 422 | upload_size_mismatch, file_type_not_accepted | アップロードされたファイルのサイズがsizeと一致しないか、バイト列がサービスの受け付ける種類ではないため、削除されました |
| 422 | file_unreadable, recording_no_sound, check_failed | チェックで拒否されたファイルを完了しようとしました:ファイルが開けない、録音に音声がない、またはチェックできませんでした。ファイルをもう一度アップロードするか、別のファイルをアップロードしてください |
| 429 | rate_limited | 1つのキーで1分あたり120リクエストを超えました。Retry-Afterの秒数だけ待ってください |
返金
注文が返金されると、代金は残高に戻り、注文はrefundedになります。