Facebook 图片
03 营业时间 10 分钟 31 秒
开发者文档

Rapid Translate API

通过编程方式提交和跟踪经认证的文档翻译订单。该服务采用基于 HTTPS 的 REST API,通过承载令牌进行身份验证,并返回 JSON 格式数据——每项事件均附带经过签名的 webhook。

基础网址 https://www.rapidtranslate.org/api/v1
版本 v1
格式 JSON
create-order.sh
curl -X POST https://www.rapidtranslate.org/api/v1/orders \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -F "reference=APO-10432" \
  -F "source_language=Spanish" \
  -F "target_language=English (US)" \
  -F "translation_type=certified" \
  -F "files[]=@document.pdf"

→ {
  "id": "9b1c2d3e-…",
  "status": "pending",
  "livemode": true
}

引言

Rapid Translate API 可让您的应用程序提交文件进行认证翻译、查询最新的状态和报价,并接收完成的文件——而您的团队无需接触我们的结账流程。该 API 专为代表自身客户下达翻译订单的企业设计。

所有请求均应提交至 https://www.rapidtranslate.org/api/v1 通过 HTTPS 进行。请求和响应均为 JSON 格式,但创建订单时除外,该操作会将文件上传为 multipart/form-data. 所有金额均以 整数美分 单位为美元,所有时间戳均采用 UTC ISO‑8601 格式。

获取访问权限。组织账户可使用 API 访问权限。请在仪表盘中添加您的企业,然后通过“企业设置”→“API 密钥”生成密钥。如果您还没有企业账户,请联系support@rapidtranslate.org。

Postman 集合

在编写任何代码之前,更愿意先通过 API 进行测试吗?我们的 Postman 集合中,每个端点都已预先配置好——包括身份验证、示例请求体和查询参数。

下载 Postman 集合

  1. 在 Postman 中,选择“文件”→“导入”,然后选择下载的文件。
  2. 打开该收藏集的 变量 并设置 apiKey 从……到…… 企业设置 → API 密钥.
  3. (可选)设置 baseUrl 适用于您的环境——默认设置为生产环境。
  4. 请提交任何请求。使用沙箱密钥进行测试,无需下达计费订单。

身份验证

请使用您的私有 API 密钥作为承载令牌对每个请求进行身份验证,并请求 JSON 格式的响应。以下两个请求头均为必填项:

授权:Bearer YOUR_API_KEY
接受:application/json

您可以在仪表盘的“业务设置”→“API 密钥”下生成和轮换密钥。密钥在创建时会显示一次,并以哈希形式存储——如果丢失了密钥,请进行轮换。每个密钥属于一种模式(生产环境或沙箱环境),并具有一组固定的权限范围。

范围

每个端点都需要密钥具备特定的权限。如果密钥缺少所需的权限范围,则返回 403 禁止访问_scope.

范围拨款
orders:write创建和审批订单
orders:read检索并列出订单
价格:阅读查看价目表
请对密钥严格保密。有效的密钥可以下达需付费的订单。切勿在客户端代码、浏览器或公共代码库中暴露该密钥。

沙盒与测试模式

测试模式是密钥的属性,而非您账户的属性。沙盒密钥在完全模拟的环境中运行;生产密钥则会下达真实的、需付费的订单。您可以同时使用这两种密钥。

沙箱订单采用相同的验证、字段映射和实际定价,但省略了文件存储、OCR 和订单履行环节。创建后,沙箱订单会自动经历其生命周期(处理中 → 已完成),触发与真实订单相同的 webhook,最后返回一份静态示例文档。

每个响应和 Webhook 都携带一个 livemode 添加此标记,以便您的集成可以在不检查密钥的情况下进行分支:

  • livemode: true — 真实的、可计费的订单
  • livemode: false — 测试环境 / 测试订单

速率限制

每个组织的请求都受到速率限制。默认配额为 每分钟120次请求. 超出该值将返回 429 rate_limited; 稍作等待后重试。如果您的集成需要更高的限制,请联系 support@rapidtranslate.org.

回复

每个成功的响应都会将有效载荷封装在一个 数据 key。列出端点,添加一个 元数据 带分页的区块。

单一资源

{
  "data": {
    "id": "9b1c...-uuid",
    "reference": "APO-10432",
    "status": "processing",
    "total": 11270,
    "currency": "USD"
  }
}

分页列表

{
  "data": [ ... ],
  "meta": {
    "current_page": 1,
    "per_page": 25,
    "total": 134,
    "last_page": 6
  }
}

