Imagen de Facebook
03 Horas 10 Min 31 Seg
Documentación para desarrolladores

API de RapidTranslate

Realiza y realiza un seguimiento de los pedidos de traducción de documentos de certificada mediante programación. Una API REST sobre HTTPS, autenticada con un token de portador y que devuelve datos en formato JSON, con webhooks firmados para cada evento.

URL base https://www.rapidtranslate.org/api/v1
Versión 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
}

Introducción

La API de RapidTranslate permite a tu aplicación enviar documentos para su traducción c certificada , consultar el estado y los precios actualizados, y recibir los archivos finalizados, sin que tu equipo tenga que pasar por nuestro proceso de pago. Está diseñada para empresas que realizan pedidos de traducción en nombre de sus propios clientes.

Todas las solicitudes deben dirigirse a https://www.rapidtranslate.org/api/v1 a través de HTTPS. Las solicitudes y respuestas están en formato JSON, salvo en el caso de la creación de pedidos, en la que se suben archivos como multipart/form-data. Todos los importes se devuelven como céntimos enteros en dólares estadounidenses, y todas las marcas de tiempo están en formato UTC ISO-8601.

Cómo obtener acceso. El acceso a la API está disponible para las cuentas de organización. Añade tu empresa en tu panel de control y, a continuación, genera claves desde «Configuración de la empresa» → «Claves de API». Si aún no tienes una cuenta de empresa, ponte en contacto con support@rapidtranslate.org.

Colección Postman

¿Prefieres explorar la API antes de escribir código? Nuestra colección de Postman tiene todos los puntos finales preconfigurados, incluyendo la autenticación, los cuerpos de ejemplo y los parámetros de consulta.

Descargar la colección de Postman

  1. En Postman, selecciona «Archivo» → «Importar» y elige el archivo descargado.
  2. Abre la colección Variables y establecer apiKey a una clave de Configuración de la empresa → Claves API.
  3. (Opcional) Establecer baseUrl para tu entorno; el valor predeterminado es «production».
  4. Envía cualquier solicitud. Utiliza una clave de entorno de prueba para realizar pruebas sin realizar pedidos facturables.

Autenticación

Autentifica cada solicitud con tu clave secreta de API como token «bearer» y solicita una respuesta en formato JSON. Ambos encabezados son obligatorios:

Autorización: Bearer TU_CLAVE_API
Accept: application/json

Genera y renueva las claves en tu panel de control, en la sección «Configuración empresarial» → «Claves de API». Las claves se muestran una sola vez al crearlas y se almacenan en forma de hash; si pierdes una clave, renuévala. Cada clave pertenece a un modo (Live o Sandbox) y tiene un conjunto fijo de ámbitos.

Ámbitos de aplicación

Cada punto final requiere una capacidad específica en la clave. Si a la clave le falta el ámbito requerido, devuelve 403 acceso prohibido_ámbito.

Ámbito de aplicaciónSubvenciones
órdenes:escribirCrear y aprobar pedidos
órdenes:leerRecuperar y mostrar los pedidos
precio:leerConsulta la lista de precios
Mantén las claves en secreto. Una clave activa puede realizar pedidos facturables. Nunca la reveles en el código del lado del cliente, en navegadores ni en repositorios públicos.

Modo de prueba y entorno de pruebas

El modo de prueba es una propiedad de la clave, no de tu cuenta. Una clave de Sandbox se ejecuta en un entorno totalmente simulado; una clave de producción realiza pedidos reales y facturables. Puedes utilizar ambas al mismo tiempo.

Los pedidos de entorno de prueba utilizan la misma validación, la misma asignación de campos y los mismos precios reales, pero omiten el almacenamiento de archivos, el OCR y la gestión de pedidos. Al crearse, un pedido de entorno de prueba recorre automáticamente su ciclo de vida (en tramitación → finalizado), activando los mismos webhooks que un pedido real y, por último, entregando un documento de muestra estático.

Cada respuesta y cada webhook lleva un modo en directo Marca esta opción para que tu integración pueda crear una rama sin comprobar la clave:

  • livemode: true — pedido real y facturable
  • livemode: false — entorno de pruebas / pedido de prueba

Límites de frecuencia

Las solicitudes están sujetas a un límite de frecuencia por organización. El límite predeterminado es 120 solicitudes por minuto. Si se supera, devuelve 429 rate_limited; vuelve a intentarlo tras una breve pausa. Si tu integración necesita un límite más alto, ponte en contacto con support@rapidtranslate.org.

Respuestas

