v1.0.0

API-referentie

Integreer Morlivo-vertaling en -transcriptie in uw applicatie met slechts een paar regels code.

Basis-URL: https://api.morlivo.ai Auth: Authorization: Bearer mrl_...

Authenticatie

Alle API-verzoeken vereisen een Bearer-token. Haal uw API-sleutel op via het dashboard onder Instellingen.

Header
Authorization: Bearer mrl_your_api_key_here

API-sleutels beginnen met mrl_. Houd ze geheim. Roteer ze via het dashboard als ze gecompromitteerd zijn.

POST

/v1/translate

Vertaal tekst van de ene taal naar de andere. De brontaal wordt automatisch gedetecteerd indien weggelaten.

Verzoekbody JSON

VeldTypeVerplichtBeschrijving
textstringjaTe vertalen tekst
target_languagestringjaISO 639-1-code (bijv. es, fr, de)
source_languagestringneeAutomatisch gedetecteerd indien weggelaten
project_idintegerneeProjectwoordenlijst en -stijl toepassen
formalitystringneeRegister: formal, informal, or default

Antwoord 200

VeldTypeBeschrijving
translated_textstringDe vertaalde tekst
source_languagestringGedetecteerde of opgegeven brontaal
target_languagestringDoeltaalcode
confidencefloatKwaliteitsscore 0.0 - 1.0
validationobjectKwaliteitsvalidatieresultaten

Voorbeelden

curl
curl -X POST https://api.morlivo.ai/api/v1/translate \
  -H "Authorization: Bearer mrl_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Hello, world!",
    "target_language": "es"
  }'
Python
import httpx

resp = httpx.post(
    "https://api.morlivo.ai/api/v1/translate",
    headers={"Authorization": "Bearer mrl_your_key"},
    json={
        "text": "Hello, world!",
        "target_language": "es",
    },
)
data = resp.json()
print(data["translated_text"])
# → "¡Hola, mundo!"
JavaScript
const resp = await fetch(
  "https://api.morlivo.ai/api/v1/translate",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer mrl_your_key",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      text: "Hello, world!",
      target_language: "es",
    }),
  }
);
const data = await resp.json();
console.log(data.translated_text);
// → "¡Hola, mundo!"
Antwoord
{
  "translated_text": "¡Hola, mundo!",
  "source_language": "en",
  "target_language": "es",
  "confidence": 0.98,
  "validation": {
    "length_ratio": 1.08,
    "language_match": true,
    "passed": true
  }
}
POST

/v1/transcribe

Transcribeer een audio- of videobestand naar tekst. Ondersteunt tot 100 MB.

Verzoekbody multipart/form-data

VeldTypeVerplichtBeschrijving
filefilejaAudio-/videobestand (mp3, wav, mp4, webm, etc.)
languagestringneeISO-code, automatisch gedetecteerd indien weggelaten
project_idintegerneeKoppelen aan een project voor tracking
response_formatstringneeOutput format: json, verbose_json, text, srt, vtt
punctuatebooleanneeInclude punctuation (default true)

Antwoord 200

VeldTypeBeschrijving
textstringVolledige getranscribeerde tekst
languagestringGedetecteerde taal
duration_secondsfloatAudioduur
confidencefloatKwaliteitsscore 0.0 - 1.0
language_confidencefloatConfidence of auto-detected language (null if language was specified)
segmentsarraySegmenten met tijdstempel
validationobjectKwaliteitscontroles

Voorbeelden

curl
curl -X POST https://api.morlivo.ai/api/v1/transcribe \
  -H "Authorization: Bearer mrl_your_key" \
  -F "file=@meeting.mp3" \
  -F "language=en"
Python
import httpx

with open("meeting.mp3", "rb") as f:
    resp = httpx.post(
        "https://api.morlivo.ai/api/v1/transcribe",
        headers={"Authorization": "Bearer mrl_your_key"},
        files={"file": ("meeting.mp3", f, "audio/mpeg")},
        data={"language": "en"},
    )
