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.
https://ravira.dev/api/v1Início rápido
Três passos para a sua primeira tradução:
- 1. Crie uma conta em ravira.dev/register
- 2. Compre um pacote de caracteres e gere uma chave de API em Definições → API
- 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.
Authorization: Bearer rk_live_YOUR_API_KEYEndpoints
/api/v1/translateTraduzir texto. Requer autenticação. Os caracteres são cobrados em caso de sucesso.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| texto | cadeia de caracteres | Sim | Texto a traduzir (máx. 100.000 caracteres) |
| source_lang | cadeia de caracteres | Não | Código da língua de origem. Predefinição: auto |
| target_lang | cadeia de caracteres | Não | Código da língua de chegada. Predefinição: en |
/api/v1/usageDevolve 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"
}/api/v1/languagesDevolve a lista de idiomas suportados. Não requer autenticação.
curl https://ravira.dev/api/v1/languagesExemplos 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
| HTTP | Código de erro | Descrição |
|---|---|---|
| 401 | invalid_api_key | Chave de API em falta, inválida ou revogada. |
| 402 | insufficient_balance | A conta não tem mais caracteres disponíveis. Compre mais em ravira.dev/topup. |
| 429 | rate_limit_exceeded | Demasiadas solicitações. Reduza o ritmo e tente novamente após o valor de retry_after (segundos). |
| 400 | erro_de_validação | Parâmetros de pedido inválidos. |
| 500 | server_error | Erro 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 429com umretry_aftercampo (segundos) - Até 5 chaves de API por conta, para organização de projetos
Casos de uso
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)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);
});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])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 startAnú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);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])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