Demnächst verfügbar Benachrichtigt werden
Funktionen Preise API Referenz Über
Melden Sie sich an Demnächst verfügbar
v1.0.0

API Referenz

Integrieren Sie die Morlivo-Übersetzung und -Transkription mit wenigen Codezeilen in Ihre Anwendung.

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

Authentifizierung

Für alle API-Anfragen ist ein Bearer-Token erforderlich. Holen Sie sich Ihren API-Schlüssel im Dashboard unter Einstellungen.

Kopfzeile
Authorization: Bearer mrl_your_api_key_here

API-Schlüssel beginnen mit mrl_. Halten Sie sie geheim. Drehen Sie sie vom Armaturenbrett weg, wenn sie gefährdet sind.

POST

/v1/translate

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

Anforderungstext JSON

FeldTypErforderlichBeschreibung
textstringjaZu übersetzender Text
target_languagestringjaISO 639-1-Code (z. B. es, fr, de)
source_languagestringNeinWird automatisch erkannt, wenn es weggelassen wird
project_idintegerNeinWenden Sie Projektglossar und -stil an
formalitystringNeinRegistrieren: formell, informell oder standardmäßig

Antwort 200

FeldTypBeschreibung
translated_textstringDer übersetzte Text
source_languagestringErkannte oder bereitgestellte Quellsprache
target_languagestringCode der Zielsprache
confidencefloatQualitätsfaktor 0,0 - 1,0
validationobjectErgebnisse der Qualitätsvalidierung

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. Unterstützt bis zu 100 MB.

Anforderungstext multipart/form-data

FeldTypErforderlichBeschreibung
filefilejaAudio-/Videodatei (mp3, wav, mp4, webm usw.)
languagestringNeinISO-Code, wird automatisch erkannt, wenn er weggelassen wird
project_idintegerNeinLink zu einem Projekt zur Nachverfolgung
response_formatstringNeinAusgabeformat: json, verbose_json, text, srt, vtt
punctuatebooleanNeinSatzzeichen einbeziehen (Standard: true)

Antwort 200

FeldTypBeschreibung
textstringVollständiger transkribierter Text
languagestringErkannte Sprache
duration_secondsfloatAudiodauer
confidencefloatQualitätsfaktor 0,0 - 1,0
language_confidencefloatVertrauen der automatisch erkannten Sprache (null, wenn Sprache angegeben wurde)
segmentsarrayZeitgestempelte Segmente
validationobjectQualitätskontrollen

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

Streamen Sie Audio in Echtzeit und erhalten Sie Live-Transkriptionsergebnisse.

Verbindung

ParameterTypErforderlichBeschreibung
tokenstringjaSchlüssel API als Abfrageparameter
languagestringNeinHinweis zur Quellsprache (z. B. en, fr). Wird automatisch erkannt, wenn es weggelassen wird.

Protokoll

Senden

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

Empfangen

JSON Nachrichten mit Typfeld: Transkript (Teil-/Endtext), Status (Sitzungsereignisse), Fehler

Erhaltene Nachrichten

FeldTypBeschreibung
typestring"transcript" | "status" | "error"
textstringTranskribierter Text (auf Transkript-Nachrichten)
is_finalbooleanTrue, wenn das Segment abgeschlossen ist
languagestringSprachcode erkannt

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

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

Verbindung

ParameterTypErforderlichBeschreibung
tokenstringjaSchlüssel API als Abfrageparameter
target_languagestringjaSprache für den Ausgabetext (z. B. en, es, fr)
source_languagestringNeinQuellaudiosprache. Wird automatisch erkannt, wenn es weggelassen wird.

Protokoll

Senden

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

Empfangen

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

Erhaltene Nachrichten

FeldTypBeschreibung
typestring"transcript" | "status" | "error"
textstringÜbersetzter Text in der Zielsprache
is_finalbooleanTrue, wenn das Segment abgeschlossen ist
source_languagestringQuellsprache erkannt
target_languagestringCode der Zielsprache

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

/api/v1/live/shared-device/token

Erstellen Sie ein kurzlebiges Token für gemeinsam genutzte Geräte und öffnen Sie dann die zurückgegebene WebSocket URL. Keine Raum-Vorprovisionierung oder Sticky Routing erforderlich.

Anforderungstext JSON

FeldTypErforderlichBeschreibung
languagesobjectjaTeilnehmer-ID zur Sprachzuordnung
max_participantsintNeinMax. Teilnehmer 2–10, Standard 10
modestringNeinDolmetscher oder Inline

Antwort 200

FeldTypBeschreibung
tokenstringKurzlebiges signiertes WebSocket-Token
ws_urlstringWebSocket-URL für geteiltes Gerät ohne Raum
session_idstringFlüchtige Sitzungskennung
participant_idstringGenerierte Teilnehmer-ID

Beispiele

curl
curl -X POST https://api.morlivo.ai/api/v1/live/shared-device/token \
  -H "Authorization: Bearer mrl_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "language_a": "en",
    "language_b": "es"
  }'
Antwort
{
  "token": "eyJhbGciOiJIUzI1NiIs...",
  "ws_url": "wss://live.morlivo.ai/v1/live/shared-device/speech?token=...",
  "session_id": "shared_abc123",
  "participant_id": "shared-a1b2c3d4",
  "language_a": "en",
  "language_b": "es"
}
WebSocket

/v1/live/shared-device/speech