Cada respuesta correcta envuelve su contenido en un datos clave. Los puntos finales de la lista añaden un meta bloque con paginación.

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
  }
}

Errores

Los errores utilizan códigos de estado HTTP estándar y devuelven un formato estable y legible por máquina código_de_error junto con un mensaje de origen humano. Los errores de validación añaden un campo con clave errores objeto.

{
  "message": "The given data was invalid.",
  "error_code": "validation_failed",
  "errors": {
    "source_language": ["The selected source language is invalid."]
  }
}
HTTPcódigo_de_errorSignificado
400solicitud_inválidaCuerpo de la solicitud con formato incorrecto
401sin autenticarClave ausente, no válida o revocada
402pago_fallidoEl pedido se ha aprobado, pero no se ha podido cobrar el pago
402credit_holdEl importe del pedido supera tu límite de crédito
403ámbito_prohibidoLa clave no tiene el alcance necesario
403cuenta_suspendidaOrganización suspendida por facturas impagadas
404not_foundNo existe ningún pedido de este tipo para esta organización
409referencia_duplicadaReferencia reutilizada para un pedido diferente
409no_a la espera_de_aprobaciónEl pedido no está pendiente de tu aprobación
422validación fallidaCampos que faltan o no son válidos
429rate_limitedSe ha superado el límite de solicitudes
500error_del_servidorError inesperado del servidor
503error_de_procesamientoSe ha producido un error en el procesamiento posterior (OCR / fijación de precios)

Estados de los pedidos

El número de un pedido estado sigue un ciclo de vida estable. Estos cinco valores son también los que acepta la estado filtrar por Lista de pedidos:

EstadoSignificado
pendienteRecibido; aún no se ha fijado el precio. total podría ser null.
en espera de aprobaciónYa se ha calculado el precio y estamos a la espera de que apruebes el importe total (solo cuando sea necesaria la aprobación).
procesamientoAprobado y activo; traducción en curso.
finalizadoYa está; los documentos traducidos están disponibles.
canceladoEl pedido se ha cancelado.

Mientras un pedido está en curso, se pueden utilizar etiquetas más detalladas (por ejemplo, Asignado al traductor, Traducir, Enviado) también pueden aparecer. Cuando se requiera una autorización, una orden puede indicar brevemente pago_fallido o credit_hold Si no se ha podido cobrar un importe, resuelve la cuestión del método de pago y vuelve a dar tu aprobación.

Lista de idiomas

GET /idiomas

Devuelve todos los idiomas compatibles. Utiliza la función nombre valor literal como idioma_de_origen / idioma_de_destino Al crear un pedido, los pedidos se emparejan en función del nombre del idioma, no del código.

Requiere una clave autenticada.

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

Consulta la lista de precios

GET /precios

Devuelve la lista de tarifas de referencia de EE. UU., en dólares estadounidenses, según la cual se facturan tus pedidos. Los importes son cadenas decimales. Los precios se agrupan por traducción tipo (cada uno con un habitual y rápido por‑unidad precio), entrega método, y apostilla — los mismos valores que se envían al crear un pedido.

Ámbito de aplicación: precio:leer

{
  "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" }
  }
}

Precios certificados. El precio de la traducción jurada se calcula por par de idiomas. pares_de_idiomas enumera todos los pares que cumplen los requisitos para ser jurados, junto con su propio habitual/rápido precio. Se acepta cualquier variante del inglés (inglés (EE. UU./Reino Unido/Australia/Canadá)), y cada par funciona en ambos sentidos, salvo que incluya "bidireccional": false.

Realizar un pedido

POST /pedidos

Crea un encargo de traducción y sube los archivos originales. Dado que transfiere archivos, este punto final utiliza multipart/form-data (no JSON). Los campos anidados utilizan la notación entre corchetes, p. ej.: cliente[nombre].

Ámbito de aplicación: órdenes:escribir

Parámetros corporales

