Imagem do Facebook
03 Horas 10 Min 31 segundos
Documentação para desenvolvedores

API do RapidTranslate

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.

URL base https://www.rapidtranslate.org/api/v1
Versão v1
Formato 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
}

Introdução

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.

Como obter acesso. O acesso à API está disponível para contas corporativas. Adicione sua empresa no seu painel de controle e, em seguida, gere chaves em Configurações da empresa → Chaves de API. Se você ainda não tiver uma conta corporativa, entre em contato com support@rapidtranslate.org.

Coleção Postman

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.

Baixar coleção do Postman

  1. No Postman, selecione Arquivo → Importar e escolha o arquivo baixado.
  2. Abra a coleção Variáveis e definir apiKey para uma chave de Configurações da empresa → Chaves de API.
  3. (Opcional) Definir baseUrl para o seu ambiente — o padrão é “produção”.
  4. Envie qualquer solicitação. Use uma chave de Sandbox para testar sem fazer pedidos que gerem cobrança.

Autenticaçã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.

Âmbitos

Cada endpoint exige uma habilidade específica na chave. Uma chave sem o escopo exigido retorna 403 acesso restrito_escopo.

ÂmbitoSubsídios
ordens:escreverCriar e aprovar pedidos
ordens:lerRecuperar e listar pedidos
preço:lerLeia a tabela de preços
Mantenha as chaves em segredo. Uma chave ativa pode gerar pedidos faturáveis. Nunca a exponha em códigos do lado do cliente, navegadores ou repositórios públicos.

Modo de teste e sandbox

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ável
  • livemode: false — ambiente de teste / pedido de teste

Limites de taxa

As 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.

Respostas

Cada resposta bem-sucedida envolve sua carga útil em um dados chave. Os pontos finais da lista adicionam um meta bloco com paginação.

Recurso único

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

Lista paginada

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

Erros

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."]
  }
}
HTTPcódigo_de_erroSignificado
400solicitação_inválidaCorpo da solicitação inválido
401sem autenticaçãoChave ausente, inválida ou revogada
402pagamento_falhouO pedido foi aprovado, mas não foi possível receber o pagamento
402suspensão de créditoO valor do pedido excede seu limite de crédito
403escopo_proibidoA chave não possui o escopo necessário
403conta_suspensaOrganização suspensa por faturas não pagas
404not_foundNão há nenhum pedido desse tipo para esta organização
409referência_duplicadaReferência reutilizada para um pedido diferente
409não_está_aguardando_aprovaçãoO pedido não está aguardando sua aprovação
422falha na validaçãoCampos ausentes ou inválidos
429rate_limitedLimite de taxa excedido
500erro_do_servidorErro inesperado no servidor
503falha no processamentoFalha no processamento posterior (OCR / cálculo de preços)

Status dos pedidos

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:

StatusSignificado
pendenteRecebido; a cotação ainda não está pronta. total pode ser nulo.
aguardando aprovaçãoO valor já foi calculado e estamos aguardando sua aprovação do total (somente quando for necessária).
processamentoAprovado e ativo; tradução em andamento.
concluídoConcluído; os documentos traduzidos já estão disponíveis.
canceladoO 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.

Lista de idiomas

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 lista de preços

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.

Criar um pedido

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

Parâmetros corporais

CampoTipoNotas
referênciastring obrigatóriaSua referência de pedido exclusiva. Reutilizá-la retorna o pedido existente (consulte idempotência).
cliente[nome]string obrigatóriaNome completo do cliente final.
cliente[e-mail]string obrigatóriaE-mail do cliente final.
idioma_de_origemstring obrigatóriaLinguagem exata nome de Lista de idiomas.
língua_de_destinostring obrigatóriaLinguagem exata nome de Lista de idiomas.
tipo_de_traduçãostring obrigatóriaUm dos certificado, padrão, especializado, jurado, naati.
recuperaçãostring obrigatóriaregular ou rápido.
entrega[método]string obrigatóriaUm dos e-mail, e-mail autenticado, mail_standard, entregue no dia seguinte.
entrega[endereço][...]objetoObrigató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]booleanoAdicionar o processamento da apostila. Consulte as regras abaixo.
apostila [documentos]número inteiroNúmero de documentos a serem apostilados. Obrigatório quando ativado.
apostila [país de destino]stringPaís para o qual a apostila se destina.
notasstringInstruções em texto livre.
código_de_descontostringUm 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ório1 a 20 arquivos. Formatos permitidos: pdf, jpg, jpeg, png, doc, docx, tiff, heic. Máximo de 20 MB cada.
Idempotência. 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).
Regras da Apostila. A apostila só está disponível quando o idioma de destino é o inglês (qualquer variante), e esses pedidos devem utilizar o mail_standard forma de entrega. entregue no dia seguinte É válido apenas para endereços nos EUA.

Exemplo

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.

Consultar um pedido

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"

Lista de pedidos

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

ConsultaNotas
statusUm dos pendente, aguardando aprovação, processamento, concluído, cancelado.
referênciaFiltre por sua referência.
idioma_de_origem / língua_de_destinoFiltrar por nome do idioma.
criado_a partir de / created_toIntervalo de datas (inclusive).
classificar-created_at (padrão, mais recentes primeiro) ou created_at (da mais antiga para a mais recente).
por página1–100. O padrão é o tamanho de página padrão.
páginaNú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"

Aprovar um pedido

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.

Valores dos campos

Os conjuntos fixos aceitos ao criar um pedido.

Tipos de tradução

ValorDescrição
certificadoTradução juramentada (custo por página).
padrãoTradução padrão (preço por palavra).
especializadoTradução especializada / técnica (por página).
juradoTradução juramentada (por página).
naatiTradução certificada pela NAATI (por página).

Recuperação

ValorDescrição
regularPrazo de entrega padrão.
rápidoPrazo de entrega acelerado.

Formas de entrega

ValorEndereçoDescrição
e-mailNãoEntrega digital por e-mail (gratuita).
e-mail autenticadoNãoEntrega digital autenticada.
mail_standardSimCorreio físico; envio para países compatíveis.
entregue no dia seguinteSimEntrega no próximo dia útil (somente para endereços nos EUA).

Webhooks

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.

Eventos

EventoEnviado em
status_do_pedidoO status de um pedido é alterado.
avaliação_do_clienteUm pedido já tem o preço definido e está aguardando sua aprovação (somente no modo de aprovação).
entrega_de_documentosOs documentos traduzidos já estão prontos, com os links para download.
pagamento_falhouNã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éditoUm 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.

Envelope

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.

Verificação de assinaturas

Cada solicitação é assinada para que você possa confirmar que ela veio do RapidTranslate. Enviamos três cabeçalhos:

CabeçalhoValor
X-RapidTranslate-Signaturesha256=<hmac>
X-RapidTranslate-Data e horaTimestamp do Unix utilizado na assinatura
X-RapidTranslate-EventoO 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:

  • O 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.
  • Faça o hash do corpo da solicitação bruta exatamente como foi recebido. A resserialização do JSON analisado altera os espaços em branco e a ordem das chaves, de modo que a assinatura não corresponderá — leia o corpo antes que qualquer middleware JSON o analise.
  • Comparar em tempo constante (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.