Envie e acompanhe pedidos de tradução de documentos certificados por meio de programação. Uma API REST via HTTPS, autenticada por um token de portador e que retorna JSON — com webhooks assinados para cada evento.
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
} A API do RapidTranslate permite que seu aplicativo envie documentos para tradução certificada, consulte o status e os preços atualizados e receba os arquivos finalizados — sem que sua equipe precise acessar nosso sistema de checkout. Ela foi projetada para empresas que fazem pedidos de tradução em nome de seus próprios clientes.
Todas as solicitações devem ser encaminhadas para https://www.rapidtranslate.org/api/v1 por HTTPS. As solicitações e respostas são em JSON, exceto na criação de pedidos, que faz o upload de arquivos como multipart/form-data. Todos os valores são devolvidos como centavos inteiros em dólares americanos, e todos os carimbos de data/hora estão no formato UTC ISO-8601.
Prefere explorar a API antes de escrever qualquer código? Nossa coleção no Postman tem todos os endpoints pré-configurados — incluindo autenticação, corpos de exemplo e parâmetros de consulta.
apiKey para uma chave de Configurações da empresa → Chaves de API.baseUrl para o seu ambiente — o padrão é “produção”.Autentifique cada solicitação com sua chave secreta da API como um token de portador e solicite uma resposta em JSON. Ambos os cabeçalhos são obrigatórios:
Autorização: Portador YOUR_API_KEY
Aceitar: application/json Gere e alterne chaves em seu painel, na seção Configurações de negócios → Chaves de API. As chaves são exibidas uma única vez no momento da criação e armazenadas na forma de hash — caso perca uma chave, alterne-a. Cada chave pertence a um modo (Live ou Sandbox) e possui um conjunto fixo de escopos.
Cada endpoint exige uma habilidade específica na chave. Uma chave sem o escopo exigido retorna 403 acesso restrito_escopo.
| Âmbito | Subsídios |
|---|---|
ordens:escrever | Criar e aprovar pedidos |
ordens:ler | Recuperar e listar pedidos |
preço:ler | Leia a tabela de preços |
O modo de teste é uma propriedade da chave, não da sua conta. Uma chave de Sandbox opera em um ambiente totalmente simulado; uma chave Live realiza pedidos reais e faturáveis. Você pode usar as duas ao mesmo tempo.
Os pedidos em ambiente de teste utilizam a mesma validação, o mesmo mapeamento de campos e os preços reais, mas não incluem armazenamento de arquivos, OCR e atendimento do pedido. Ao ser criado, um pedido em ambiente de teste percorre automaticamente seu ciclo de vida (em processamento → concluído), acionando os mesmos webhooks que um pedido ativo e, por fim, entregando um documento de amostra estático.
Cada resposta e cada webhook contém um modo ao vivo marque essa opção para que sua integração possa criar ramificações sem verificar a chave:
livemode: true — pedido real e faturávellivemode: false — ambiente de teste / pedido de testeAs solicitações estão sujeitas a um limite de taxa por organização. A cota padrão é 120 solicitações por minuto. Se for ultrapassado, retorna 429 rate_limited; tente novamente após um breve intervalo. Se sua integração precisar de um limite maior, entre em contato com support@rapidtranslate.org.
Cada resposta bem-sucedida envolve sua carga útil em um dados chave. Os pontos finais da lista adicionam um meta bloco com paginação.
{
"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
}
} Os erros utilizam códigos de status HTTP padrão e retornam um formato estável e legível por máquina código_de_erro juntamente com uma mensagem de texto. Os erros de validação adicionam um campo com chave erros objeto.
{
"message": "The given data was invalid.",
"error_code": "validation_failed",
"errors": {
"source_language": ["The selected source language is invalid."]
}
} | HTTP | código_de_erro | Significado |
|---|---|---|
| 400 | solicitação_inválida | Corpo da solicitação inválido |
| 401 | sem autenticação | Chave ausente, inválida ou revogada |
| 402 | pagamento_falhou | O pedido foi aprovado, mas não foi possível receber o pagamento |
| 402 | suspensão de crédito | O valor do pedido excede seu limite de crédito |
| 403 | escopo_proibido | A chave não possui o escopo necessário |
| 403 | conta_suspensa | Organização suspensa por faturas não pagas |
| 404 | not_found | Não há nenhum pedido desse tipo para esta organização |
| 409 | referência_duplicada | Referência reutilizada para um pedido diferente |
| 409 | não_está_aguardando_aprovação | O pedido não está aguardando sua aprovação |
| 422 | falha na validação | Campos ausentes ou inválidos |
| 429 | rate_limited | Limite de taxa excedido |
| 500 | erro_do_servidor | Erro inesperado no servidor |
| 503 | falha no processamento | Falha no processamento posterior (OCR / cálculo de preços) |
O número do pedido status segue um ciclo de vida estável. Esses cinco valores são também os mesmos aceitos pela status filtrar por Lista de pedidos:
| Status | Significado |
|---|---|
pendente | Recebido; a cotação ainda não está pronta. total pode ser nulo. |
aguardando aprovação | O valor já foi calculado e estamos aguardando sua aprovação do total (somente quando for necessária). |
processamento | Aprovado e ativo; tradução em andamento. |
concluído | Concluído; os documentos traduzidos já estão disponíveis. |
cancelado | O pedido foi cancelado. |
Enquanto um pedido estiver em andamento, rótulos mais detalhados (por exemplo, Atribuído ao tradutor, Tradução, Enviado) também podem aparecer. Quando for necessária uma aprovação, um pedido pode indicar brevemente pagamento_falhou ou suspensão de crédito caso uma cobrança não tenha sido realizada — definir a forma de pagamento e aprovar novamente.
OBTER /idiomas
Retorna todos os idiomas suportados. Use o nome valor literal como idioma_de_origem / língua_de_destino ao criar um pedido — os pedidos são associados com base no nome do idioma, e não no código.
Requer uma chave autenticada.
curl https://www.rapidtranslate.org/api/v1/languages \
-H "Authorization: Bearer SUA_CHAVE_DE_API" \
-H "Accept: application/json" {
"data": [
{ "code": "english-uk", "name": "English (UK)", "active": true },
{ "code": "spanish", "name": "Spanish", "active": true }
]
} OBTER /preços
Retorna a tabela de preços de referência dos EUA, em dólares americanos (USD), com base na qual suas encomendas são faturadas. Os valores são cadeias de caracteres decimais. Os preços são agrupados por tradução tipo (cada um com um regular e rápido por‑unidade preço), entrega método, e apostila — os mesmos valores que você envia ao criar um pedido.
Escopo: preço:ler
{
"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" }
}
} Preços certificados. O preço da tradução juramentada é calculado por par de idiomas. pares_de_idiomas lista todos os pares elegíveis para juramento com seu próprio regular/rápido preço. Qualquer variante do inglês (inglês (EUA/Reino Unido/Austrália/Canadá)) é aceita, e cada par funciona nos dois sentidos, a menos que contenha "bidirecional": false.
POST /pedidos
Cria um pedido de tradução e faz o upload dos arquivos de origem. Como envolve a transferência de arquivos, esse endpoint utiliza multipart/form-data (não é JSON). Os campos aninhados utilizam a notação entre colchetes, por exemplo: cliente[nome].
Escopo: ordens:escrever
| Campo | Tipo | Notas |
|---|---|---|
referência | string obrigatória | Sua referência de pedido exclusiva. Reutilizá-la retorna o pedido existente (consulte idempotência). |
cliente[nome] | string obrigatória | Nome completo do cliente final. |
cliente[e-mail] | string obrigatória | E-mail do cliente final. |
idioma_de_origem | string obrigatória | Linguagem exata nome de Lista de idiomas. |
língua_de_destino | string obrigatória | Linguagem exata nome de Lista de idiomas. |
tipo_de_tradução | string obrigatória | Um dos certificado, padrão, especializado, jurado, naati. |
recuperação | string obrigatória | regular ou rápido. |
entrega[método] | string obrigatória | Um dos e-mail, e-mail autenticado, mail_standard, entregue no dia seguinte. |
entrega[endereço][...] | objeto | Obrigatório para mail_standard / entregue no dia seguinte: rua, cidade, código_postal, país (estado (opcional). país é um código ISO, por exemplo, EUA. |
apostila [ativada] | booleano | Adicionar o processamento da apostila. Consulte as regras abaixo. |
apostila [documentos] | número inteiro | Número de documentos a serem apostilados. Obrigatório quando ativado. |
apostila [país de destino] | string | País para o qual a apostila se destina. |
notas | string | Instruções em texto livre. |
código_de_desconto | string | Um código de desconto a ser aplicado. Códigos claramente inválidos ou inaplicáveis são rejeitados no momento da criação com 422 falha na validação; o desconto em si é definido assim que o preço do pedido for calculado (veja a nota abaixo). |
arquivos[] | arquivo[] obrigatório | 1 a 20 arquivos. Formatos permitidos: pdf, jpg, jpeg, png, doc, docx, tiff, heic. Máximo de 20 MB cada. |
referência é único para cada organização. Repetir uma criação com o mesmo referência retorna o pedido existente com 200 em vez de criar uma duplicata (um novo pedido gera 201). mail_standard forma de entrega. entregue no dia seguinte É válido apenas para endereços nos EUA. curl -X POST https://www.rapidtranslate.org/api/v1/orders \
-H "Authorization: Bearer SUA_CHAVE_DE_API" \
-H "Accept: application/json" \
-F "reference=APO-10432" \
-F "customer[name]=Jane Doe" \
-F "customer[email]=jane@example.com" \
-F "source_language=espanhol" \
-F "target_language=inglês (EUA)" \
-F "tipo_de_tradução=certificada" \
-F "prazo_de_entrega=normal" \
-F "entrega[método]=e-mail" \
-F "arquivos[]=@/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"
}
} Um pedido recém-criado começa como pendente com um nulo total enquanto o preço é calculado. Enquete Consultar um pedido ou fique atento ao status_do_pedido webhook para verificar o preço e as atualizações de status.
Cupons. A código_de_desconto é verificado em duas etapas. No momento da criação, validamos o que não depende do tamanho do documento — a validade do código, os limites de uso e a quais tipos de tradução/serviço ele se aplica — e rejeitamos imediatamente um código inválido. As regras que dependem da contagem de páginas/palavras (e do próprio valor do desconto) são resolvidas após a contagem do documento, de modo que o desconto aparece no com preço total, e não o inicial pendente resposta. Se, após a verificação da quantidade, verificar-se que o cupom não é válido, o pedido ainda assim é registrado pelo preço integral e sinalizado para que nossa equipe o analise.
OBTER /orders/{id}
Recupera um único pedido por meio de seu id (o UUID retornado na criação). Retorna 404 não encontrado se o pedido não pertencer à sua organização.
Escopo: ordens:ler
curl https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid \
-H "Authorization: Bearer SUA_CHAVE_DE_API" \
-H "Accept: application/json" OBTER /pedidos
Retorna os pedidos da sua organização, começando pelos mais recentes, com paginação em meta. Todos os parâmetros de consulta são opcionais.
Escopo: ordens:ler
| Consulta | Notas |
|---|---|
status | Um dos pendente, aguardando aprovação, processamento, concluído, cancelado. |
referência | Filtre por sua referência. |
idioma_de_origem / língua_de_destino | Filtrar por nome do idioma. |
criado_a partir de / created_to | Intervalo de datas (inclusive). |
classificar | -created_at (padrão, mais recentes primeiro) ou created_at (da mais antiga para a mais recente). |
por página | 1–100. O padrão é o tamanho de página padrão. |
página | Número da página. |
curl "https://www.rapidtranslate.org/api/v1/orders?status=completed&per_page=50" \
-H "Authorization: Bearer SUA_CHAVE_DE_API" \
-H "Accept: application/json" POST /orders/{id}/aprovar
Aprova o total calculado para um pedido que é aguardando aprovação, ativando-a para que seja executada. Isso só é necessário quando sua conta precisa de aprovação antes do início do trabalho. A chamada é idempotente.
Escopo: ordens:escrever
curl -X POST https://www.rapidtranslate.org/api/v1/orders/9b1c2d3e-...-uuid/approve \
-H "Authorization: Bearer SUA_CHAVE_DE_API" \
-H "Accept: application/json" Em caso de sucesso, o pedido atualizado é retornado. Se o pedido não estiver aguardando aprovação, você recebe 409 não_aguardando_aprovação; se for necessário realizar uma cobrança, mas ela não for bem-sucedida, você receberá 402 falha no pagamento ou 402 crédito_em_suspensão.
Os conjuntos fixos aceitos ao criar um pedido.
| Valor | Descrição |
|---|---|
certificado | Tradução juramentada (custo por página). |
padrão | Tradução padrão (preço por palavra). |
especializado | Tradução especializada / técnica (por página). |
jurado | Tradução juramentada (por página). |
naati | Tradução certificada pela NAATI (por página). |
| Valor | Descrição |
|---|---|
regular | Prazo de entrega padrão. |
rápido | Prazo de entrega acelerado. |
| Valor | Endereço | Descrição |
|---|---|---|
e-mail | Não | Entrega digital por e-mail (gratuita). |
e-mail autenticado | Não | Entrega digital autenticada. |
mail_standard | Sim | Correio físico; envio para países compatíveis. |
entregue no dia seguinte | Sim | Entrega no próximo dia útil (somente para endereços nos EUA). |
Em vez de fazer consultas periódicas, configure um endpoint de webhook para receber eventos assim que eles ocorrerem. Defina sua URL e visualize seu segredo de assinatura em Configurações da empresa → Webhooks. Os webhooks são práticos — a recuperação de um pedido é sempre confiável.
| Evento | Enviado em |
|---|---|
status_do_pedido | O status de um pedido é alterado. |
avaliação_do_cliente | Um pedido já tem o preço definido e está aguardando sua aprovação (somente no modo de aprovação). |
entrega_de_documentos | Os documentos traduzidos já estão prontos, com os links para download. |
pagamento_falhou | Não foi possível cobrar o valor de um pedido aprovado — isso acarreta uma falha bloco (motivo, mensagem). Atualize o cartão da carteira e aprove novamente. |
suspensão de crédito | Um pedido aprovado ultrapassaria seu limite de crédito — acarreta um suspensão de crédito bloco (mensagem). Pague as faturas ou solicite um limite maior. |
Todas as entregas vêm no mesmo envelope: um evento bloco (incluindo modo ao vivo) e um específico para o evento dados bloco.
{
"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"
}
}
} O entrega_de_documentos O evento adiciona um documentos matriz (cada uma com nome, download_url, versão, status) e um portal link. O avaliação_do_cliente O evento adiciona um item detalhado preços bloco e um actions.approve objeto com a URL a ser chamada.
Cada solicitação é assinada para que você possa confirmar que ela veio do RapidTranslate. Enviamos três cabeçalhos:
| Cabeçalho | Valor |
|---|---|
X-RapidTranslate-Signature | sha256=<hmac> |
X-RapidTranslate-Data e hora | Timestamp do Unix utilizado na assinatura |
X-RapidTranslate-Evento | O ID exclusivo do evento |
Calcule a assinatura esperada como um HMAC-SHA256 da sequência de caracteres "{timestamp}.{raw_request_body}" usando seu segredo de assinatura do webhook e, em seguida, compare-o com o valor do cabeçalho:
// PHP
$expected = 'sha256=' . hash_hmac(
'sha256',
$timestamp . '.' . $rawBody,
$webhookSecret
);
$valid = hash_equals($expected, $signatureHeader); Node.js (Express) — configure a rota com um analisador de corpo bruto para que os bytes exatos sejam preservados:
// 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)); Três coisas que costumam causar dificuldades às pessoas:
X-RapidTranslate-Signature o cabeçalho contém um sha256= prefixo. Compare com 'sha256=' + yourHmac (como acima) ou remova o prefixo antes de comparar — não compare o valor hexadecimal sozinho com o cabeçalho completo.hash_equals / crypto.timingSafeEqual), nunca com == ou ===.O {timestamp} faz parte da string assinada; portanto, leia-a do cabeçalho e insira-a no início antes de aplicar o hash. Isso também permite rejeitar entregas desatualizadas ou repetidas — por exemplo, qualquer data e hora com mais de cinco minutos.
As entregas com falha são repetidas com recuo exponencial (até 5 tentativas). Responda com um 2xx status para confirmar o recebimento.