CampoTipoNotas
referenciaSe requiere una cadenaTu propia referencia de pedido única. Si la vuelves a utilizar, se recuperará el pedido existente (véase «idempotencia»).
cliente[nombre]Se requiere una cadenaNombre y apellidos completos del cliente final.
cliente[correo electrónico]Se requiere una cadenaCorreo electrónico del cliente final.
idioma_de_origenSe requiere una cadenaTexto exacto nombre de Lista de idiomas.
idioma_de_destinoSe requiere una cadenaTexto exacto nombre de Lista de idiomas.
tipo_de_traducciónSe requiere una cadenaUno de certificada, estándar, especializado, bajo juramento, naati.
recuperaciónSe requiere una cadenahabitual o rápido.
método de envío[método]Se requiere una cadenaUno de correo electrónico, correo electrónico certificado, mail_standard, envío al día siguiente.
entrega[dirección][...]objetoRequisito para mail_standard / envío al día siguiente: calle, ciudad, código_postal, país (estado (opcional). país es un código ISO, por ejemplo: US.
apostilla[activada]booleanoAñadir la tramitación de la apostilla. Consulta las normas a continuación.
apostilla [documentos]enteroNúmero de documentos que deben llevar la apostilla. Obligatorio cuando esté activada.
apostilla [país de destino]cadenaPaís para el que se destina la apostilla.
notascadenaInstrucciones en formato de texto libre.
código_de_descuentocadenaUn código de descuento que se debe aplicar. Los códigos que sean claramente inválidos o no aplicables se rechazan en el momento de la creación con 422 validación fallida; el descuento en sí queda fijado una vez que se ha calculado el precio del pedido (véase la nota más abajo).
archivos[]archivo[] obligatorioDe 1 a 20 archivos. Formatos admitidos: pdf, jpg, jpeg, png, doc, docx, tiff, heic. Máximo 20 MB cada uno.
Idempotencia. referencia es único para cada organización. Si se repite una operación de creación con el mismo referencia devuelve el pedido existente con 200 en lugar de crear un duplicado (un nuevo pedido devuelve 201).
Normativa sobre la apostilla. La apostilla solo está disponible cuando el idioma de destino es el inglés (en cualquiera de sus variantes), y en dichos pedidos se debe utilizar el mail_standard método de entrega. envío al día siguiente Solo para direcciones de EE. UU.

Ejemplo

curl -X POST https://www.rapidtranslate.org/api/v1/orders \
  -H "Authorization: Bearer TU_CLAVE_API" \
  -H "Accept: application/json" \
  -F "reference=APO-10432" \
  -F «customer[name]=Jane Doe» \
  -F «customer[email]=jane@example.com» \
  -F «source_language=español» \
  -F «target_language=inglés (EE. UU.)» \
  -F «translation_type=certificada » \
  -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"
  }
}

Un pedido recién creado comienza como pendiente con un null total mientras se calcula el precio. Encuesta Consultar un pedido o presta atención al estado_del_pedido webhook para consultar el precio y las actualizaciones de estado.

Cupones. A código_de_descuento Se comprueba en dos fases. En el momento de la creación, validamos los aspectos que no dependen de la longitud del documento —la validez del código, los límites de uso y a qué tipos de traducción o servicio se aplica— y rechazamos inmediatamente cualquier código incorrecto. Las reglas que dependen del número de páginas o de palabras (y del propio importe del descuento) se resuelven una vez que se ha contabilizado el documento, por lo que el descuento aparece en el a un precio de total, no el inicial pendiente respuesta. Si, una vez que se conoce la cantidad, resulta que el cupón no es válido, el pedido se realiza igualmente a precio completo y se marca para que nuestro equipo lo revise.

Consultar un pedido

GET /pedidos/{id}

Recupera un único pedido por su id (el UUID devuelto al crearse). Devuelve 404 no encontrado si el pedido no pertenece a tu organización.

Ámbito de aplicación: órdenes:leer

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

Lista de pedidos

GET /pedidos

Muestra los pedidos de tu organización, ordenados de más reciente a más antiguo, con paginación en meta. Todos los parámetros de consulta son opcionales.

Ámbito de aplicación: órdenes:leer

ConsultaNotas
estadoUno de pendiente, en espera de aprobación, procesamiento, finalizado, cancelado.
referenciaFiltra por tu referencia.
idioma_de_origen / idioma_de_destinoFiltrar por nombre de idioma.
creado_a partir de / created_toIntervalo de fechas (ambas incluidas).
ordenar-fecha_de_creación (por defecto, las más recientes primero) o fecha_de_creación (por orden cronológico, de más antiguo a más reciente).
por página1–100. Por defecto, se utiliza el tamaño de página estándar.
páginaNúmero de página.
curl "https://www.rapidtranslate.org/api/v1/orders?status=completed&per_page=50" \
  -H "Authorization: Bearer TU_CLAVE_API" \
  -H "Accept: application/json"

Aprobar una orden

POST /pedidos/{id}/aprobar

Aprueba el importe total calculado para un pedido que es en espera de aprobación, activándola para que se ejecute. Esto solo es necesario cuando tu cuenta requiere aprobación antes de que comience el trabajo. La llamada es idempotente.

