API-referentie
De RAVIRA API biedt programmatische toegang tot vertalingen van professionele kwaliteit met consistente terminologie. Authenticeer met een Bearer-token en begin binnen enkele minuten met vertalen.
https://ravira.dev/api/v1Snel aan de slag
Drie stappen naar je eerste vertaling:
- 1. Maak een account aan op ravira.dev/register
- 2. Koop een tekenpakket en genereer een API-sleutel in Instellingen → API
- 3. Doe je eerste verzoek:
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"}'Antwoord:
{
"translated_text": "Bună ziua, lume!",
"characters_charged": 13,
"source_lang": "en",
"target_lang": "ro"
}Verificatie
Voor alle API-verzoeken is een Bearer-token vereist in de Authorization header. API-sleutels beginnen met rk_live_ en worden gegenereerd in je accountinstellingen.
Authorization: Bearer rk_live_YOUR_API_KEYEindpunten
/api/v1/translateTekst vertalen. Authenticatie vereist. Tekens worden alleen bij succes in rekening gebracht.
| Parameter | Type | Verplicht | Beschrijving |
|---|---|---|---|
| tekst | tekenreeks | Ja | Te vertalen tekst (max. 100.000 tekens) |
| source_lang | tekenreeks | Nee | Bron-taalcode. Standaard: auto |
| target_lang | tekenreeks | Nee | Doeltaalcode. Standaard: en |
/api/v1/usageGeeft het huidige tekensaldo en gebruik weer. Authenticatie vereist.
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/languagesGeeft een lijst met ondersteunde talen weer. Geen authenticatie vereist.
curl https://ravira.dev/api/v1/languagesCodevoorbeelden
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!Foutcodes
| HTTP | Foutcode | Beschrijving |
|---|---|---|
| 401 | invalid_api_key | API-sleutel ontbreekt, is ongeldig of ingetrokken. |
| 402 | insufficient_balance | Er zijn geen tekens meer beschikbaar op je account. Koop meer op ravira.dev/topup. |
| 429 | rate_limit_exceeded | Te veel verzoeken. Doe het rustiger aan en probeer het opnieuw na de waarde van retry_after (seconden). |
| 400 | validatiefout | Ongeldige verzoekparameters. |
| 500 | server_error | Interne serverfout. Probeer het na een korte wachttijd opnieuw. |
Limieten
Er gelden limieten per account, niet per API-sleutel.
- 60 verzoeken/minuut per account voor alle API-sleutels samen
- Bij overschrijding retourneert de API
HTTP 429met eenretry_afterveld (seconden) - Tot 5 API-sleutels per account voor projectorganisatie
Gebruiksscenario’s
Meertalige productvermeldingen
Een verkoper op Amazon of eBay wil producten automatisch in 5 talen aanbieden. Eén API-aanroep per taal — consistente terminologie op alle markten.
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)Gelokaliseerde gebruikersmeldingen
Een SaaS-platform vertaalt alle meldingssjablonen wanneer een nieuwe gebruiker de voorkeurstaal instelt. Geen statische vertaalbestanden — dynamisch en altijd up-to-date.
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);
});Voorvertaling van contracten
Een advocatenkantoor ontvangt contracten in vreemde talen en heeft een snelle voorvertaling nodig voordat het document naar een beëdigd vertaler wordt gestuurd. Consistente juridische terminologie bespaart tijd bij de controle.
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])Internationaal nieuws volgen
Een redactie volgt internationale bronnen en vertaalt relevante artikelen automatisch voor redacteuren. Wordt elk uur uitgevoerd als ingediende job.
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 startMeertalige vacatures
Een bedrijf dat vacatures in heel Europa plaatst, vertaalt elke vacature automatisch. Eén brontekst in het Engels, binnen enkele seconden gepubliceerd in 6 talen.
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);Softwaredocumentatie
Een ontwikkelaarstool vertaalt de documentatie om internationale gebruikers te bereiken. Markdown-bestanden worden vertaald, terwijl codeblokken ongewijzigd blijven.
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])Patiëntintakeformulieren
Een kliniek vertaalt intakeformulieren voor internationale patiënten. Voor intern gebruik en het comfort van patiënten — altijd beoordeeld door gekwalificeerd medisch personeel voordat klinische beslissingen worden genomen.
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)Klaar om te beginnen?
Genereer je API-sleutel in enkele seconden. Geen instelkosten, geen abonnementen — betaal alleen voor de tekens die je vertaalt.
Vragen? Mail ons op humans@ravira.dev