v1.0.0

API-Referenz

Integrieren Sie Morlivo Uebersetzung und Transkription in Ihre Anwendung mit wenigen Zeilen Code.

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

Authentifizierung

Alle API-Anfragen erfordern ein Bearer-Token. Holen Sie sich Ihren API-Schlüssel im Dashboard unter Einstellungen.

Header
Authorization: Bearer mrl_your_api_key_here

API-Schlüssel beginnen mit mrl_. Halten Sie sie geheim. Erneuern Sie sie über das Dashboard, wenn sie kompromittiert sind.

POST

/v1/translate

Übersetzen Sie Text von einer Sprache in eine andere. Die Ausgangssprache wird automatisch erkannt, wenn sie weggelassen wird.

Anfragekörper JSON

FeldTypErforderlichBeschreibung
textstringjaText zum Übersetzen
target_languagestringjaISO 639-1 Code (z.B. es, fr, de)
source_languagestringneinAutomatische Erkennung bei Auslassung
project_idintegerneinProjektglossar und -stil anwenden
formalitystringneinRegister: formal, informal, or default

Antwort 200

FeldTypBeschreibung
translated_textstringDer übersetzte Text
source_languagestringErkannte oder angegebene Ausgangssprache
target_languagestringZielsprachcode
confidencefloatQualitätsbewertung 0.0 - 1.0
validationobjectQualitätsvalidierungsergebnisse

Beispiele

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!"
Antwort
{
  "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

Transkribieren Sie eine Audio- oder Videodatei in Text. Bis zu 100 MB.

Anfragekörper multipart/form-data

FeldTypErforderlichBeschreibung
filefilejaAudio-/Videodatei (mp3, wav, mp4, webm, etc.)
languagestringneinISO-Code, automatisch erkannt wenn ausgelassen
project_idintegerneinMit einem Projekt zur Nachverfolgung verknüpfen
response_formatstringneinOutput format: json, verbose_json, text, srt, vtt
punctuatebooleanneinInclude punctuation (default true)

Antwort 200

FeldTypBeschreibung
textstringVollständig transkribierter Text
languagestringErkannte Sprache
duration_secondsfloatAudiodauer
confidencefloatQualitätsbewertung 0.0 - 1.0
language_confidencefloatConfidence of auto-detected language (null if language was specified)
segmentsarrayZeitgestempelte Segmente
validationobjectQualitätsprüfungen

Beispiele

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"])
Antwort
{
  "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

Audio in Echtzeit streamen und Live-Transkriptionsergebnisse empfangen.

Verbindung

ParameterTypErforderlichBeschreibung
tokenstringjaAPI-Schlüssel als Abfrageparameter
languagestringneinQuellsprachen-Hinweis (z. B. en, fr). Wird automatisch erkannt, wenn nicht angegeben.

Protokoll

Senden

Binäre PCM-Audioframes (16-Bit, 16 kHz Mono)

Empfangen

JSON-Nachrichten mit Typfeld: transcript (Teil-/Endtext), status (Sitzungsereignisse), error

Empfangene Nachrichten

FeldTypBeschreibung
typestring"transcript" | "status" | "error"
textstringTranskribierter Text (bei Transkriptnachrichten)
is_finalbooleanWahr, wenn das Segment vollständig ist
languagestringErkannter Sprachcode

Beispiele

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())
Nachrichtenbeispiele
// 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

Audio in einer Sprache streamen und übersetzten Text in einer anderen Sprache in Echtzeit empfangen. Unterstützt Sprache-zu-Text-Übersetzung mit automatischer Spracherkennung.

Verbindung

ParameterTypErforderlichBeschreibung
tokenstringjaAPI-Schlüssel als Abfrageparameter
target_languagestringjaSprache für den Ausgabetext (z. B. en, es, fr)
source_languagestringneinQuell-Audiosprache. Wird automatisch erkannt, wenn nicht angegeben.

Protokoll

Senden

Binäre PCM-Audioframes (16-Bit, 16 kHz Mono)

Empfangen

JSON-Nachrichten mit übersetztem Text in target_language. Enthält sowohl das Transkript der Originalsprache als auch die übersetzte Ausgabe.

Empfangene Nachrichten

FeldTypBeschreibung
typestring"transcript" | "status" | "error"
textstringÜbersetzter Text in Zielsprache
is_finalbooleanWahr, wenn das Segment vollständig ist
source_languagestringErkannte Quellsprache
target_languagestringZielsprachcode

Beispiele

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())
Nachrichtenbeispiele
// 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.

Anfragekörper JSON

FeldTypErforderlichBeschreibung
languagesobjectjaParticipant ID to language mapping
bridge_languagestringneinHub language, default en
max_participantsintneinMax participants 2-10, default 10
modestringneininterpreter or inline

Antwort 200

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

Beispiele

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"
  }'