Ámbito de aplicación: órdenes:escribir

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

Si la operación se realiza correctamente, se devuelve el pedido actualizado. Si el pedido no está pendiente de aprobación, se obtiene 409 no_a la espera_de_aprobación; si se requiere una carga pero falla, obtienes 402 error de pago o 402 credit_hold.

Valores de los campos

Los conjuntos fijos que se aceptan al crear un pedido.

Tipos de traducción

ValorDescripción
certificadacertificada traducción (precio por página).
estándarTraducción estándar (precio por palabra).
especializadoTraducción especializada / de expertos (por página).
bajo juramentoTraducción jurada (por página).
naatiTraducción certificada por NAATI-certificada (por página).

Recuperación

ValorDescripción
habitualPlazo de entrega estándar.
rápidoPlazo de entrega acelerado.

Formas de envío

ValorDirecciónDescripción
correo electrónicoNoEntrega digital por correo electrónico (gratis).
correo electrónico certificadoNoEntrega digital certificada ante notario.
mail_standardCorreo postal; se envía a los países en los que está disponible el servicio.
envío al día siguienteEnvío por correo al siguiente día laborable (solo para direcciones en EE. UU.).

Webhooks

En lugar de realizar consultas periódicas, configura un punto final de webhook para recibir eventos en tiempo real. Establece tu URL y consulta tu clave secreta de firma en «Configuración empresarial» → «Webhooks». Los webhooks son muy prácticos: la información sobre un pedido que se obtiene a través de ellos es siempre fiable.

Eventos

EventoEnviado el
estado_del_pedidoEl estado de un pedido cambia.
opinión_del_clienteSe ha calculado el precio de un pedido y está pendiente de tu aprobación (solo en modo de aprobación).
entrega_de_documentosLos documentos traducidos ya están listos, con sus enlaces de descarga.
pago_fallidoNo se ha podido cobrar el importe de un pedido aprobado; esto conlleva una fracaso bloque (razón, mensaje). Actualiza la tarjeta de monedero y vuelve a dar tu consentimiento.
credit_holdSi se aprobara esta orden, se superaría tu límite de crédito — conlleva un credit_hold bloque (mensaje). Paga las facturas o solicita un límite más alto.

Sobre

Todos los envíos vienen en el mismo sobre: un evento bloque (incluido modo en directo) y un específico para cada evento datos bloque.

{
  "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"
    }
  }
}

En entrega_de_documentos El evento añade un documentos matriz (cada una con nombre, download_url, versión, estado) y un portal enlace. El opinión_del_cliente El evento añade un desglose precios bloque y un actions.approve objeto con la URL a la que hay que acceder.

Verificación de firmas

Cada solicitud está firmada para que puedas confirmar que procede de RapidTranslate. Enviamos tres encabezados:

EncabezadoValor
X-RapidTranslate-Signaturesha256=<hmac>
X-RapidTranslate-Marca de tiempoMarca de tiempo Unix utilizada en la firma
X-RapidTranslate-EventoEl identificador único del evento

Calcula la firma esperada como un HMAC-SHA256 de la cadena "{timestamp}.{raw_request_body}" utilizando tu secreto de firma del webhook y, a continuación, compáralo con el valor del encabezado:

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

Node.js (Express): configura la ruta con un analizador de cuerpo sin formato para que se conserven los bytes exactos:

// 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));

Hay tres cosas que suelen causar problemas:

  • En X-RapidTranslate-Signature El encabezado incluye un sha256= prefijo. Se puede comparar con 'sha256=' + yourHmac (como se ha indicado anteriormente) o elimina el prefijo antes de comparar; no compares el valor hexadecimal sin prefijo con el encabezado completo.
  • Realiza un hash del cuerpo de la solicitud sin procesar tal y como se ha recibido. Al volver a serializar el JSON analizado, se modifican los espacios en blanco y el orden de las claves, por lo que la firma no coincidirá; lee el cuerpo antes de que cualquier middleware de JSON lo analice.
  • Comparar en tiempo constante (hash_equals / crypto.timingSafeEqual), nunca con == o ===.

En {marca de tiempo} forma parte de la cadena firmada, así que léela del encabezado y añádela al principio antes de aplicar el hash. Además, te permite rechazar entregas caducadas o repetidas; por ejemplo, cualquier marca de tiempo anterior a cinco minutos.

Las entregas fallidas se vuelven a intentar con un retardo exponencial (hasta 5 intentos). Responde con un 2xx estado para acusar recibo.