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.
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
} 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.
¿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
apiKey a una clave de Configuración de la empresa → Claves API.baseUrl para tu entorno; el valor predeterminado es «production».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.
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ón | Subvenciones |
|---|---|
órdenes:escribir | Crear y aprobar pedidos |
órdenes:leer | Recuperar y mostrar los pedidos |
precio:leer | Consulta la lista de precios |
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 facturablelivemode: false — entorno de pruebas / pedido de pruebaLas 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.
Cada respuesta correcta envuelve su contenido en un datos clave. Los puntos finales de la lista añaden un meta bloque con paginación.
{
"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
}
} 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."]
}
} | HTTP | código_de_error | Significado |
|---|---|---|
| 400 | solicitud_inválida | Cuerpo de la solicitud con formato incorrecto |
| 401 | sin autenticar | Clave ausente, no válida o revocada |
| 402 | pago_fallido | El pedido se ha aprobado, pero no se ha podido cobrar el pago |
| 402 | credit_hold | El importe del pedido supera tu límite de crédito |
| 403 | ámbito_prohibido | La clave no tiene el alcance necesario |
| 403 | cuenta_suspendida | Organización suspendida por facturas impagadas |
| 404 | not_found | No existe ningún pedido de este tipo para esta organización |
| 409 | referencia_duplicada | Referencia reutilizada para un pedido diferente |
| 409 | no_a la espera_de_aprobación | El pedido no está pendiente de tu aprobación |
| 422 | validación fallida | Campos que faltan o no son válidos |
| 429 | rate_limited | Se ha superado el límite de solicitudes |
| 500 | error_del_servidor | Error inesperado del servidor |
| 503 | error_de_procesamiento | Se ha producido un error en el procesamiento posterior (OCR / fijación de precios) |
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:
| Estado | Significado |
|---|---|
pendiente | Recibido; aún no se ha fijado el precio. total podría ser null. |
en espera de aprobación | Ya se ha calculado el precio y estamos a la espera de que apruebes el importe total (solo cuando sea necesaria la aprobación). |
procesamiento | Aprobado y activo; traducción en curso. |
finalizado | Ya está; los documentos traducidos están disponibles. |
cancelado | El 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.
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 }
]
} 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.
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
| Campo | Tipo | Notas |
|---|---|---|
referencia | Se requiere una cadena | Tu propia referencia de pedido única. Si la vuelves a utilizar, se recuperará el pedido existente (véase «idempotencia»). |
cliente[nombre] | Se requiere una cadena | Nombre y apellidos completos del cliente final. |
cliente[correo electrónico] | Se requiere una cadena | Correo electrónico del cliente final. |
idioma_de_origen | Se requiere una cadena | Texto exacto nombre de Lista de idiomas. |
idioma_de_destino | Se requiere una cadena | Texto exacto nombre de Lista de idiomas. |
tipo_de_traducción | Se requiere una cadena | Uno de certificada, estándar, especializado, bajo juramento, naati. |
recuperación | Se requiere una cadena | habitual o rápido. |
método de envío[método] | Se requiere una cadena | Uno de correo electrónico, correo electrónico certificado, mail_standard, envío al día siguiente. |
entrega[dirección][...] | objeto | Requisito 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] | booleano | Añadir la tramitación de la apostilla. Consulta las normas a continuación. |
apostilla [documentos] | entero | Número de documentos que deben llevar la apostilla. Obligatorio cuando esté activada. |
apostilla [país de destino] | cadena | País para el que se destina la apostilla. |
notas | cadena | Instrucciones en formato de texto libre. |
código_de_descuento | cadena | Un 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[] obligatorio | De 1 a 20 archivos. Formatos admitidos: pdf, jpg, jpeg, png, doc, docx, tiff, heic. Máximo 20 MB cada uno. |
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). mail_standard método de entrega. envío al día siguiente Solo para direcciones de EE. UU. 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.
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" 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
| Consulta | Notas |
|---|---|
estado | Uno de pendiente, en espera de aprobación, procesamiento, finalizado, cancelado. |
referencia | Filtra por tu referencia. |
idioma_de_origen / idioma_de_destino | Filtrar por nombre de idioma. |
creado_a partir de / created_to | Intervalo 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ágina | 1–100. Por defecto, se utiliza el tamaño de página estándar. |
página | Nú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" 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.
Los conjuntos fijos que se aceptan al crear un pedido.
| Valor | Descripción |
|---|---|
certificada | certificada traducción (precio por página). |
estándar | Traducción estándar (precio por palabra). |
especializado | Traducción especializada / de expertos (por página). |
bajo juramento | Traducción jurada (por página). |
naati | Traducción certificada por NAATI-certificada (por página). |
| Valor | Descripción |
|---|---|
habitual | Plazo de entrega estándar. |
rápido | Plazo de entrega acelerado. |
| Valor | Dirección | Descripción |
|---|---|---|
correo electrónico | No | Entrega digital por correo electrónico (gratis). |
correo electrónico certificado | No | Entrega digital certificada ante notario. |
mail_standard | Sí | Correo postal; se envía a los países en los que está disponible el servicio. |
envío al día siguiente | Sí | Envío por correo al siguiente día laborable (solo para direcciones en EE. UU.). |
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.
| Evento | Enviado el |
|---|---|
estado_del_pedido | El estado de un pedido cambia. |
opinión_del_cliente | Se ha calculado el precio de un pedido y está pendiente de tu aprobación (solo en modo de aprobación). |
entrega_de_documentos | Los documentos traducidos ya están listos, con sus enlaces de descarga. |
pago_fallido | No 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_hold | Si 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. |
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.
Cada solicitud está firmada para que puedas confirmar que procede de RapidTranslate. Enviamos tres encabezados:
| Encabezado | Valor |
|---|---|
X-RapidTranslate-Signature | sha256=<hmac> |
X-RapidTranslate-Marca de tiempo | Marca de tiempo Unix utilizada en la firma |
X-RapidTranslate-Evento | El 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:
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.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.