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)、一份需求说明或一次修改请求可附带的文件数、每个文件的最大大小(MB)、需求说明是否至少需要一个文件,以及文件能否代替 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 个字符,换行计为一个字符)。段落之间请空一行 |
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 或至少一条回答,也可以两者都提供;对于配音服务,提供 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(一小时)之前,使用与给定headers完全一致的请求头,将文件内容PUT到upload.url,不要附带 API 密钥:
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} 可撤回尚未发送的文件。一个订单最多接受 5 个文件,总大小不超过 4 GB;已开始上传的文件在完成或撤回之前都会计入;此外,自开始上传起一天内,已撤回或被拒绝的文件会与订单文件一起计入 12 GB 的限额:超出后,上传会以 409 upload_quota 被拒绝,并返回 retryAt,即可再次上传的时间。已交付的订单也可以为修改请求接收文件:按相同方式上传,然后在请求中发送 fileIds。
未使用 awaitBrief 时,如果服务的文件为 required,订单会以 400 files_required 被拒绝;如果服务允许以文件代替链接,而订单未提供链接,则会以 400 link_required 被拒绝。
在订单中,files 列出您的文件及其 status,fileIds 列出随需求说明一起发送的文件。就绪的文件带有一个 url,在 expiresAt 之前有效,与结果文件相同。文件在订单关闭后保留 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,并多一个响应头。不会再次扣款:
HTTP/1.1 201 Created
Idempotent-Replayed: true
- 密钥归属于首次发送它的请求。相同的密钥配合不同的请求体(例如不同的附加服务或不同的优惠码)会以
422 idempotency_key_reused被拒绝,且不会扣款。 - 如果使用同一密钥的多个请求同时到达,只会创建一个订单,其他请求都返回该订单。等待时间过长的请求会返回
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} 返回单个订单,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(社交媒体订单的交付报告)或 files(可下载的文件,body 中可附带说明)。每个结果都有一个 files 列表,文本和报告的该列表为空:每个文件都有 name、mime、以字节为单位的 size,以及一个在 expiresAt 之前(约一小时)有效的 url。重新读取订单即可获得新的链接。链接可能会重定向到文件存储,因此请跟随重定向,例如 curl -L -o result.png "$url",并且不要附带 API 密钥:仅凭链接即可打开文件。
验收与修改
POST /orders/{id}/accept验收结果并完成订单。POST /orders/{id}/revision配合{"text": "what to change"}提出修改,前提是revisionsLeft大于零。如果服务接受文件,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 | 文件数超过服务对一份需求说明或一次请求的限制,或订单文件超过 5 个或 4 GB |
| 409 | upload_quota | 加上本文件,订单的文件(包括已发送的和未完成的上传)与过去一天内开始上传后又撤回或被拒绝的文件合计超过 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 | 单个密钥每分钟超过 120 个请求;请等待 Retry-After 中给出的秒数 |
退款
如果我们为订单退款,款项会退回余额,订单状态变为 refunded。