Referencia de la API

La API de RAVIRA te ofrece acceso programático a traducciones de nivel profesional con terminología coherente. Autentícate con un token Bearer y empieza a traducir en cuestión de minutos.

URL basehttps://ravira.dev/api/v1

Inicio rápido

Tres pasos para tu primera traducción:

  1. 1. Crea una cuenta en ravira.dev/register
  2. 2. Compra un paquete de caracteres y genera una clave de API en Configuración → API
  3. 3. Haz tu primera solicitud:
curl -X POST https://ravira.dev/api/v1/translate \
  -H "Authorization: Bearer rk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text": "Hello, world!", "source_lang": "en", "target_lang": "ro"}'

Respuesta:

{
  "translated_text": "Bună ziua, lume!",
  "characters_charged": 13,
  "source_lang": "en",
  "target_lang": "ro"
}

Autenticación

Todas las solicitudes a la API requieren un token Bearer en el Authorization encabezado. Las claves de API empiezan por rk_live_ y se generan en la configuración de tu cuenta.

Importante: Tu clave de API se muestra una sola vez al crearla. Guárdala de forma segura: no se puede recuperar.
Authorization: Bearer rk_live_YOUR_API_KEY

Puntos de conexión

POST/api/v1/translate

Traducir texto. Requiere autenticación. Los caracteres se cobran si la operación se completa correctamente.

ParámetroTipoObligatorioDescripción
textocadenaSíTexto para traducir (máx. 100.000 caracteres)
source_langcadenaNoCódigo del idioma de origen. Predeterminado: auto
target_langcadenaNoCódigo del idioma de destino. Predeterminado: en
GET/api/v1/usage

Devuelve el saldo actual de caracteres y el uso. Requiere autenticación.

curl https://ravira.dev/api/v1/usage \
  -H "Authorization: Bearer rk_live_YOUR_API_KEY"
{
  "characters_balance": 500000,
  "characters_used": 12500,
  "characters_expires_at": "2027-01-01T00:00:00"
}
GET/api/v1/languages

Devuelve una lista de los idiomas compatibles. No requiere autenticación.

curl https://ravira.dev/api/v1/languages

Ejemplos de código

Python

import requests

API_KEY = "rk_live_YOUR_API_KEY"
BASE_URL = "https://ravira.dev/api/v1"

def translate(text, target_lang="ro", source_lang="auto"):
    response = requests.post(
        f"{BASE_URL}/translate",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={"text": text, "source_lang": source_lang, "target_lang": target_lang}
    )
    response.raise_for_status()
    return response.json()["translated_text"]

result = translate("Hello, world!", target_lang="ro")
print(result)  # Bună ziua, lume!

JavaScript

const API_KEY = "rk_live_YOUR_API_KEY";
const BASE_URL = "https://ravira.dev/api/v1";