data = resp.json()
print(data["text"])
Antwoord
{
  "text": "Welcome everyone to today's meeting...",
  "language": "en",
  "duration_seconds": 342.5,
  "confidence": 0.95,
  "language_confidence": 0.95,
  "segments": [
    {"start": 0.0, "end": 3.2, "text": "Welcome everyone"},
    {"start": 3.2, "end": 6.8, "text": "to today's meeting."}
  ],
  "validation": {
    "words_per_minute": 148,
    "repetition_detected": false,
    "passed": true
  }
}
WebSocket

/v1/live/transcribe

Stream audio in real-time en ontvang live transcriptieresultaten.

Verbinding

ParameterTypeVerplichtBeschrijving
tokenstringjaAPI-sleutel als queryparameter
languagestringneeBrontaalhint (bijv. en, fr). Automatisch gedetecteerd indien weggelaten.

Protocol

Verzenden

Binaire PCM-audioframes (16-bit, 16kHz mono)

Ontvangen

JSON-berichten met type-veld: transcript (gedeeltelijke/definitieve tekst), status (sessiegebeurtenissen), error

Ontvangen berichten

VeldTypeBeschrijving
typestring"transcript" | "status" | "error"
textstringGetranscribeerde tekst (bij transcriptieberichten)
is_finalbooleanWaar wanneer segment compleet is
languagestringGedetecteerde taalcode

Voorbeelden

JavaScript
const ws = new WebSocket(
  "wss://live.morlivo.ai/v1/live/transcribe?token=mrl_your_key&language=en"
);

navigator.mediaDevices.getUserMedia({ audio: true })
  .then(stream => {
    const ctx = new AudioContext({ sampleRate: 16000 });
    const source = ctx.createMediaStreamSource(stream);
    const processor = ctx.createScriptProcessor(4096, 1, 1);

    source.connect(processor);
    processor.connect(ctx.destination);
    processor.onaudioprocess = (e) => {
      const pcm = e.inputBuffer.getChannelData(0);
      const int16 = new Int16Array(pcm.length);
      for (let i = 0; i < pcm.length; i++)
        int16[i] = Math.max(-1, Math.min(1, pcm[i])) * 0x7FFF;
      ws.send(int16.buffer);
    };
  });

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  if (msg.type === "transcript") {
    console.log(msg.is_final ? "FINAL:" : "partial:", msg.text);
  }
};
Python
import asyncio, json, websockets

async def live_transcribe():
    uri = "wss://live.morlivo.ai/v1/live/transcribe?token=mrl_your_key"
    async with websockets.connect(uri) as ws:
        # Send audio chunks (PCM 16-bit 16kHz mono)
        with open("audio.pcm", "rb") as f:
            while chunk := f.read(4096):
                await ws.send(chunk)
                msg = json.loads(await ws.recv())
                if msg["type"] == "transcript":
                    print(msg["text"], end="\r" if not msg["is_final"] else "\n")

asyncio.run(live_transcribe())
Berichtvoorbeelden
// Session started
{"type": "status", "message": "session_started"}

// Partial transcript (still speaking)
{"type": "transcript", "text": "Hello every", "is_final": false}

// Final transcript (segment complete)
{"type": "transcript", "text": "Hello everyone, welcome to the meeting.",
 "is_final": true, "language": "en"}

// Session ended
{"type": "status", "message": "session_ended",
 "duration_seconds": 45.2}
WebSocket

/v1/live/translate

Stream audio in één taal en ontvang vertaalde tekst in een andere taal in real-time. Ondersteunt spraak-naar-tekst vertaling met automatische taaldetectie.

Verbinding

ParameterTypeVerplichtBeschrijving
tokenstringjaAPI-sleutel als queryparameter
target_languagestringjaTaal voor uitvoertekst (bijv. en, es, fr)
source_languagestringneeBrontaal van audio. Automatisch gedetecteerd indien weggelaten.

