v1.0.0

مرجع API

ادمج ترجمة وتفريغ Morlivo الصوتي في تطبيقك بسطور قليلة من الكود.

عنوان URL الأساسي: https://api.morlivo.ai المصادقة: Authorization: Bearer mrl_...

المصادقة

تتطلب جميع طلبات API رمز Bearer. احصل على مفتاح API الخاص بك من لوحة التحكم ضمن الإعدادات.

الترويسة
Authorization: Bearer mrl_your_api_key_here

تبدأ مفاتيح API بـ mrl_. احتفظ بها سرية. قم بتدويرها من لوحة التحكم إذا تم اختراقها.

POST

/v1/translate

ترجم نصاً من لغة إلى أخرى. يتم الكشف عن اللغة المصدر تلقائياً إذا حُذفت.

جسم الطلب JSON

حقلالنوعمطلوبالوصف
textstringنعمالنص للترجمة
target_languagestringنعمرمز ISO 639-1 (مثال es, fr, de)
source_languagestringلايتم الكشف تلقائياً إذا حُذف
project_idintegerلاتطبيق مسرد المشروع والأسلوب
formalitystringلاRegister: formal, informal, or default

الاستجابة 200

حقلالنوعالوصف
translated_textstringالنص المترجم
source_languagestringاللغة المصدر المكتشفة أو المحددة
target_languagestringرمز اللغة المستهدفة
confidencefloatدرجة الجودة 0.0 - 1.0
validationobjectنتائج التحقق من الجودة

أمثلة

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!"
الاستجابة
{
  "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

فرّغ ملف صوتي أو مرئي إلى نص. يدعم حتى 100 ميجابايت.

جسم الطلب multipart/form-data

حقلالنوعمطلوبالوصف
filefileنعمملف صوتي/مرئي (mp3, wav, mp4, webm, إلخ.)
languagestringلارمز ISO، يتم الكشف عنه تلقائياً إذا حُذف
project_idintegerلاربط بمشروع للتتبع
response_formatstringلاOutput format: json, verbose_json, text, srt, vtt
punctuatebooleanلاInclude punctuation (default true)

الاستجابة 200

حقلالنوعالوصف
textstringالنص المفرّغ الكامل
languagestringاللغة المكتشفة
duration_secondsfloatمدة الصوت
confidencefloatدرجة الجودة 0.0 - 1.0
language_confidencefloatConfidence of auto-detected language (null if language was specified)
segmentsarrayأجزاء ذات طوابع زمنية
validationobjectفحوصات الجودة

أمثلة

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"])
الاستجابة
{
  "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

بث الصوت في الوقت الفعلي واستقبال نتائج التفريغ الصوتي المباشر.

الاتصال

المعاملالنوعمطلوبالوصف
tokenstringنعممفتاح API كمعامل استعلام
languagestringلاتلميح اللغة المصدر (مثل en، fr). يتم اكتشافها تلقائيًا إذا لم تُحدد.

البروتوكول

إرسال

إطارات صوت PCM ثنائية (16 بت، 16 كيلوهرتز أحادي)

استقبال

رسائل JSON مع حقل type: transcript (نص جزئي/نهائي)، status (أحداث الجلسة)، error

الرسائل المستلمة

حقلالنوعالوصف
typestring"transcript" | "status" | "error"
textstringالنص المفرّغ (في رسائل التفريغ)
is_finalbooleanصحيح عند اكتمال الشريحة
languagestringرمز اللغة المكتشفة

أمثلة

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())
أمثلة الرسائل
// 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

بث الصوت بلغة واستقبال نص مترجم بلغة أخرى في الوقت الفعلي. يدعم الترجمة من الكلام إلى النص مع اكتشاف اللغة تلقائيًا.

الاتصال

المعاملالنوعمطلوبالوصف
tokenstringنعممفتاح API كمعامل استعلام
target_languagestringنعملغة نص المخرجات (مثل en، es، fr)
source_languagestringلالغة الصوت المصدر. يتم اكتشافها تلقائيًا إذا لم تُحدد.

البروتوكول

إرسال

إطارات صوت PCM ثنائية (16 بت، 16 كيلوهرتز أحادي)

استقبال

رسائل JSON مع نص مترجم بـ target_language. تتضمن تفريغ الكلام الأصلي والمخرجات المترجمة.

الرسائل المستلمة

حقلالنوعالوصف
typestring"transcript" | "status" | "error"
textstringالنص المترجم باللغة الهدف
is_finalbooleanصحيح عند اكتمال الشريحة
source_languagestringاللغة المصدر المكتشفة
target_languagestringرمز اللغة المستهدفة

أمثلة

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())
أمثلة الرسائل
// 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.

جسم الطلب JSON

حقلالنوعمطلوبالوصف
languagesobjectنعمParticipant ID to language mapping
bridge_languagestringلاHub language, default en
max_participantsintلاMax participants 2-10, default 10
modestringلاinterpreter or inline

الاستجابة 200

حقلالنوعالوصف
room_idstringUnique room identifier
statusstringRoom status
languagesobjectParticipant ID to language mapping
bridge_languagestringHub language used for translation
modestringTranslation mode
max_participantsintMaximum number of participants

أمثلة

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"
  }'
