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_languagestringISO 639-1 代码(例如 es、fr、de)
source_languagestring省略时自动检测
project_idinteger应用项目术语表和风格
formalitystringRegister: 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 MB。

请求体 multipart/form-data

字段类型必填描述
filefile音频/视频文件(mp3、wav、mp4、webm 等)
languagestringISO 代码,省略时自动检测
project_idinteger关联到项目以进行跟踪
response_formatstringOutput format: json, verbose_json, text, srt, vtt
punctuatebooleanInclude 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

实时流式传输音频并接收实时转录结果。

连接

参数类型必填描述
tokenstringAPI 密钥作为查询参数
languagestring源语言提示(例如 en、fr)。省略时自动检测。

协议

发送

二进制 PCM 音频帧(16 位,16kHz 单声道)

接收

包含 type 字段的 JSON 消息:transcript(部分/最终文本)、status(会话事件)、error

接收的消息

字段类型描述
typestring"transcript" | "status" | "error"
textstring转录文本(在转录消息中)
is_finalboolean分段完成时为 True
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

以一种语言流式传输音频,并实时接收另一种语言的翻译文本。支持自动语言检测的语音到文本翻译。

连接

参数类型必填描述
tokenstringAPI 密钥作为查询参数
target_languagestring输出文本的语言(例如 en、es、fr)
source_languagestring源音频语言。省略时自动检测。

协议

发送

二进制 PCM 音频帧(16 位,16kHz 单声道)

接收

包含 target_language 翻译文本的 JSON 消息。包括原始语音的转录和翻译输出。

接收的消息

字段类型描述
typestring"transcript" | "status" | "error"
textstring目标语言的翻译文本
is_finalboolean分段完成时为 True
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

字段类型必填描述
languagesobjectParticipant ID to language mapping
bridge_languagestringHub language, default en
max_participantsintMax participants 2-10, default 10
modestringinterpreter 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_idstringRoom ID from create room response (path param)
participantstringParticipant ID (query param)
tokenstringAPI 密钥作为查询参数

示例

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_idstringUnique participant identifier
languagestringParticipant'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

兼容端点接受与原始服务商相同的请求格式,并返回相同的响应结构。请参阅各服务商的文档了解其请求/响应架构。

错误

所有错误都返回一个包含 detail 字段的 JSON 对象。

代码含义发生时间
400 请求无效 必填字段缺失、文本为空、不支持的文件类型
401 未授权 API 密钥缺失或无效
403 禁止 API 密钥有效但权限不足或已超出配额
413 请求体过大 文件超过 100 MB 上传限制
429 已限速 请求过多。请使用指数退避策略重试。
500 内部错误 意外的服务器错误。如果持续存在,请联系支持。
503 服务不可用 AI 模型暂时不可用(断路器已打开)。请稍后重试。
错误响应格式
{
  "detail": "Field 'text' must not be empty."
}
POST

PII 脱敏

在任何翻译或转录请求中添加 PII 脱敏。指定要检测和脱敏的实体类型。

POST /v1/translate POST /v1/transcribe

请求体 JSON

字段类型必填描述
textstring待翻译文本
source_languagestring省略时自动检测
target_languagestringISO 639-1 代码(例如 es、fr、de)
redactstring[]要脱敏的实体类型(例如 email、phone、name)

响应 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 人名 AI 驱动(额外费用)
address 实际地址 AI 驱动(额外费用)
medical 医疗信息 AI 驱动(额外费用)

基于格式的实体(电子邮件、电话、SSN、信用卡、IP)通过模式匹配检测,无额外费用。上下文实体(姓名、地址、医疗)使用 AI 驱动的检测,每次请求收取少量额外费用。

准备好集成了吗?

创建免费账户以获取您的 API 密钥并开始翻译。