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 金鑰有效,但缺少必要的範圍或租戶權限 |
| 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),無需額外費用。上下文實體(姓名、地址、醫療資訊)使用人工智慧驅動的檢測,並根據請求收取少量額外費用。