Referência da API

A API RAVIRA oferece acesso programático a traduções de nível profissional, com terminologia consistente. Autentique-se com um token Bearer e comece a traduzir em poucos minutos.

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

Início rápido

Três passos para a sua primeira tradução:

  1. 1. Crie uma conta em ravira.dev/register
  2. 2. Compre um pacote de caracteres e gere uma chave de API em Definições → API
  3. 3. Faça o seu primeiro pedido:
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"}'

Resposta:

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

Autenticação

Todas as solicitações à API exigem um token Bearer no Authorization cabeçalho. As chaves de API começam com rk_live_ e são gerados nas definições da sua conta.

Importante: A sua chave de API é apresentada apenas uma vez, ao ser criada. Guarde-a em segurança — não é possível recuperá-la.
Authorization: Bearer rk_live_YOUR_API_KEY

Endpoints

POST/api/v1/translate

Traduzir texto. Requer autenticação. Os caracteres são cobrados em caso de sucesso.

ParâmetroTipoObrigatórioDescrição
textocadeia de caracteresSimTexto a traduzir (máx. 100.000 caracteres)
source_langcadeia de caracteresNãoCódigo da língua de origem. Predefinição: auto
target_langcadeia de caracteresNãoCódigo da língua de chegada. Predefinição: en
GET/api/v1/usage

Devolve o saldo e a utilização atuais de caracteres. Requer autenticação.

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

Devolve a lista de idiomas suportados. Não requer autenticação.

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

Exemplos 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 erro

HTTPCódigo de erroDescrição
401invalid_api_keyChave de API em falta, inválida ou revogada.
402insufficient_balanceA conta não tem mais caracteres disponíveis. Compre mais em ravira.dev/topup.
429rate_limit_exceededDemasiadas solicitações. Reduza o ritmo e tente novamente após o valor de retry_after (segundos).
400erro_de_validaçãoParâmetros de pedido inválidos.
500server_errorErro interno do servidor. Tente novamente após um breve intervalo.

Limites de utilização

Aplicam-se limites de utilização por conta, não por chave de API.

  • 60 solicitações/minuto por conta, em todas as chaves de API
  • Quando excedido, a API retorna HTTP 429 com um retry_after campo (segundos)
  • Até 5 chaves de API por conta, para organização de projetos

Casos de uso

Comércio eletrônico

Referenciações de produtos multilingues

Um vendedor na Amazon ou no eBay quer anunciar produtos automaticamente em 5 idiomas. Uma chamada de API por idioma — terminologia consistente em todos os 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

Notificações localizadas para utilizadores

Uma plataforma SaaS traduz todos os modelos de notificação quando um novo usuário define seu idioma preferido. Sem arquivos de tradução estáticos: conteúdo dinâmico e sempre atualizado.

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

Pré-tradução de contratos

Um escritório de advocacia recebe contratos em línguas estrangeiras e precisa de uma pré-tradução rápida antes de enviá-los a um tradutor juramentado. A terminologia jurídica consistente reduz o tempo de revisão.

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])
Jornalismo

Monitorização de notícias internacionais

Uma redação monitora fontes internacionais e traduz automaticamente artigos relevantes para os editores. Executado como um trabalho escalonado a 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
RH

Anúncios de emprego multilingues

Uma empresa que publica vagas em toda a Europa traduz automaticamente cada anúncio. Um conteúdo original em inglês, publicado em 6 idiomas em 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

Documentação do software

Uma ferramenta para desenvolvedores traduz sua documentação para alcançar usuários internacionais. Os arquivos Markdown são traduzidos, enquanto os blocos de código permanecem 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

Formulários de admissão de pacientes

Uma clínica traduz formulários de admissão de pacientes internacionais. Para uso interno e maior conforto dos pacientes — sempre revisados por profissionais de saúde qualificados antes de decisões 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)

Pronto para começar?

Gere sua chave de API em segundos. Sem taxas de configuração nem assinaturas — pague apenas pelos caracteres que traduzir.

Dúvidas? Escreva-nos para humans@ravira.dev