v1.0.0

API Referansı

Birkaç satır kodla Morlivo çeviri ve transkripsiyonunu uygulamanıza entegre edin.

Temel URL: https://api.morlivo.ai Kimlik Doğrulama: Authorization: Bearer mrl_...

Kimlik Dogrulama

Tüm API istekleri bir Bearer token gerektirir. API anahtarınızı Ayarlar altındaki kontrol panelinden alın.

Başlık
Authorization: Bearer mrl_your_api_key_here

API anahtarları şununla başlar mrl_. Gizli tutun. Ele geçirildiyse kontrol panelinden yenileyin.

POST

/v1/translate

Metni bir dilden başka bir dile çevirin. Belirtilmezse kaynak dil otomatik algılanır.

İstek gövdesi JSON

AlanTurZorunluAciklama
textstringevetÇevrilecek metin
target_languagestringevetISO 639-1 kodu (ör. es, fr, de)
source_languagestringhayırBelirtilmezse otomatik algılanır
project_idintegerhayırProje sözlüğü ve stilini uygula
formalitystringhayırRegister: formal, informal, or default

Yanıt 200

AlanTurAciklama
translated_textstringÇevrilmiş metin
source_languagestringAlgılanan veya belirtilen kaynak dil
target_languagestringHedef dil kodu
confidencefloatKalite puanı 0.0 - 1.0
validationobjectKalite doğrulama sonuçları

Örnekler

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!"
Yanıt
{
  "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

Bir ses veya video dosyasını metne dönüştürün. 100 MB'a kadar destekler.

İstek gövdesi multipart/form-data

AlanTurZorunluAciklama
filefileevetSes/video dosyası (mp3, wav, mp4, webm, vb.)
languagestringhayırISO kodu, belirtilmezse otomatik algılanır
project_idintegerhayırİzleme için bir projeye bağla
response_formatstringhayırOutput format: json, verbose_json, text, srt, vtt
punctuatebooleanhayırInclude punctuation (default true)

Yanıt 200

AlanTurAciklama
textstringTam transkripsiyon metni
languagestringAlgılanan dil
duration_secondsfloatSes süresi
confidencefloatKalite puanı 0.0 - 1.0
language_confidencefloatConfidence of auto-detected language (null if language was specified)
segmentsarrayZaman damgalı bölümler
validationobjectKalite kontrolleri

Örnekler

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"])
Yanıt
{
  "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

Gerçek zamanlı ses akışı yapın ve canlı transkripsiyon sonuçları alın.

Bağlantı

ParametreTurZorunluAciklama
tokenstringevetSorgu parametresi olarak API anahtarı
languagestringhayırKaynak dil ipucu (ör. en, fr). Belirtilmezse otomatik tespit edilir.

Protokol

Gönder

İkili PCM ses kareleri (16-bit, 16kHz mono)

Al

type alanına sahip JSON mesajları: transcript (kısmi/son metin), status (oturum olayları), error

Alınan mesajlar

AlanTurAciklama
typestring"transcript" | "status" | "error"
textstringTranskripsiyonu yapılmış metin (transkripsiyon mesajlarında)
is_finalbooleanSegment tamamlandığında doğru
languagestringTespit edilen dil kodu

Örnekler

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())
Mesaj örnekleri
// 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

Bir dilde ses akışı yapın ve başka bir dilde gerçek zamanlı çevrilmiş metin alın. Otomatik dil algılama ile konuşmadan metne çeviriyi destekler.

Bağlantı

ParametreTurZorunluAciklama
tokenstringevetSorgu parametresi olarak API anahtarı
target_languagestringevetÇıktı metni için dil (ör. en, es, fr)
source_languagestringhayırKaynak ses dili. Belirtilmezse otomatik tespit edilir.

Protokol

Gönder

İkili PCM ses kareleri (16-bit, 16kHz mono)

Al

target_language içinde çevrilmiş metin içeren JSON mesajları. Orijinal konuşmanın transkripsiyonunu ve çevrilmiş çıktıyı içerir.

Alınan mesajlar

AlanTurAciklama
typestring"transcript" | "status" | "error"
textstringHedef dilde çevrilmiş metin
is_finalbooleanSegment tamamlandığında doğru
source_languagestringTespit edilen kaynak dil
target_languagestringHedef dil kodu

Örnekler

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())
Mesaj örnekleri
// 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.

İstek gövdesi JSON

AlanTurZorunluAciklama
languagesobjectevetParticipant ID to language mapping
bridge_languagestringhayırHub language, default en
max_participantsinthayırMax participants 2-10, default 10
modestringhayırinterpreter or inline

Yanıt 200

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

Örnekler

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"
  }'
