近日公開 通知を受け取る
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 など)
languagestringいいえISO コード、省略された場合は自動検出
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キー
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キー
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

/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

署名付きトークンで接続し、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ロケールコード 例:カリフォルニア州フランス
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 を 1 つ変更し、既存のコードを保持します。これらのエンドポイントは、主要な翻訳 API および文字起こし 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キーは有効ですが、必要なスコープまたはテナント権限がありません
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_textstringPII が編集された翻訳済みテキスト
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 キーを取得し、翻訳を開始してください。