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.

Basis-URLhttps://ravira.dev/api/v1

Snel aan de slag

Drie stappen naar je eerste vertaling:

  1. 1. Maak een account aan op ravira.dev/register
  2. 2. Koop een tekenpakket en genereer een API-sleutel in Instellingen → API
  3. 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.

Belangrijk: Je API-sleutel wordt alleen getoond wanneer je deze aanmaakt. Bewaar deze veilig — je kunt hem niet terughalen.
Authorization: Bearer rk_live_YOUR_API_KEY

Eindpunten

POST/api/v1/translate

Tekst vertalen. Authenticatie vereist. Tekens worden alleen bij succes in rekening gebracht.

ParameterTypeVerplichtBeschrijving
teksttekenreeksJaTe vertalen tekst (max. 100.000 tekens)
source_langtekenreeksNeeBron-taalcode. Standaard: auto
target_langtekenreeksNeeDoeltaalcode. Standaard: en
GET/api/v1/usage

Geeft 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"
}
GET/api/v1/languages

Geeft een lijst met ondersteunde talen weer. Geen authenticatie vereist.

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

Codevoorbeelden

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

HTTPFoutcodeBeschrijving
401invalid_api_keyAPI-sleutel ontbreekt, is ongeldig of ingetrokken.
402insufficient_balanceEr zijn geen tekens meer beschikbaar op je account. Koop meer op ravira.dev/topup.
429rate_limit_exceededTe veel verzoeken. Doe het rustiger aan en probeer het opnieuw na de waarde van retry_after (seconden).
400validatiefoutOngeldige verzoekparameters.
500server_errorInterne 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 429 met een retry_after veld (seconden)
  • Tot 5 API-sleutels per account voor projectorganisatie

Gebruiksscenario’s

E-commerce

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)
SaaS

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);
});
Juridisch

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

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 start
HR

Meertalige 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);
Technisch

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

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