即将推出 接收通知
特点 定价 API 参考 关于
登录 即将推出
v1.0.0

API 参考

只需几行代码即可将 Morlivo 翻译和转录集成到您的应用程序中。

基础 URL: https://api.morlivo.ai 授权: Authorization: Bearer mrl_...

认证

所有 API 请求都需要持有者令牌。从仪表板的“设置”下获取您的 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注册:正式、非正式或默认

回应 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_formatstring输出格式:json、verbose_json、text、srt、vtt
punctuateboolean包含标点符号(默认 true)

回应 200

领域类型描述
textstring完整转录文本
languagestring检测到的语言
duration_secondsfloat音频时长
confidencefloat质量得分 0.0 - 1.0
language_confidencefloat自动检测语言的置信度(如果指定语言则为 null)
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 key 作为查询参数
languagestring源语言提示(例如 en、fr)。如果省略则自动检测。

协议

发送

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

接收

带有类型字段的 JSON 消息:记录(部分/最终文本)、状态(会话事件)、错误

收到的消息

领域类型描述
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

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

连接方式

参数类型必填描述
tokenstring是的API key 作为查询参数
target_languagestring是的输出文本的语言(例如 en、es、fr)
source_languagestring源音频语言。如果省略则自动检测。

协议

发送

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

接收

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

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

创建一个短期共享设备令牌,然后打开返回的 WebSocket URL。无需预先配置房间或固定路由。

请求正文 JSON

领域类型必填描述
languagesobject是的参与者 ID 到语言的映射
max_participantsint最大参与者 2-10,默认 10
modestring解释器或内联

回应 200

领域类型描述
tokenstring短期有效的签名 WebSocket 令牌
ws_urlstring无房间共享设备 WebSocket URL
session_idstring临时会话标识符
participant_idstring生成的参与者 ID

示例

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"
  }'
回应
{
  "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

使用签名 token 连接,发送 16 kHz 单声道 PCM 帧,并接收翻译后的音频以及说话人/口译员转录事件。

连接方式

参数类型必填描述
tokenstring是的由 /api/v1/live/shared-device/token 返回的签名令牌

示例

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

列出所有支持的语言以及区域设置、名称和可用性状态。

回应 200

领域类型描述
languagesarray支持的语言列表
languages[].localestring区域设置代码,例如fr-CA
languages[].namestring英文名
languages[].native_namestring原生名
languages[].countrystring国家/地区
languages[].statusstring伽马或贝塔

示例

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

检查 API 状态和数据库运行状况。无需身份验证。

回应 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 对象。

代码含义当它发生时
400 错误的请求 缺少必填字段、空文本、不支持的文件类型
401 未经授权 API 密钥丢失或无效
403 禁止 API key 有效,但缺少所需的 scope 或 tenant 权限
402 需要付款 积分不足或需要验证银行卡。响应在可用时会包含 billing_url 和 X-Credits-* 头。
413 有效负载太大 文件超过 100 MB 上传限制
429 价格有限 请求太多。使用指数退避重试。
500 内部错误 意外的服务器错误。如果问题仍然存在,请联系支持人员。
503 服务不可用 AI模型暂时不可用(断路器打开)。稍后重试。
错误响应格式
{
  "detail": "Field 'text' must not be empty."
}
402信用耗尽
{
  "error": "insufficient_credits",
  "detail": "Insufficient credits",
  "billing_url": "/app/billing"
}

成功的 API 响应包含 X-Credits-Spent 和 X-Credits-Remaining 响应头。当额度耗尽时,客户端应停止重试并将用户引导至 billing_url。

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 密钥并开始翻译。