Antwort
{
  "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.

Verbindung

ParameterTypErforderlichBeschreibung
room_idstringjaRoom ID from create room response (path param)
participantstringjaParticipant ID (query param)
tokenstringjaAPI-Schlüssel als Abfrageparameter

Beispiel

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.

Anfragekörper JSON

FeldTypErforderlichBeschreibung
participant_idstringjaUnique participant identifier
languagestringjaParticipant's language code

Beispiel

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.

Antwort 200

FeldTypBeschreibung
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

Beispiel

curl
curl https://api.morlivo.ai/api/v1/languages \
  -H "Authorization: Bearer mrl_your_key"
Antwort
{
  "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.

Antwort 200

FeldTypBeschreibung
statusstringgesund oder beeinträchtigt

Beispiel

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

Kompatibilitäts-Endpoints

Verwenden Sie bereits einen anderen Anbieter? Aendern Sie eine URL und behalten Sie Ihren bestehenden Code. Diese Endpoints spiegeln die Anfrage- und Antwortformate der wichtigsten Uebersetzungs- und Transkriptions-APIs.

DL

DeepL

Übersetzung
POST /api/compat/deepl/v2/translate

Direkter Ersatz für api-free.deepl.com

G

Google Cloud Translation

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

Direkter Ersatz für translation.googleapis.com

A

AWS Translate

Übersetzung
POST /api/compat/aws/translate

Direkter Ersatz für translate.amazonaws.com

OA

OpenAI Whisper

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

Direkter Ersatz für api.openai.com

DG

Deepgram

Transkription
POST /api/compat/deepgram/v1/listen

Direkter Ersatz für api.deepgram.com

Kompatibilitaets-Endpoints akzeptieren das gleiche Anfrageformat und geben die gleiche Antwortstruktur wie der urspruengliche Anbieter zurueck. Beziehen Sie sich auf die Dokumentation jedes Anbieters fuer deren Anfrage-/Antwort-Schemas.

Fehler

Alle Fehler geben ein JSON-Objekt mit einem detail-Feld zurück.

CodeBedeutungWann es passiert
400 Ungültige Anfrage Fehlende Pflichtfelder, leerer Text, nicht unterstuetzter Dateityp
401 Nicht autorisiert Fehlender oder ungültiger API-Schlüssel
403 Verboten API-Schlüssel gültig, aber unzureichende Berechtigungen oder Kontingent überschritten
413 Nutzlast zu groß Datei überschreitet das 100-MB-Upload-Limit
429 Rate limitiert Zu viele Anfragen. Versuchen Sie es mit exponentiellem Backoff.
500 Interner Fehler Unerwarteter Serverfehler. Kontaktieren Sie den Support, wenn er anhält.
503 Dienst nicht verfügbar KI-Modell voruebergehend nicht verfuegbar (Circuit Breaker offen). Versuchen Sie es in Kuerze erneut.
Fehlerantwortformat
{
  "detail": "Field 'text' must not be empty."
}
POST

PII-Schwärzung

Fügen Sie PII-Schwärzung zu jeder Übersetzungs- oder Transkriptionsanfrage hinzu. Legen Sie fest, welche Entitätstypen erkannt und geschwärzt werden sollen.

POST /v1/translate POST /v1/transcribe

Anfragekörper JSON

FeldTypErforderlichBeschreibung
textstringjaText zum Übersetzen
source_languagestringneinAutomatische Erkennung bei Auslassung
target_languagestringjaISO 639-1 Code (z.B. es, fr, de)
redactstring[]neinZu schwärzende Entitätstypen (z. B. E-Mail, Telefon, Name)

Antwort 200

FeldTypBeschreibung
translated_textstringÜbersetzter Text mit geschwärzter PII
source_languagestringErkannte oder angegebene Ausgangssprache
target_languagestringZielsprachcode
confidencefloatQualitätsbewertung 0.0 - 1.0
redactionsarrayListe der angewandten Schwärzungen (Typ und Ersetzung)

Beispiele

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]"
Antwort
{
  "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]"}
  ]
}

Unterstützte Entitätstypen

EntitätBeschreibungErkennung
email E-Mail-Adressen Musterbasiert (inklusive)
phone Telefonnummern Musterbasiert (inklusive)
ssn Sozialversicherungsnummern Musterbasiert (inklusive)
credit_card Kreditkartennummern Musterbasiert (inklusive)
ip_address IP-Adressen Musterbasiert (inklusive)
name Personennamen KI-gestützt (zusätzliche Kosten)
address Physische Adressen KI-gestützt (zusätzliche Kosten)
medical Medizinische Informationen KI-gestützt (zusätzliche Kosten)

Formatbasierte Entitäten (E-Mail, Telefon, SSN, Kreditkarte, IP) werden mittels Mustererkennung ohne zusätzliche Kosten erkannt. Kontextbasierte Entitäten (Name, Adresse, Medizin) verwenden KI-gestützte Erkennung und verursachen einen geringen Aufpreis pro Anfrage.

Bereit zur Integration?

Erstellen Sie ein kostenloses Konto, um Ihren API-Schlüssel zu erhalten und mit dem Übersetzen zu beginnen.