الاستجابة
{
  "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.

الاتصال

المعاملالنوعمطلوبالوصف
room_idstringنعمRoom ID from create room response (path param)
participantstringنعمParticipant ID (query param)
tokenstringنعممفتاح API كمعامل استعلام

مثال

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.

جسم الطلب JSON

حقلالنوعمطلوبالوصف
participant_idstringنعمUnique participant identifier
languagestringنعمParticipant's language code

مثال

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.

الاستجابة 200

حقلالنوعالوصف
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

مثال

curl
curl https://api.morlivo.ai/api/v1/languages \
  -H "Authorization: Bearer mrl_your_key"
الاستجابة
{
  "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.

الاستجابة 200

حقلالنوعالوصف
statusstringسليم أو متدهور

مثال

curl
curl https://api.morlivo.ai/api/v1/health
الاستجابة
{
  "status": "healthy"
}

نقاط التوافق الطرفية

هل تستخدم مزوداً آخر بالفعل؟ غيّر عنوان URL واحد واحتفظ بالكود الحالي. هذه النقاط الطرفية تعكس تنسيقات الطلب والاستجابة لواجهات API الرئيسية للترجمة والتفريغ الصوتي.

DL

DeepL

الترجمة
POST /api/compat/deepl/v2/translate

بديل مباشر لـ api-free.deepl.com

G

Google Cloud Translation

الترجمة
POST /api/compat/google/v3/projects/{"{p}"}/locations/{"{l}"}:translateText

بديل مباشر لـ translation.googleapis.com

A

AWS Translate

الترجمة
POST /api/compat/aws/translate

بديل مباشر لـ translate.amazonaws.com

OA

OpenAI Whisper

النسخ
POST /api/compat/openai/v1/audio/transcriptions

بديل مباشر لـ api.openai.com

DG

Deepgram

النسخ
POST /api/compat/deepgram/v1/listen

بديل مباشر لـ api.deepgram.com

تقبل نقاط التوافق الطرفية نفس تنسيق الطلب وتُرجع نفس بنية الاستجابة كالمزود الأصلي. ارجع إلى وثائق كل مزود للاطلاع على مخططات الطلب/الاستجابة الخاصة بهم.

أخطاء

تُرجع جميع الأخطاء كائن JSON يحتوي على حقل detail.

الرمزالمعنىمتى يحدث
400 طلب غير صالح حقول مطلوبة مفقودة، نص فارغ، نوع ملف غير مدعوم
401 غير مصرح مفتاح API مفقود أو غير صالح
403 محظور مفتاح API صالح لكن الصلاحيات غير كافية أو تم تجاوز الحصة
413 حجم البيانات كبير جداً الملف يتجاوز حد الرفع البالغ 100 ميجابايت
429 تم تحديد المعدل طلبات كثيرة جداً. أعد المحاولة مع تراجع أسي.
500 خطأ داخلي خطأ غير متوقع في الخادم. تواصل مع الدعم إذا استمر.
503 الخدمة غير متاحة نموذج الذكاء الاصطناعي غير متاح مؤقتاً (قاطع الدائرة مفتوح). أعد المحاولة بعد قليل.
تنسيق استجابة الخطأ
{
  "detail": "Field 'text' must not be empty."
}
POST

تنقيح PII

أضف تنقيح PII إلى أي طلب ترجمة أو تفريغ صوتي. حدد أنواع الكيانات المراد اكتشافها وتنقيحها.

POST /v1/translate POST /v1/transcribe

جسم الطلب JSON

حقلالنوعمطلوبالوصف
textstringنعمالنص للترجمة
source_languagestringلايتم الكشف تلقائياً إذا حُذف
target_languagestringنعمرمز ISO 639-1 (مثال es, fr, de)
redactstring[]لاأنواع الكيانات المراد تنقيحها (مثل البريد الإلكتروني، الهاتف، الاسم)

الاستجابة 200

حقلالنوعالوصف
translated_textstringالنص المترجم مع تنقيح PII
source_languagestringاللغة المصدر المكتشفة أو المحددة
target_languagestringرمز اللغة المستهدفة
confidencefloatدرجة الجودة 0.0 - 1.0
redactionsarrayقائمة عمليات التنقيح المطبقة (النوع والبديل)

أمثلة

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]"
الاستجابة
{
  "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]"}
  ]
}

أنواع الكيانات المدعومة

الكيانالوصفالاكتشاف
email عناوين البريد الإلكتروني مستند إلى الأنماط (مضمّن)
phone أرقام الهواتف مستند إلى الأنماط (مضمّن)
ssn أرقام الضمان الاجتماعي مستند إلى الأنماط (مضمّن)
credit_card أرقام بطاقات الائتمان مستند إلى الأنماط (مضمّن)
ip_address عناوين IP مستند إلى الأنماط (مضمّن)
name أسماء الأشخاص مدعوم بالذكاء الاصطناعي (تكلفة إضافية)
address العناوين الفعلية مدعوم بالذكاء الاصطناعي (تكلفة إضافية)
medical المعلومات الطبية مدعوم بالذكاء الاصطناعي (تكلفة إضافية)

يتم اكتشاف الكيانات المستندة إلى التنسيق (البريد الإلكتروني، الهاتف، SSN، بطاقة الائتمان، IP) باستخدام مطابقة الأنماط بدون تكلفة إضافية. تستخدم الكيانات السياقية (الاسم، العنوان، الطبية) الاكتشاف المدعوم بالذكاء الاصطناعي وتتكبد رسومًا إضافية صغيرة لكل طلب.

هل أنت مستعد للتكامل؟

أنشئ حساباً مجانياً للحصول على مفتاح API الخاص بك وابدأ الترجمة.