async function translate(text, targetLang = "ro", sourceLang = "auto") {
  const response = await fetch(`${BASE_URL}/translate`, {
    method: "POST",
    headers: {
      "Authorization": `Bearer ${API_KEY}`,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({ text, source_lang: sourceLang, target_lang: targetLang }),
  });
  if (!response.ok) throw new Error(`HTTP ${response.status}`);
  const data = await response.json();
  return data.translated_text;
}

const result = await translate("Hello, world!", "ro");
console.log(result); // Bună ziua, lume!

Códigos de error

HTTPCódigo de errorDescripción
401invalid_api_keyFalta la clave de API, no es válida o se ha revocado.
402insufficient_balanceLa cuenta no tiene caracteres disponibles. Compra más en ravira.dev/topup.
429rate_limit_exceededDemasiadas solicitudes. Reduce la velocidad y vuelve a intentarlo después del valor de retry_after (segundos).
400error_de_validaciónParámetros de solicitud no válidos.
500server_errorError interno del servidor. Vuelve a intentarlo dentro de unos instantes.

Límites de uso

Se aplican límites de uso por cuenta, no por clave de API.

  • 60 solicitudes/minuto por cuenta, entre todas las claves de API
  • Si se supera, la API devuelve HTTP 429 con una retry_after campo (segundos)
  • Hasta 5 claves de API por cuenta para la organización de proyectos

Casos de uso

Comercio electrónico

Inclusión de productos en varios idiomas

Un vendedor de Amazon o eBay quiere publicar productos automáticamente en 5 idiomas. Una llamada a la API por idioma; terminología coherente en todos los mercados.

import requests

API_KEY = "rk_live_YOUR_API_KEY"
BASE_URL = "https://ravira.dev/api/v1"

def translate_product(product):
    languages = {"ro": "Romanian", "de": "German", "fr": "French", "es": "Spanish"}
    translations = {}
    for lang_code, lang_name in languages.items():
        response = requests.post(
            BASE_URL + "/translate",
            headers={"Authorization": "Bearer " + API_KEY},
            json={"text": product["title"] + "

" + product["description"],
                  "source_lang": "en", "target_lang": lang_code}
        )
        translations[lang_code] = response.json()["translated_text"]
    return translations

product = {
    "title": "Wireless Noise-Cancelling Headphones",
    "description": "Premium over-ear headphones with 30-hour battery."
}
result = translate_product(product)
SaaS

Notificaciones de usuario localizadas

Una plataforma SaaS traduce todas las plantillas de notificación cuando un usuario nuevo establece su idioma preferido. Sin archivos de traducción estáticos: todo dinámico y siempre actualizado.

const API_KEY = "rk_live_YOUR_API_KEY";
const BASE_URL = "https://ravira.dev/api/v1";

async function localizeNotifications(userId, targetLang) {
  const templates = {
    welcome: "Welcome to our platform! Your account is ready.",
    trial_ending: "Your free trial ends in 3 days.",
    payment_success: "Payment confirmed. Thank you!",
    usage_alert: "You have used 80% of your monthly quota."
  };
  const localized = {};
  for (const [key, text] of Object.entries(templates)) {
    const res = await fetch(BASE_URL + "/translate", {
      method: "POST",
      headers: {
        "Authorization": "Bearer " + API_KEY,
        "Content-Type": "application/json"
      },
      body: JSON.stringify({ text, source_lang: "en", target_lang: targetLang })
    });
    localized[key] = (await res.json()).translated_text;
  }
  return localized;
}

// New user from Romania
localizeNotifications("user_123", "ro").then(t => {
  console.log(t.welcome);
});
Legal

Traducción preliminar de contratos

Un bufete de abogados recibe contratos en lenguas extranjeras y necesita una traducción preliminar rápida antes de enviarlos a un traductor jurado. Una terminología jurídica coherente ahorra tiempo de revisión.

import requests

API_KEY = "rk_live_YOUR_API_KEY"
BASE_URL = "https://ravira.dev/api/v1"

def pretranslate_contract(contract_text, source_lang):
    """Pre-translate a contract for internal review."""
    response = requests.post(
        BASE_URL + "/translate",
        headers={"Authorization": "Bearer " + API_KEY},
        json={
            "text": contract_text,
            "source_lang": source_lang,
            "target_lang": "en"
        }
    )
    return response.json()["translated_text"]

# Translate a German contract for English-speaking lawyers
with open("vertrag_2026.txt", "r") as f:
    german_contract = f.read()

english_draft = pretranslate_contract(german_contract, "de")
print("Pre-translation ready for legal review.")
print(english_draft[:200])
Periodismo

Seguimiento de noticias internacionales

Una redacción supervisa fuentes internacionales y traduce automáticamente los artículos relevantes para los editores. Se ejecuta como una tarea programada cada hora.

import requests
import schedule
import time

API_KEY = "rk_live_YOUR_API_KEY"
BASE_URL = "https://ravira.dev/api/v1"

def translate_article(article, source_lang):
    response = requests.post(
        BASE_URL + "/translate",
        headers={"Authorization": "Bearer " + API_KEY},
        json={"text": article, "source_lang": source_lang, "target_lang": "en"}
    )
    return response.json()["translated_text"]

def monitor_and_translate():
    # Fetch articles from your news source here
    articles = [
        {"text": "Neue Wirtschaftsdaten zeigen starkes Wachstum...", "lang": "de"},
        {"text": "Les negociations commerciales reprennent...", "lang": "fr"},
    ]
    for article in articles:
        translated = translate_article(article["text"], article["lang"])
        print("Translated:", translated[:80] + "...")

# Run every hour
schedule.every().hour.do(monitor_and_translate)
monitor_and_translate()  # Run immediately on start
Recursos humanos

Ofertas de empleo multilingües

Una empresa que publica ofertas de empleo por toda Europa traduce automáticamente cada anuncio. Una única versión en inglés se publica en 6 idiomas en cuestión de segundos.

const API_KEY = "rk_live_YOUR_API_KEY";
const BASE_URL = "https://ravira.dev/api/v1";

const TARGET_MARKETS = ["de", "fr", "es", "it", "pl", "ro"];

async function publishJobPosting(jobDescription) {
  const postings = {};
  for (const lang of TARGET_MARKETS) {
    const res = await fetch(BASE_URL + "/translate", {
      method: "POST",
      headers: {
        "Authorization": "Bearer " + API_KEY,
        "Content-Type": "application/json"
      },
      body: JSON.stringify({
        text: jobDescription,
        source_lang: "en",
        target_lang: lang
      })
    });
    postings[lang] = (await res.json()).translated_text;
  }
  console.log("Published in " + Object.keys(postings).length + " languages");
  return postings;
}

const job = "Senior Backend Engineer. Remote. Competitive salary.";
publishJobPosting(job);
Técnico

Documentación del software

Una herramienta para desarrolladores traduce su documentación para llegar a usuarios internacionales. Los archivos Markdown se traducen, pero los bloques de código permanecen intactos.

import requests
import re

API_KEY = "rk_live_YOUR_API_KEY"
BASE_URL = "https://ravira.dev/api/v1"

def translate_markdown(md_text, target_lang):
    """Translate markdown, preserving code blocks."""
    # Extract code blocks before translation
    code_blocks = {}
    def save_code(match):
        key = f"CODE_BLOCK_{len(code_blocks)}"
        code_blocks[key] = match.group(0)
        return key
    protected = re.sub(r"```[\s\S]*?```", save_code, md_text)
    # Translate text only
    response = requests.post(
        BASE_URL + "/translate",
        headers={"Authorization": "Bearer " + API_KEY},
        json={"text": protected, "source_lang": "en", "target_lang": target_lang}
    )
    translated = response.json()["translated_text"]
    # Restore code blocks
    for key, block in code_blocks.items():
        translated = translated.replace(key, block)
    return translated

with open("README.md") as f:
    readme = f.read()
translated_readme = translate_markdown(readme, "ro")
print(translated_readme[:300])
Medicina

Formularios de admisión de pacientes

Una clínica traduce los formularios de admisión de pacientes internacionales. Para uso interno y comodidad de los pacientes; el personal médico cualificado siempre los revisa antes de tomar decisiones clínicas.

import requests

API_KEY = "rk_live_YOUR_API_KEY"
BASE_URL = "https://ravira.dev/api/v1"

def translate_intake_form(form_data, patient_lang):
    """
    Translate patient intake form for non-English speaking patients.
    For internal use only. Always reviewed by qualified medical staff.
    """
    fields_to_translate = [
        "chief_complaint", "medical_history", "current_medications", "allergies"
    ]
    translated = {}
    for field in fields_to_translate:
        if field in form_data:
            response = requests.post(
                BASE_URL + "/translate",
                headers={"Authorization": "Bearer " + API_KEY},
                json={
                    "text": form_data[field],
                    "source_lang": patient_lang,
                    "target_lang": "en"
                }
            )
            translated[field] = response.json()["translated_text"]
    return translated

patient_form = {
    "chief_complaint": "Durere puternica in piept de 2 zile",
    "allergies": "Penicilina, Ibuprofen"
}
english_form = translate_intake_form(patient_form, "ro")
print("For medical staff review:", english_form)

¿Listo para empezar?

Genera tu clave de API en segundos. Sin tarifas de configuración ni suscripciones: paga solo por los caracteres que traduzcas.

¿Tienes preguntas? Escríbenos a humans@ravira.dev