错误

错误使用标准的 HTTP 状态码,并返回一个稳定的、机器可读的 error_code 并附带一条人工信息。验证错误会添加一个以字段为键的 错误 对象。

{
  "message": "The given data was invalid.",
  "error_code": "validation_failed",
  "errors": {
    "source_language": ["The selected source language is invalid."]
  }
}
HTTPerror_code含义
400bad_request请求正文格式错误
401未经身份验证密钥缺失、无效或已被撤销
402支付失败订单已批准,但未能收取款项
402credit_hold订单金额超出您的信用额度
403forbidden_scope键的范围不足
403account_suspended某组织因拖欠发票款被暂停运营
404not_found该组织没有此类订单
409重复引用引用被用于另一个订单
409未待审批该订单无需您批准
422验证失败字段缺失或无效
429rate_limited超出请求限制
500server_error意外的服务器错误
503处理失败下游处理(OCR/定价)失败

订单状态

一个订单的 状态 遵循一个稳定的生命周期。这五个价值观也是被 状态 按……筛选 列出订单:

状态含义
待定已收到;定价尚未确定。 总计 可能是 null.
待审批已报价,等待您确认总金额(仅在需要确认时)。
处理已批准且处于活跃状态;翻译工作正在进行中。
已完成已完成;翻译好的文件已准备就绪。
已取消订单已被取消。

在订单处理过程中,会生成更细粒度的标签(例如 已分配给译员, 翻译, 已发货) 也可能出现。当需要批准时,订单可能会简要说明 支付失败 或 credit_hold 如果无法收取费用——请确定付款方式并重新批准。

列出语言

GET /languages

返回所有受支持的语言。使用 名称 将值原样转换为 源语言 / 目标语言 在创建订单时——订单是根据语言名称进行匹配的,而不是根据语言代码。

需要经过身份验证的密钥。

curl https://www.rapidtranslate.org/api/v1/languages \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"
{
  "data": [
    { "code": "english-uk", "name": "English (UK)", "active": true },
    { "code": "spanish",     "name": "Spanish",      "active": true }
  ]
}

获取价格表

GET /价格

返回用于计算订单费用的美国基准费率表(以美元计价)。金额为十进制字符串。价格按以下方式分组: 翻译 类型(每种都有一个 常规 和 快速 per‑单位 价格), 配送 方法,以及 海牙认证 — 即您在创建订单时提交的那些值。

范围: 价格:阅读

{
  "data": {
    "country":  { "code": "US", "name": "United States" },
    "currency": { "code": "USD", "symbol": "$" },
    "translation": {
      "certified":   { "unit": "page", "regular": "27.99", "rapid": "37.99" },
      "standard":    { "unit": "word", "regular": "0.11",  "rapid": "0.15" },
      "specialized": { "unit": "page", "regular": "47.99", "rapid": "57.99" },
      "naati":       { "unit": "page", "regular": "42.99", "rapid": "52.99" },
      "sworn": {
        "unit": "page",
        "note": "Sworn pricing depends on the language pair.",
        "language_pairs": [
          { "languages": ["Spanish","English"], "unit": "page", "regular": "57.99", "rapid": "67.99" },
          { "languages": ["Polish","English"],  "unit": "page", "regular": "46.99", "rapid": "56.99" }
        ]
      }
    },
    "delivery": {
      "email": "0.00", "notarized_email": "19.99",
      "mail_standard": "29.99", "mail_next_day": "55.00"
    },
    "apostille": { "base": "79.00", "additional_document": "15.00" }
  }
}

经公证的定价。 认证翻译的收费标准按语言对计算。 语言对 列出了所有符合宣誓资格的配对及其各自的 常规/快速 价格。接受任何英语变体(英语(美国/英国/澳大利亚/加拿大)),每组语言对均可双向转换,除非该语言对标注了 "bidirectional": false.

创建订单

POST /订单

创建翻译订单并上传源文件。由于涉及文件传输,此端点使用 multipart/form-data (非 JSON)。嵌套字段使用方括号表示法,例如: 客户[姓名].

范围: orders:write

身体参数

