API 参考
只需几行代码即可将 Morlivo 翻译和转录集成到您的应用程序中。
https://api.morlivo.ai
授权: Authorization: Bearer mrl_...
认证
所有 API 请求都需要持有者令牌。从仪表板的“设置”下获取您的 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 | 不 | 注册:正式、非正式或默认 |
回应 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 MB。
请求正文 multipart/form-data
| 领域 | 类型 | 必填 | 描述 |
|---|---|---|---|
file | file | 是的 | 音频/视频文件(mp3、wav、mp4、webm 等) |
language | string | 不 | ISO 代码,如果省略则自动检测 |
project_id | integer | 不 | 链接到项目以进行跟踪 |
response_format | string | 不 | 输出格式:json、verbose_json、text、srt、vtt |
punctuate | boolean | 不 | 包含标点符号(默认 true) |
回应 200
| 领域 | 类型 | 描述 |
|---|---|---|
text | string | 完整转录文本 |
language | string | 检测到的语言 |
duration_seconds | float | 音频时长 |
confidence | float | 质量得分 0.0 - 1.0 |
language_confidence | float | 自动检测语言的置信度(如果指定语言则为 null) |
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 key 作为查询参数 |
language | string | 不 | 源语言提示(例如 en、fr)。如果省略则自动检测。 |
协议
二进制 PCM 音频帧(16 位、16kHz 单声道)
带有类型字段的 JSON 消息:记录(部分/最终文本)、状态(会话事件)、错误
收到的消息
| 领域 | 类型 | 描述 |
|---|---|---|
type | string | "transcript" | "status" | "error" |
text | string | 转录文本(在转录消息上) |
is_final | boolean | 当段完成时为 True |
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 key 作为查询参数 |
target_language | string | 是的 | 输出文本的语言(例如 en、es、fr) |
source_language | string | 不 | 源音频语言。如果省略则自动检测。 |
协议
二进制 PCM 音频帧(16 位、16kHz 单声道)
JSON 带有目标语言翻译文本的消息。包括原始演讲稿和翻译后的输出。
收到的消息
| 领域 | 类型 | 描述 |
|---|---|---|
type | string | "transcript" | "status" | "error" |
text | string | 目标语言的翻译文本 |
is_final | boolean | 当段完成时为 True |
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/languages
列出所有支持的语言以及区域设置、名称和可用性状态。
回应 200
| 领域 | 类型 | 描述 |
|---|---|---|
languages | array | 支持的语言列表 |
languages[].locale | string | 区域设置代码,例如fr-CA |
languages[].name | string | 英文名 |
languages[].native_name | string | 原生名 |
languages[].country | string | 国家/地区 |
languages[].status | string | 伽马或贝塔 |
示例
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
检查 API 状态和数据库运行状况。无需身份验证。
回应 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 对象。
| 代码 | 含义 | 当它发生时 |
|---|---|---|
| 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."
}
{
"error": "insufficient_credits",
"detail": "Insufficient credits",
"billing_url": "/app/billing"
}
成功的 API 响应包含 X-Credits-Spent 和 X-Credits-Remaining 响应头。当额度耗尽时,客户端应停止重试并将用户引导至 billing_url。
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),无需额外费用。上下文实体(姓名、地址、医疗信息)使用人工智能驱动的检测,并根据请求收取少量额外费用。