Verbinden Sie sich mit dem signierten Token, senden Sie 16-kHz-Mono-PCM-Frames und empfangen Sie übersetztes Audio sowie Ereignisse für Sprecher-/Dolmetscher-Transkripte.

Verbindung

ParameterTypErforderlichBeschreibung
tokenstringjaVon /api/v1/live/shared-device/token zurückgegebenes signiertes Token

Beispiel

JavaScript
const ws = new WebSocket(tokenResponse.ws_url);

ws.onmessage = (event) => {
  if (event.data instanceof Blob) {
    return playTranslatedAudio(event.data);
  }
  const msg = JSON.parse(event.data);
  if (msg.type === "transcript_input") renderSpeakerTranscript(msg);
  if (msg.type === "transcript_output") renderInterpreterTranscript(msg);
  if (msg.type === "interpreter_speaking") setInterpreterSpeaking(msg.active);
};
GET

/v1/languages

Listen Sie alle unterstützten Sprachen mit Gebietsschema, Name und Verfügbarkeitsstatus auf.

Antwort 200

FeldTypBeschreibung
languagesarrayListe der unterstützten Sprachen
languages[].localestringGebietsschemacode, z. B. fr-CA
languages[].namestringEnglischer Name
languages[].native_namestringEinheimischer Name
languages[].countrystringLand/Region
languages[].statusstringGA oder 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

Überprüfen Sie den API-Status und den Zustand der Datenbank. Keine Authentifizierung erforderlich.

Antwort 200

FeldTypBeschreibung
statusstringgesund oder degradiert

Beispiel

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

Kompatibilitätsendpunkte

Nutzen Sie bereits einen anderen Anbieter? Ändern Sie ein URL und behalten Sie Ihren vorhandenen Code. Diese Endpunkte spiegeln die Anforderungs- und Antwortformate der wichtigsten Übersetzungs- und Transkriptions-APIs wider.

DL

DeepL

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

Drop-in-Ersatz für api-free.deepl.com

G

Google Cloud Translation

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

Drop-in-Ersatz für translation.googleapis.com

A

AWS Translate

Übersetzung
POST /api/compat/aws/translate

Drop-in-Ersatz für translate.amazonaws.com

OA

OpenAI Whisper

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

Drop-in-Ersatz für api.openai.com

DG

Deepgram

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

Drop-in-Ersatz für api.deepgram.com

Kompatibilitätsendpunkte akzeptieren dasselbe Anforderungsformat und geben dieselbe Antwortstruktur zurück wie der ursprüngliche Anbieter. Informationen zu den Anforderungs-/Antwortschemata der einzelnen Anbieter finden Sie in der Dokumentation der einzelnen Anbieter.

Fehler

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

CodeBedeutungWenn es passiert
400 Schlechte Anfrage Fehlende Pflichtfelder, leerer Text, nicht unterstützter Dateityp
401 Nicht autorisiert Fehlender oder ungültiger API-Schlüssel
403 Verboten API-Schlüssel gültig, aber der erforderliche Scope oder die Mandantenberechtigung fehlt
402 Zahlung erforderlich Unzureichende Credits oder Kartenverifizierung erforderlich. Die Antwort enthält billing_url und X-Credits-* Header, wenn verfügbar.
413 Nutzlast zu groß Die Datei überschreitet das Upload-Limit von 100 MB
429 Begrenzter Preis Zu viele Anfragen. Versuchen Sie es erneut mit exponentiellem Backoff.
500 Interner Fehler Unerwarteter Serverfehler. Wenden Sie sich an den Support, wenn das Problem weiterhin besteht.
503 Dienst nicht verfügbar KI-Modell vorübergehend nicht verfügbar (Leistungsschalter offen). Versuchen Sie es in Kürze noch einmal.
Fehlerantwortformat
{
  "detail": "Field 'text' must not be empty."
}
402Guthabenerschöpfung
{
  "error": "insufficient_credits",
  "detail": "Insufficient credits",
  "billing_url": "/app/billing"
}

Erfolgreiche API-Antworten enthalten die Header X-Credits-Spent und X-Credits-Remaining. Wenn das Guthaben aufgebraucht ist, sollten Clients keine erneuten Versuche mehr unternehmen und den Nutzer zu billing_url weiterleiten.

POST

PII Schwärzung

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

POST /v1/translate POST /v1/transcribe

Anforderungstext JSON

FeldTypErforderlichBeschreibung
textstringjaZu übersetzender Text
source_languagestringNeinWird automatisch erkannt, wenn es weggelassen wird
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ärztem PII
source_languagestringErkannte oder bereitgestellte Quellsprache
target_languagestringCode der Zielsprache
confidencefloatQualitätsfaktor 0,0 - 1,0
redactionsarrayListe der angewendeten 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 (im Lieferumfang enthalten)
phone Telefonnummern Musterbasiert (im Lieferumfang enthalten)
ssn Sozialversicherungsnummern Musterbasiert (im Lieferumfang enthalten)
credit_card Kreditkartennummern Musterbasiert (im Lieferumfang enthalten)
ip_address IP-Adressen Musterbasiert (im Lieferumfang enthalten)
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 ohne zusätzliche Kosten mithilfe des Mustervergleichs erkannt. Kontextbezogene Entitäten (Name, Adresse, Medizin) nutzen die KI-gestützte Erkennung und erheben pro Anfrage eine geringe zusätzliche Gebühr.

Bereit zur Integration?

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