مرجع API
ادمج ترجمة وتفريغ Morlivo الصوتي في تطبيقك بسطور قليلة من الكود.
https://api.morlivo.ai
المصادقة: Authorization: Bearer mrl_...
المصادقة
تتطلب جميع طلبات API رمز Bearer. احصل على مفتاح API الخاص بك من لوحة التحكم ضمن الإعدادات.
Authorization: Bearer mrl_your_api_key_here
تبدأ مفاتيح API بـ mrl_. احتفظ بها سرية. قم بتدويرها من لوحة التحكم إذا تم اختراقها.
/v1/translate
ترجم نصاً من لغة إلى أخرى. يتم الكشف عن اللغة المصدر تلقائياً إذا حُذفت.
جسم الطلب JSON
| حقل | النوع | مطلوب | الوصف |
|---|---|---|---|
text | string | نعم | النص للترجمة |
target_language | string | نعم | رمز ISO 639-1 (مثال es, fr, de) |
source_language | string | لا | يتم الكشف تلقائياً إذا حُذف |
project_id | integer | لا | تطبيق مسرد المشروع والأسلوب |
formality | string | لا | Register: formal, informal, or default |
الاستجابة 200
| حقل | النوع | الوصف |
|---|---|---|
translated_text | string | النص المترجم |
source_language | string | اللغة المصدر المكتشفة أو المحددة |
target_language | string | رمز اللغة المستهدفة |
confidence | float | درجة الجودة 0.0 - 1.0 |
validation | object | نتائج التحقق من الجودة |
أمثلة
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"
}'
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!"
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
}
}
/v1/transcribe
فرّغ ملف صوتي أو مرئي إلى نص. يدعم حتى 100 ميجابايت.
جسم الطلب multipart/form-data
| حقل | النوع | مطلوب | الوصف |
|---|---|---|---|
file | file | نعم | ملف صوتي/مرئي (mp3, wav, mp4, webm, إلخ.) |
language | string | لا | رمز ISO، يتم الكشف عنه تلقائياً إذا حُذف |
project_id | integer | لا | ربط بمشروع للتتبع |
response_format | string | لا | Output format: json, verbose_json, text, srt, vtt |
punctuate | boolean | لا | Include punctuation (default true) |
الاستجابة 200
| حقل | النوع | الوصف |
|---|---|---|
text | string | النص المفرّغ الكامل |
language | string | اللغة المكتشفة |
duration_seconds | float | مدة الصوت |
confidence | float | درجة الجودة 0.0 - 1.0 |
language_confidence | float | Confidence of auto-detected language (null if language was specified) |
segments | array | أجزاء ذات طوابع زمنية |
validation | object | فحوصات الجودة |
أمثلة
curl -X POST https://api.morlivo.ai/api/v1/transcribe \
-H "Authorization: Bearer mrl_your_key" \
-F "file=@meeting.mp3" \
-F "language=en"
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
}
}
/v1/live/transcribe
بث الصوت في الوقت الفعلي واستقبال نتائج التفريغ الصوتي المباشر.
الاتصال
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
token | string | نعم | مفتاح API كمعامل استعلام |
language | string | لا | تلميح اللغة المصدر (مثل en، fr). يتم اكتشافها تلقائيًا إذا لم تُحدد. |
البروتوكول
إطارات صوت PCM ثنائية (16 بت، 16 كيلوهرتز أحادي)
رسائل JSON مع حقل type: transcript (نص جزئي/نهائي)، status (أحداث الجلسة)، error
الرسائل المستلمة
| حقل | النوع | الوصف |
|---|---|---|
type | string | "transcript" | "status" | "error" |
text | string | النص المفرّغ (في رسائل التفريغ) |
is_final | boolean | صحيح عند اكتمال الشريحة |
language | string | رمز اللغة المكتشفة |
أمثلة
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);
}
};
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}
/v1/live/translate
بث الصوت بلغة واستقبال نص مترجم بلغة أخرى في الوقت الفعلي. يدعم الترجمة من الكلام إلى النص مع اكتشاف اللغة تلقائيًا.
الاتصال
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
token | string | نعم | مفتاح API كمعامل استعلام |
target_language | string | نعم | لغة نص المخرجات (مثل en، es، fr) |
source_language | string | لا | لغة الصوت المصدر. يتم اكتشافها تلقائيًا إذا لم تُحدد. |
البروتوكول
إطارات صوت PCM ثنائية (16 بت، 16 كيلوهرتز أحادي)
رسائل JSON مع نص مترجم بـ target_language. تتضمن تفريغ الكلام الأصلي والمخرجات المترجمة.
الرسائل المستلمة
| حقل | النوع | الوصف |
|---|---|---|
type | string | "transcript" | "status" | "error" |
text | string | النص المترجم باللغة الهدف |
is_final | boolean | صحيح عند اكتمال الشريحة |
source_language | string | اللغة المصدر المكتشفة |
target_language | string | رمز اللغة المستهدفة |
أمثلة
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);
}
};
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}
/v1/live/rooms
Create a multi-participant translation room. Each participant speaks their own language and receives translated text from other participants.
جسم الطلب JSON
| حقل | النوع | مطلوب | الوصف |
|---|---|---|---|
languages | object | نعم | Participant ID to language mapping |
bridge_language | string | لا | Hub language, default en |
max_participants | int | لا | Max participants 2-10, default 10 |
mode | string | لا | interpreter or inline |
الاستجابة 200
| حقل | النوع | الوصف |
|---|---|---|
room_id | string | Unique room identifier |
status | string | Room status |
languages | object | Participant ID to language mapping |
bridge_language | string | Hub language used for translation |
mode | string | Translation mode |
max_participants | int | Maximum number of participants |
أمثلة
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
}
/v1/live/speech/{room_id}
Connect a participant to a room for real-time speech translation.
الاتصال
| المعامل | النوع | مطلوب | الوصف |
|---|---|---|---|
room_id | string | نعم | Room ID from create room response (path param) |
participant | string | نعم | Participant ID (query param) |
token | string | نعم | مفتاح API كمعامل استعلام |
مثال
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);
}
};
/v1/live/rooms/{room_id}/participants
Add a participant to an existing room after creation.
جسم الطلب JSON
| حقل | النوع | مطلوب | الوصف |
|---|---|---|---|
participant_id | string | نعم | Unique participant identifier |
language | string | نعم | Participant's language code |
مثال
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"
}'
/v1/languages
List all supported languages with locale, name, and availability status.
الاستجابة 200
| حقل | النوع | الوصف |
|---|---|---|
languages | array | List of supported languages |
languages[].locale | string | Locale code e.g. fr-CA |
languages[].name | string | English name |
languages[].native_name | string | Native name |
languages[].country | string | Country/region |
languages[].status | string | ga or beta |
مثال
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"}
]
}
/v1/health
Check API status and database health. No authentication required.
الاستجابة 200
| حقل | النوع | الوصف |
|---|---|---|
status | string | سليم أو متدهور |
مثال
curl https://api.morlivo.ai/api/v1/health
{
"status": "healthy"
}
نقاط التوافق الطرفية
هل تستخدم مزوداً آخر بالفعل؟ غيّر عنوان URL واحد واحتفظ بالكود الحالي. هذه النقاط الطرفية تعكس تنسيقات الطلب والاستجابة لواجهات API الرئيسية للترجمة والتفريغ الصوتي.
DeepL
الترجمةPOST /api/compat/deepl/v2/translate
بديل مباشر لـ api-free.deepl.com
Google Cloud Translation
الترجمةPOST /api/compat/google/v3/projects/{"{p}"}/locations/{"{l}"}:translateText
بديل مباشر لـ translation.googleapis.com
AWS Translate
الترجمةPOST /api/compat/aws/translate
بديل مباشر لـ translate.amazonaws.com
OpenAI Whisper
النسخPOST /api/compat/openai/v1/audio/transcriptions
بديل مباشر لـ api.openai.com
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."
}
تنقيح PII
أضف تنقيح PII إلى أي طلب ترجمة أو تفريغ صوتي. حدد أنواع الكيانات المراد اكتشافها وتنقيحها.
جسم الطلب JSON
| حقل | النوع | مطلوب | الوصف |
|---|---|---|---|
text | string | نعم | النص للترجمة |
source_language | string | لا | يتم الكشف تلقائياً إذا حُذف |
target_language | string | نعم | رمز ISO 639-1 (مثال es, fr, de) |
redact | string[] | لا | أنواع الكيانات المراد تنقيحها (مثل البريد الإلكتروني، الهاتف، الاسم) |
الاستجابة 200
| حقل | النوع | الوصف |
|---|---|---|
translated_text | string | النص المترجم مع تنقيح PII |
source_language | string | اللغة المصدر المكتشفة أو المحددة |
target_language | string | رمز اللغة المستهدفة |
confidence | float | درجة الجودة 0.0 - 1.0 |
redactions | array | قائمة عمليات التنقيح المطبقة (النوع والبديل) |
أمثلة
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"]
}'
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]"
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 الخاص بك وابدأ الترجمة.