Protocol

Verzenden

Binaire PCM-audioframes (16-bit, 16kHz mono)

Ontvangen

JSON-berichten met vertaalde tekst in target_language. Bevat zowel het transcript van de oorspronkelijke spraak als de vertaalde uitvoer.

Ontvangen berichten

VeldTypeBeschrijving
typestring"transcript" | "status" | "error"
textstringVertaalde tekst in doeltaal
is_finalbooleanWaar wanneer segment compleet is
source_languagestringGedetecteerde brontaal
target_languagestringDoeltaalcode

Voorbeelden

JavaScript
const ws = new WebSocket(
  "wss://live.morlivo.ai/v1/live/translate" +
  "?token=mrl_your_key&target_language=es&source_language=en"
);

// Stream microphone audio (same setup as live transcribe)
// ...

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  if (msg.type === "transcript" && msg.is_final) {
    console.log(`[${msg.source_language} → ${msg.target_language}]`);
    console.log(msg.text);
  }
};
Python
import asyncio, json, websockets

async def live_translate():
    uri = (
        "wss://live.morlivo.ai/v1/live/translate"
        "?token=mrl_your_key"
        "&source_language=fr&target_language=en"
    )
    async with websockets.connect(uri) as ws:
        with open("french_audio.pcm", "rb") as f:
            while chunk := f.read(4096):
                await ws.send(chunk)
                msg = json.loads(await ws.recv())
                if msg["type"] == "transcript" and msg["is_final"]:
                    print(f"Translation: {msg['text']}")

asyncio.run(live_translate())
Berichtvoorbeelden
// Partial translation
{"type": "transcript", "text": "Hello every",
 "is_final": false, "source_language": "fr", "target_language": "en"}

// Final translated segment
{"type": "transcript",
 "text": "Hello everyone, welcome to the meeting.",
 "is_final": true,
 "source_language": "fr", "target_language": "en"}

// Session summary
{"type": "status", "message": "session_ended",
 "duration_seconds": 120.5}
POST

/v1/live/rooms

Create a multi-participant translation room. Each participant speaks their own language and receives translated text from other participants.

Verzoekbody JSON

VeldTypeVerplichtBeschrijving
languagesobjectjaParticipant ID to language mapping
bridge_languagestringneeHub language, default en
max_participantsintneeMax participants 2-10, default 10
modestringneeinterpreter or inline

Antwoord 200

VeldTypeBeschrijving
room_idstringUnique room identifier
statusstringRoom status
languagesobjectParticipant ID to language mapping
bridge_languagestringHub language used for translation
modestringTranslation mode
max_participantsintMaximum number of participants

Voorbeelden

curl
curl -X POST https://api.morlivo.ai/api/v1/live/rooms \
  -H "Authorization: Bearer mrl_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "languages": {"alice": "en", "bob": "fr", "carlos": "es"},
    "bridge_language": "en",
    "mode": "interpreter"
  }'
Antwoord
{
  "room_id": "room_abc123",
  "status": "active",
  "languages": {"alice": "en", "bob": "fr", "carlos": "es"},
  "bridge_language": "en",
  "mode": "interpreter",
  "max_participants": 10
}
WebSocket

/v1/live/speech/{room_id}

Connect a participant to a room for real-time speech translation.

Verbinding

ParameterTypeVerplichtBeschrijving
room_idstringjaRoom ID from create room response (path param)
participantstringjaParticipant ID (query param)
tokenstringjaAPI-sleutel als queryparameter

Voorbeeld

JavaScript
const ws = new WebSocket(
  "wss://live.morlivo.ai/v1/live/speech/room_abc123" +
  "?token=mrl_your_key&participant=alice"
);

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  if (msg.type === "transcript" && msg.is_final) {
    console.log(`[${msg.source_language} → ${msg.target_language}]`);
    console.log(msg.text);
  }
};
POST