字段类型注释
参考字符串为必填项您专属的订单编号。重复使用该编号将返回现有订单(参见幂等性)。
客户[姓名]字符串为必填项最终客户的全名。
客户[电子邮件]字符串为必填项最终客户的电子邮件。
源语言字符串为必填项确切表述 名称 来自 列出语言.
目标语言字符串为必填项确切表述 名称 来自 列出语言.
translation_type字符串为必填项其中之一 经认证的, 标准, 专业化的, 宣誓的, naati.
扭亏为盈字符串为必填项常规 或 快速.
配送[方式]字符串为必填项其中之一 电子邮件, 经公证的电子邮件, mail_standard, 次日邮寄.
配送[地址][...]对象适用于 mail_standard / 次日邮寄: 街道, 城市, 邮政编码, 国家 (状态 (可选)。 国家 是一个 ISO 代码,例如: 美国.
海牙认证[已启用]布尔型添加海牙认证办理服务。请参阅以下规定。
海牙认证[文件]整数需办理海牙认证的文件数量。启用该功能时需填写。
海牙认证[目的地国家]字符串该海牙认证的适用国家。
注释字符串自由文本说明。
优惠码字符串一个待使用的折扣码。明显无效或不适用的折扣码将在创建时被拒绝。 422 验证失败;折扣金额将在订单定价后最终确定(参见下文注释)。
files[]file[]必填1–20 个文件。支持格式:pdf、jpg、jpeg、png、doc、docx、tiff、heic。每个文件最大 20 MB。
幂等性。 参考 在每个组织中都是唯一的。如果使用相同的 参考 返回包含以下内容的现有订单: 200 而不是创建重复的订单(新订单返回 201).
海牙认证规定。 只有当目标语言为英语(任何变体)时,才提供加注服务,且此类订单必须使用 mail_standard 配送方式。 次日邮寄 仅限美国地址。

示例

curl -X POST https://www.rapidtranslate.org/api/v1/orders \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json" \
  -F "reference=APO-10432" \
  -F "customer[name]=Jane Doe" \
  -F "customer[email]=jane@example.com" \
  -F "source_language=Spanish" \
  -F "target_language=English (US)" \
  -F "translation_type=certified" \
  -F "turnaround=regular" \
  -F "delivery[method]=email" \
  -F "files[]=@/path/to/birth-certificate.pdf"
{
  "data": {
    "id": "9b1c2d3e-...-uuid",
    "reference": "APO-10432",
    "livemode": true,
    "status": "pending",
    "source_language": "Spanish",
    "target_language": "English (US)",
    "translation_type": "certified",
    "turnaround": "regular",
    "total": null,
    "currency": "USD",
    "created_at": "2026-08-28T10:15:00+00:00"
  }
}

新创建的订单最初为 待定 用一个 null 计算价格时的总计。投票 查询订单 或者留意 订单状态 通过 webhook 查看价格和状态更新。

优惠券。 A 优惠码 分两个阶段进行验证。在创建阶段,我们会验证那些不依赖于文档长度的内容——代码的有效性、使用限制以及其适用的翻译/服务类型——并立即拒绝无效代码。那些依赖于页数/字数(以及折扣金额本身)的规则,将在文档计数完成后进行处理,因此折扣会显示在 定价 总计,而非初始值 待定 处理方式。如果确认数量后发现优惠券无法使用,订单仍将按原价下单,并标记出来供我们的团队审核。

查询订单

GET /orders/{id}

根据其...检索一条订单 id (创建时返回的 UUID)。返回 404 未找到 如果该订单不属于贵组织。

范围: orders:read

curl https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

列出订单

GET /订单

返回贵组织的订单,按时间倒序排列(最新在前),并启用分页功能 元数据. 所有查询参数均为可选。

范围: orders:read

查询注释
状态其中之一 待定, 待审批, 处理, 已完成, 已取消.
参考按您的参考编号筛选。
源语言 / 目标语言按语言名称筛选。
created_from / created_to日期范围(含首尾两日)。
排序-created_at (默认,最新内容优先)或 created_at (按时间倒序排列)。
每页1–100。默认采用标准页面尺寸。
页面页码。
curl "https://www.rapidtranslate.org/api/v1/orders?status=completed&per_page=50" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

批准一项订单

POST /orders/{id}/approve

批准某笔订单的计算总额,该订单是 待审批,将其激活以完成操作。仅当您的账户在开始工作前需要审批时,才需要执行此操作。该调用具有幂等性。

范围: orders:write

curl -X POST https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid/approve \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Accept: application/json"

操作成功后,将返回更新后的订单。如果该订单未处于待审批状态,则返回 409 未待审批; 如果需要进行充电但充电失败,你会得到 402 支付失败 或 402 信用冻结.

字段值

创建订单时接受的固定组合。

翻译类型

值描述
经认证的认证翻译(按页计费)。
标准标准翻译(按单词计费)。
专业化的专业/专家级翻译(按页计费)。
宣誓的宣誓翻译(每页)。
naatiNAATI认证翻译(按页计费)。

扭亏为盈

值描述
常规标准周转时间。
快速加急处理。

配送方式

值地址描述
电子邮件不通过电子邮件进行数字交付(免费)。
经公证的电子邮件不经公证的电子送达。
mail_standard是的实体邮件;仅限支持的国家/地区配送。
次日邮寄是的下一个工作日送达(仅限美国地址)。

Webhooks

与其使用轮询,不如配置一个 webhook 端点,以便在事件发生时实时接收。请在“业务设置”→“Webhooks”中设置您的 URL 并查看签名密钥。Webhooks 非常方便——通过它获取订单的信息始终具有权威性。

活动

活动发送时间:
订单状态订单状态发生变化。
客户评价该订单已定价,正在等待您的批准(仅限审批模式)。
文献传递翻译好的文档已准备就绪,并附有下载链接。
支付失败已获批准的命令所涉费用无法收取——将导致 失败 块 (原因, 消息). 更新钱包卡并再次确认。
credit_hold该笔已批准的订单将超出您的信用额度——这将导致 credit_hold 块 (消息). 结算发票或申请提高限额。

信封

每份快递都用同样的信封:一个 活动 块(包括 livemode) 以及针对特定事件的 数据 块。

{
  "event": {
    "type": "order_status",
    "id": "evt_9b1c...",
    "livemode": true,
    "sent_at": "2026-08-28T10:20:00+00:00"
  },
  "data": {
    "order": {
      "id": "9b1c2d3e-...-uuid",
      "reference": "APO-10432",
      "status": "completed"
    }
  }
}

该 文献传递 事件会添加一个 文件 数组(每个数组包含 名称, 下载链接, 版本, 状态) 和一个 门户 链接。该 客户评价 event 添加了一项明细 定价 块和一个 actions.approve 包含要调用的 URL 的对象。

验证签名

每个请求都经过签名,因此您可以确认它确实来自Rapid Translate 。我们会发送三个请求头:

页眉值
X-RapidTranslate-Signaturesha256=<hmac>
X-RapidTranslate-时间戳签名中使用的 Unix 时间戳
X-RapidTranslate-Event唯一的事件 ID

将该字符串作为 HMAC-SHA256 进行计算,得出预期签名 "{timestamp}.{raw_request_body}" 使用您的 Webhook 签名密钥,然后将其与标头值进行比较:

// PHP
$expected = 'sha256=' . hash_hmac(
    'sha256',
    $timestamp . '.' . $rawBody,
    $webhookSecret
);
$valid = hash_equals($expected, $signatureHeader);

Node.js (Express) — 使用原始正文解析器挂载路由,以保留精确的字节内容:

// app.use('/webhooks/rapidtranslate', express.raw({ type: 'application/json' }))
const crypto = require('crypto');

const timestamp = req.get('X-RapidTranslate-Timestamp');
const received  = req.get('X-RapidTranslate-Signature'); // "sha256=..."
const rawBody   = req.body;                               // Buffer, untouched

const expected = 'sha256=' + crypto
  .createHmac('sha256', WEBHOOK_SECRET)
  .update(`${timestamp}.${rawBody}`)
  .digest('hex');

const valid = received &&
  crypto.timingSafeEqual(Buffer.from(received), Buffer.from(expected));

有三件事容易让人犯错:

  • 该 X-RapidTranslate-Signature 标题包含一个 sha256= 前缀。要么与……进行比较 'sha256=' + yourHmac (同上)或者在比较前去除前缀——不要将裸的十六进制数与整个头信息进行比对。
  • 将原始请求正文按接收时的原样进行哈希处理。解析后的 JSON 重新序列化会改变空格和键的顺序,导致签名不匹配——请在任何 JSON 中间件解析正文之前先读取正文。
  • 在常数时间内进行比较(hash_equals / crypto.timingSafeEqual),绝不与 == 或 ===.

该 {timestamp} 是签名字符串的一部分,因此请从头部读取该字符串,并在进行哈希运算前将其添加到字符串开头。此外,这还能让你拒绝过期或被重放的交付——例如,任何时间戳早于五分钟的交付。

发送失败时,将采用指数退避算法重试(最多尝试 5 次)。请回复一个 2xx 状态:已收悉。