API

从您自己的网站、网店或脚本下单服务:获取服务和价格列表、附上任务下单、跟踪订单并获取结果。这与网站上的服务完全相同,因此通过 API 下的订单也会显示在您的账户中。

快速开始

  1. 登录并打开余额与 API 密钥。
  2. 创建密钥。密钥只显示一次:请复制并像密码一样妥善保管。您可以随时吊销密钥。
  3. 为余额充值。通过 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。文件需上传到正在等待需求说明的订单:

  1. 使用 "awaitBrief": true 下单,且不提供 text、link、answers 和 script。订单会立即付款,状态为 awaiting_brief;交付期限从提交需求说明时开始计算。
  2. 对每个文件调用 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" }
}
  1. 在 upload.expiresAt(一小时)之前,使用与给定 headers 完全一致的请求头,将文件内容 PUT 到 upload.url,不要附带 API 密钥:
curl -X PUT "$url" -H "content-type: application/octet-stream" --data-binary @page-1.png
  1. 调用 POST /orders/{id}/files/{fileId}/complete。如果文件大小与 size 不符,或其内容不属于 accept 中的类型,则会以 422 被拒绝并删除:文件名和 mime 不作为判断依据。否则响应为该文件,状态变为 checking。几秒钟后(较长的录音可能需要几分钟),状态变为 ready,或变为 rejected 并在 reason 中说明原因,例如 recording_no_sound 或 file_unreadable。订单的 files 会显示各文件的状态。
  2. 调用 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

验收、需求说明和修改请求不使用密钥。验收可以安全地重复:订单完成后,重复请求会返回 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 密钥:仅凭链接即可打开文件。

验收与修改

如果您对已交付的订单既不验收也不提出修改,订单会在交付 3 天后,即 autoAcceptAt 所示时间被自动验收(其他状态下为 null)。修改后的新交付会重新开始计算 3 天。您也可以在网站上验收工作。如果您在交付后通过网站上的订单聊天发送消息,订单将不会被自动验收,且在您验收、我们重新处理或退款之前,autoAcceptAt 为 null。在回复您的消息后,我们也可能重新开始计算 3 天:届时 autoAcceptAt 会显示新的时间。

错误

错误会返回 HTTP 状态码和错误代码:

{ "code": "insufficient_balance" }
状态码代码含义
400validation字段缺失或有误;fields 列出这些字段
400link_required该服务需要 link
400files_required该服务需要文件:请使用 awaitBrief 下单并上传文件
400script_required该服务需要朗读文本:请在 script 中发送
400script_too_longscript 超出套餐可朗读的长度;响应中的 maxChars 为最大字符数。未扣款
400script_not_accepted该服务不朗读文本(其在 /services 中的 script 为 null):请勿提供 script。未扣款
400files_not_accepted, file_too_large该服务不接受文件,或文件超过其 maxMb
400invalid_idempotency_keyIdempotency-Key 为空、超过 255 个字符或不是可打印 ASCII 字符
401invalid_api_key未提供密钥、密钥错误或已被吊销。如果账户未确认的邮箱通过 Google 登录或设置新密码得到确认,密钥也会被吊销
402insufficient_balance余额不足;未扣款
404package_not_found, order_not_found, file_not_found服务、套餐、订单或文件不存在
409order_not_delivered, no_revisions_left订单当前状态不允许此操作
409brief_not_expected订单未在等待需求说明:下单时未使用 awaitBrief,或需求说明已发送
409uploads_closed仅在订单等待需求说明或已交付时才接受文件
409files_limit文件数超过服务对一份需求说明或一次请求的限制,或订单文件超过 5 个或 4 GB
409upload_quota加上本文件,订单的文件(包括已发送的和未完成的上传)与过去一天内开始上传后又撤回或被拒绝的文件合计超过 12 GB:请在 retryAt 之后重试
409files_not_ready, file_rejected要发送的文件仍在检查中,或已被拒绝
409upload_incomplete尚未向该链接上传任何内容:请先完成 PUT,然后再次完成上传
409file_in_use, file_busy该文件已随需求说明或请求发送并保留在订单中,或正在因检查而被移动:请稍后重试
409addon_unavailable该服务和套餐等级不提供此附加服务
409promo_not_found, promo_inactive, promo_used_up, promo_already_used, promo_first_order_only, promo_min_order优惠码不存在、当前未生效、已用完、您已使用过、仅限首单使用,或需要更高的订单金额。未扣款
409idempotency_key_in_progress使用该 Idempotency-Key 的请求仍在处理中;请稍后重试
410upload_expired, file_removed上传链接在上传任何内容之前已过期,或您已撤回该文件:请重新开始上传
415file_type_not_accepted给定的 mime 不属于该服务接受的类型
422idempotency_key_reused该 Idempotency-Key 已用于另一个不同的请求
422upload_size_mismatch, file_type_not_accepted上传的文件大小与 size 不符,或其内容不属于该服务接受的类型;该文件已被删除
422file_unreadable, recording_no_sound, check_failed完成上传的文件未通过检查:无法打开、录音没有声音,或无法检查。请重新上传该文件或换一个文件
429rate_limited单个密钥每分钟超过 120 个请求;请等待 Retry-After 中给出的秒数

退款

如果我们为订单退款,款项会退回余额,订单状态变为 refunded。