/v1/live/rooms/{room_id}/participants

Add a participant to an existing room after creation.

Verzoekbody JSON

VeldTypeVerplichtBeschrijving
participant_idstringjaUnique participant identifier
languagestringjaParticipant's language code

Voorbeeld

curl
curl -X POST https://api.morlivo.ai/api/v1/live/rooms/room_abc123/participants \
  -H "Authorization: Bearer mrl_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "participant_id": "diana",
    "language": "de"
  }'
GET

/v1/languages

List all supported languages with locale, name, and availability status.

Antwoord 200

VeldTypeBeschrijving
languagesarrayList of supported languages
languages[].localestringLocale code e.g. fr-CA
languages[].namestringEnglish name
languages[].native_namestringNative name
languages[].countrystringCountry/region
languages[].statusstringga or beta

Voorbeeld

curl
curl https://api.morlivo.ai/api/v1/languages \
  -H "Authorization: Bearer mrl_your_key"
Antwoord
{
  "languages": [
    {"locale": "en-US", "name": "English", "native_name": "English", "country": "United States", "status": "ga"},
    {"locale": "fr-CA", "name": "French", "native_name": "Français", "country": "Canada", "status": "ga"},
    {"locale": "sw-KE", "name": "Swahili", "native_name": "Kiswahili", "country": "Kenya", "status": "beta"}
  ]
}
GET

/v1/health

Check API status and database health. No authentication required.

Antwoord 200

VeldTypeBeschrijving
statusstringgezond of verslechterd

Voorbeeld

curl
curl https://api.morlivo.ai/api/v1/health
Antwoord
{
  "status": "healthy"
}

Compatibiliteitsendpoints

Gebruikt u al een andere provider? Verander één URL en behoud uw bestaande code. Deze endpoints spiegelen de verzoek- en antwoordformaten van de belangrijkste vertaal- en transcriptie-API's.

DL

DeepL

Vertaling
POST /api/compat/deepl/v2/translate

Drop-in vervanging voor api-free.deepl.com

G

Google Cloud Translation

Vertaling
POST /api/compat/google/v3/projects/{"{p}"}/locations/{"{l}"}:translateText

Drop-in vervanging voor translation.googleapis.com

A

AWS Translate

Vertaling
POST /api/compat/aws/translate

Drop-in vervanging voor translate.amazonaws.com

OA

OpenAI Whisper

Transcriptie
POST /api/compat/openai/v1/audio/transcriptions

Drop-in vervanging voor api.openai.com

DG

Deepgram

Transcriptie
POST /api/compat/deepgram/v1/listen

Drop-in vervanging voor api.deepgram.com

Compatibiliteitsendpoints accepteren hetzelfde verzoekformaat en retourneren dezelfde antwoordstructuur als de oorspronkelijke provider. Raadpleeg de documentatie van elke provider voor hun verzoek-/antwoordschema's.

Fouten

Alle fouten retourneren een JSON-object met een detail-veld.

CodeBetekenisWanneer het gebeurt
400 Ongeldig verzoek Ontbrekende verplichte velden, lege tekst, niet-ondersteund bestandstype
401 Ongeautoriseerd Ontbrekende of ongeldige API-sleutel
403 Verboden API-sleutel geldig maar onvoldoende rechten of quotum overschreden
413 Payload te groot Bestand overschrijdt de uploadlimiet van 100 MB
429 Snelheidsbeperkt Te veel verzoeken. Probeer opnieuw met exponentiële vertraging.
500 Interne fout Onverwachte serverfout. Neem contact op met ondersteuning als dit aanhoudt.
503 Dienst niet beschikbaar AI-model tijdelijk niet beschikbaar (circuit breaker open). Probeer het binnenkort opnieuw.
Foutantwoordformaat
{
  "detail": "Field 'text' must not be empty."
}
POST