Yanıt
{
  "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.

Bağlantı

ParametreTurZorunluAciklama
room_idstringevetRoom ID from create room response (path param)
participantstringevetParticipant ID (query param)
tokenstringevetSorgu parametresi olarak API anahtarı

Örnek

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.

İstek gövdesi JSON

AlanTurZorunluAciklama
participant_idstringevetUnique participant identifier
languagestringevetParticipant's language code

Örnek

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.

Yanıt 200

AlanTurAciklama
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

Örnek

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

Yanıt 200

AlanTurAciklama
statusstringsağlıklı veya bozulmuş

Örnek

curl
curl https://api.morlivo.ai/api/v1/health
Yanıt
{
  "status": "healthy"
}

Uyumluluk Uç Noktaları

Zaten başka bir sağlayıcı mı kullanıyorsunuz? Bir URL değiştirin ve mevcut kodunuzu koruyun. Bu uç noktalar, büyük çeviri ve transkripsiyon API'lerinin istek ve yanıt formatlarını yansıtır.

DL

DeepL

Ceviri
POST /api/compat/deepl/v2/translate

Doğrudan yerine geçer api-free.deepl.com

G

Google Cloud Translation

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

Doğrudan yerine geçer translation.googleapis.com

A

AWS Translate

Ceviri
POST /api/compat/aws/translate

Doğrudan yerine geçer translate.amazonaws.com

OA

OpenAI Whisper

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

Doğrudan yerine geçer api.openai.com

DG

Deepgram

Transkripsiyon
POST /api/compat/deepgram/v1/listen

Doğrudan yerine geçer api.deepgram.com

Uyumluluk uç noktaları, orijinal sağlayıcıyla aynı istek formatını kabul eder ve aynı yanıt yapısını döndürür. İstek/yanıt şemaları için her sağlayıcının belgelerine bakın.

Hatalar

Tüm hatalar detail alanı içeren bir JSON nesnesi döndürür.

KodAnlamGerçekleştiğinde
400 Hatalı İstek Eksik gerekli alanlar, boş metin, desteklenmeyen dosya türü
401 Yetkisiz Eksik veya geçersiz API anahtarı
403 Yasaklandı API anahtarı geçerli ancak yetersiz izinler veya kota aşıldı
413 İstek Gövdesi Çok Büyük Dosya 100 MB yükleme sınırını aşıyor
429 Hız Sınırlandı Çok fazla istek. Üstel geri çekilme ile tekrar deneyin.
500 İç Hata Beklenmeyen sunucu hatası. Devam ederse destek ile iletişime geçin.
503 Hizmet Kullanılamıyor Yapay zeka modeli geçici olarak kullanılamıyor (devre kesici açık). Kısa süre sonra tekrar deneyin.
Hata yanıt formatı
{
  "detail": "Field 'text' must not be empty."
}
POST

PII Karartma

Herhangi bir çeviri veya transkripsiyon isteğine PII karartma ekleyin. Hangi varlık türlerinin tespit edilip karartılacağını belirtin.

POST /v1/translate POST /v1/transcribe

İstek gövdesi JSON

AlanTurZorunluAciklama
textstringevetÇevrilecek metin
source_languagestringhayırBelirtilmezse otomatik algılanır
target_languagestringevetISO 639-1 kodu (ör. es, fr, de)
redactstring[]hayırKarartılacak varlık türleri (ör. e-posta, telefon, isim)

Yanıt 200

AlanTurAciklama
translated_textstringPII karartılmış çevrilmiş metin
source_languagestringAlgılanan veya belirtilen kaynak dil
target_languagestringHedef dil kodu
confidencefloatKalite puanı 0.0 - 1.0
redactionsarrayUygulanan karartmaların listesi (tür ve değiştirme)

Örnekler

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]"
Yanıt
{
  "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]"}
  ]
}

Desteklenen Varlık Türleri

VarlıkAciklamaTespit
email E-posta adresleri Desen tabanlı (dahil)
phone Telefon numaraları Desen tabanlı (dahil)
ssn Sosyal Güvenlik numaraları Desen tabanlı (dahil)
credit_card Kredi kartı numaraları Desen tabanlı (dahil)
ip_address IP adresleri Desen tabanlı (dahil)
name Kişi isimleri AI destekli (ek maliyet)
address Fiziksel adresler AI destekli (ek maliyet)
medical Tıbbi bilgiler AI destekli (ek maliyet)

Format tabanlı varlıklar (e-posta, telefon, SSN, kredi kartı, IP) ek maliyet olmaksızın desen eşleştirme kullanılarak tespit edilir. Bağlamsal varlıklar (isim, adres, tıbbi) AI destekli tespit kullanır ve istek başına küçük bir ek ücret uygulanır.

Entegrasyona hazır mısınız?

API anahtarınızı almak ve çevirmeye başlamak için ücretsiz bir hesap oluşturun.