PII-redactie

Voeg PII-redactie toe aan elk vertaal- of transcriptieverzoek. Specificeer welke entiteittypen gedetecteerd en geredigeerd moeten worden.

POST /v1/translate POST /v1/transcribe

Verzoekbody JSON

VeldTypeVerplichtBeschrijving
textstringjaTe vertalen tekst
source_languagestringneeAutomatisch gedetecteerd indien weggelaten
target_languagestringjaISO 639-1-code (bijv. es, fr, de)
redactstring[]neeTe redigeren entiteittypen (bijv. e-mail, telefoon, naam)

Antwoord 200

VeldTypeBeschrijving
translated_textstringVertaalde tekst met geredigeerde PII
source_languagestringGedetecteerde of opgegeven brontaal
target_languagestringDoeltaalcode
confidencefloatKwaliteitsscore 0.0 - 1.0
redactionsarrayLijst van toegepaste redacties (type en vervanging)

Voorbeelden

curl
curl -X POST https://api.morlivo.ai/api/v1/translate \
  -H "Authorization: Bearer mrl_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Contact John Smith at john@example.com or 555-123-4567",
    "source_language": "en",
    "target_language": "fr",
    "redact": ["email", "phone", "name"]
  }'
Python
import httpx

resp = httpx.post(
    "https://api.morlivo.ai/api/v1/translate",
    headers={"Authorization": "Bearer mrl_your_key"},
    json={
        "text": "Contact John Smith at john@example.com or 555-123-4567",
        "source_language": "en",
        "target_language": "fr",
        "redact": ["email", "phone", "name"],
    },
)
data = resp.json()
print(data["translated_text"])
# → "Contactez [NAME_REDACTED] à [EMAIL_REDACTED] ou [PHONE_REDACTED]"
JavaScript
const resp = await fetch(
  "https://api.morlivo.ai/api/v1/translate",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer mrl_your_key",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      text: "Contact John Smith at john@example.com or 555-123-4567",
      source_language: "en",
      target_language: "fr",
      redact: ["email", "phone", "name"],
    }),
  }
);
const data = await resp.json();
console.log(data.translated_text);
// → "Contactez [NAME_REDACTED] à [EMAIL_REDACTED] ou [PHONE_REDACTED]"
Antwoord
{
  "translated_text": "Contactez [NAME_REDACTED] à [EMAIL_REDACTED] ou [PHONE_REDACTED]",
  "source_language": "en",
  "target_language": "fr",
  "confidence": 0.95,
  "redactions": [
    {"type": "name", "replacement": "[NAME_REDACTED]"},
    {"type": "email", "replacement": "[EMAIL_REDACTED]"},
    {"type": "phone", "replacement": "[PHONE_REDACTED]"}
  ]
}

Ondersteunde Entiteittypen

EntiteitBeschrijvingDetectie
email E-mailadressen Op patroon gebaseerd (inbegrepen)
phone Telefoonnummers Op patroon gebaseerd (inbegrepen)
ssn Burgerservicenummers Op patroon gebaseerd (inbegrepen)
credit_card Creditcardnummers Op patroon gebaseerd (inbegrepen)
ip_address IP-adressen Op patroon gebaseerd (inbegrepen)
name Persoonsnamen AI-gestuurd (extra kosten)
address Fysieke adressen AI-gestuurd (extra kosten)
medical Medische informatie AI-gestuurd (extra kosten)

Op formaat gebaseerde entiteiten (e-mail, telefoon, SSN, creditcard, IP) worden gedetecteerd met patroonherkenning zonder extra kosten. Contextuele entiteiten (naam, adres, medisch) gebruiken AI-gestuurde detectie en brengen een kleine extra toeslag per verzoek met zich mee.

Klaar om te integreren?

Maak een gratis account aan om uw API-sleutel te krijgen en te beginnen met vertalen.