Em breve Receber notificações
Recursos Preços Referência API Sobre
Faça login Em breve
v1.0.0

Referência API

Integre a tradução e transcrição Morlivo em seu aplicativo com algumas linhas de código.

Base URL: https://api.morlivo.ai Autenticação: Authorization: Bearer mrl_...

Autenticação

Todas as solicitações API requerem um token de portador. Obtenha sua chave API no painel em Configurações.

Cabeçalho
Authorization: Bearer mrl_your_api_key_here

As chaves API começam com mrl_. Mantenha-os em segredo. Gire-os no painel se estiverem comprometidos.

POST

/v1/translate

Traduza texto de um idioma para outro. O idioma de origem é detectado automaticamente se omitido.

Solicitar corpo JSON

CampoTipoObrigatórioDescrição
textstringsimTexto para traduzir
target_languagestringsimCódigo ISO 639-1 (por exemplo, es, fr, de)
source_languagestringnãoDetectado automaticamente se omitido
project_idintegernãoAplicar glossário e estilo do projeto
formalitystringnãoRegistro: formal, informal ou padrão

Resposta 200

CampoTipoDescrição
translated_textstringO texto traduzido
source_languagestringIdioma de origem detectado ou fornecido
target_languagestringCódigo do idioma de destino
confidencefloatÍndice de qualidade 0,0 - 1,0
validationobjectResultados de validação de qualidade

Exemplos

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!"
Resposta
{
  "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

Transcreva um arquivo de áudio ou vídeo para texto. Supports up to 100 MB.

Solicitar corpo multipart/form-data

CampoTipoObrigatórioDescrição
filefilesimArquivo de áudio/vídeo (mp3, wav, mp4, webm, etc.)
languagestringnãoCódigo ISO, detectado automaticamente se omitido
project_idintegernãoLink para um projeto para rastreamento
response_formatstringnãoFormato de saída: json, verbose_json, texto, srt, vtt
punctuatebooleannãoIncluir pontuação (padrão verdadeiro)

Resposta 200

CampoTipoDescrição
textstringTexto transcrito completo
languagestringIdioma detectado
duration_secondsfloatDuração do áudio
confidencefloatÍndice de qualidade 0,0 - 1,0
language_confidencefloatConfiança do idioma detectado automaticamente (nulo se o idioma foi especificado)
segmentsarraySegmentos com carimbo de data/hora
validationobjectVerificações de qualidade

Exemplos

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"])
Resposta
{
  "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

Transmita áudio em tempo real e receba resultados de transcrição ao vivo.

Conexão

ParâmetroTipoObrigatórioDescrição
tokenstringsimChave API como parâmetro de consulta
languagestringnãoDica do idioma de origem (por exemplo, en, fr). Detectado automaticamente se omitido.

Protocolo

Enviar

Quadros de áudio PCM binários (16 bits, 16kHz mono)

Receber

Mensagens JSON com campo tipo: transcrição (texto parcial/final), status (eventos de sessão), erro

Mensagens recebidas

CampoTipoDescrição
typestring"transcript" | "status" | "error"
textstringTexto transcrito (em mensagens transcritas)
is_finalbooleanVerdadeiro quando o segmento é concluído
languagestringCódigo de idioma detectado

Exemplos

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())
Exemplos de mensagens
// 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

Transmita áudio em um idioma e receba texto traduzido em outro idioma em tempo real. Suporta tradução de fala para texto com detecção automática de idioma.

Conexão

ParâmetroTipoObrigatórioDescrição
tokenstringsimChave API como parâmetro de consulta
target_languagestringsimIdioma do texto de saída (por exemplo, en, es, fr)
source_languagestringnãoIdioma de áudio de origem. Detectado automaticamente se omitido.

Protocolo

Enviar

Quadros de áudio PCM binários (16 bits, 16kHz mono)

Receber

Mensagens JSON com texto traduzido no idioma_alvo. Inclui a transcrição do discurso original e a produção traduzida.

Mensagens recebidas

CampoTipoDescrição
typestring"transcript" | "status" | "error"
textstringTexto traduzido no idioma de destino
is_finalbooleanVerdadeiro quando o segmento é concluído
source_languagestringIdioma de origem detectado
target_languagestringCódigo do idioma de destino

Exemplos

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())
Exemplos de mensagens
// 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

Crie um token compartilhado de curta duração para dispositivo compartilhado e, em seguida, abra a URL do WebSocket retornada. Não é necessário provisionamento prévio de salas nem roteamento persistente.

Solicitar corpo JSON

CampoTipoObrigatórioDescrição
languagesobjectsimID do participante para mapeamento de idioma
max_participantsintnãoMáximo de participantes de 2 a 10, padrão 10
modestringnãointérprete ou inline

Resposta 200

CampoTipoDescrição
tokenstringToken WebSocket assinado de curta duração
ws_urlstringURL WebSocket de dispositivo compartilhado sem sala
session_idstringIdentificador efêmero de sessão
participant_idstringID do participante gerado

Exemplos

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

Conecte-se com o token assinado, envie quadros PCM mono de 16 kHz e receba o áudio traduzido junto com eventos de transcrição do locutor/intérprete.

Conexão

ParâmetroTipoObrigatórioDescrição
tokenstringsimToken assinado retornado por /api/v1/live/shared-device/token

Exemplo

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

Liste todos os idiomas suportados com localidade, nome e status de disponibilidade.

Resposta 200

CampoTipoDescrição
languagesarrayLista de idiomas suportados
languages[].localestringCódigo local, por ex. fr-CA
languages[].namestringNome inglês
languages[].native_namestringNome nativo
languages[].countrystringPaís/região
languages[].statusstringga ou beta

Exemplo

curl
curl https://api.morlivo.ai/api/v1/languages \
  -H "Authorization: Bearer mrl_your_key"
Resposta
{
  "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

Verifique o status API e a integridade do banco de dados. Nenhuma autenticação necessária.

Resposta 200

CampoTipoDescrição
statusstringsaudável ou degradado

Exemplo

curl
curl https://api.morlivo.ai/api/v1/health
Resposta
{
  "status": "healthy"
}

Pontos finais de compatibilidade

Já usa outro provedor? Altere um URL e mantenha seu código existente. Esses endpoints refletem os formatos de solicitação e resposta das principais APIs de tradução e transcrição.

DL

DeepL

Tradução
POST /api/compat/deepl/v2/translate

Substituição imediata para api-free.deepl.com

G

Google Cloud Translation

Tradução
POST /api/compat/google/v3/projects/{p}/locations/{l}:translateText

Substituição imediata para translation.googleapis.com

A

AWS Translate

Tradução
POST /api/compat/aws/translate

Substituição imediata para translate.amazonaws.com

OA

OpenAI Whisper

Transcrição
POST /api/compat/openai/v1/audio/transcriptions

Substituição imediata para api.openai.com

DG

Deepgram

Transcrição
POST /api/compat/deepgram/v1/listen

Substituição imediata para api.deepgram.com

Os pontos de extremidade de compatibilidade aceitam o mesmo formato de solicitação e retornam a mesma estrutura de resposta do provedor original. Consulte a documentação de cada provedor para ver seus esquemas de solicitação/resposta.

Erros

Todos os erros retornam um objeto JSON com um campo de detalhe.

CódigoSignificadoQuando isso acontece
400 Solicitação incorreta Campos obrigatórios ausentes, texto vazio, tipo de arquivo não compatível
401 Não autorizado Chave API ausente ou inválida
403 Proibido A chave de API é válida, mas não tem o escopo necessário ou a permissão de tenant
402 Pagamento necessário Créditos insuficientes ou verificação de cartão necessária. A resposta inclui billing_url e cabeçalhos X-Credits-* quando disponível.
413 Carga útil muito grande O arquivo excede o limite de upload de 100 MB
429 Taxa limitada Too many requests. Tente novamente com espera exponencial.
500 Erro interno Erro inesperado do servidor. Entre em contato com o suporte se persistir.
503 Serviço indisponível Modelo AI temporariamente indisponível (disjuntor aberto). Tente novamente em breve.
Formato de resposta de erro
{
  "detail": "Field 'text' must not be empty."
}
402Esgotamento de créditos
{
  "error": "insufficient_credits",
  "detail": "Insufficient credits",
  "billing_url": "/app/billing"
}

Respostas bem-sucedidas da API incluem os cabeçalhos X-Credits-Spent e X-Credits-Remaining. Quando os créditos se esgotarem, os clientes devem parar de tentar novamente e enviar o usuário para billing_url.

POST

Redação PII

Adicione a redação PII a qualquer solicitação de tradução ou transcrição. Especifique quais tipos de entidade serão detectados e editados.

POST /v1/translate POST /v1/transcribe

Solicitar corpo JSON

CampoTipoObrigatórioDescrição
textstringsimTexto para traduzir
source_languagestringnãoDetectado automaticamente se omitido
target_languagestringsimCódigo ISO 639-1 (por exemplo, es, fr, de)
redactstring[]nãoTipos de entidade a serem editados (por exemplo, e-mail, telefone, nome)

Resposta 200

CampoTipoDescrição
translated_textstringTexto traduzido com PII redigido
source_languagestringIdioma de origem detectado ou fornecido
target_languagestringCódigo do idioma de destino
confidencefloatÍndice de qualidade 0,0 - 1,0
redactionsarrayLista de redações aplicadas (tipo e substituição)

Exemplos

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]"
Resposta
{
  "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]"}
  ]
}

Tipos de entidades compatíveis

EntidadeDescriçãoDetecção
email Endereços de e-mail Baseado em padrões (incluído)
phone Números de telefone Baseado em padrões (incluído)
ssn Números da Segurança Social Baseado em padrões (incluído)
credit_card Números de cartão de crédito Baseado em padrões (incluído)
ip_address Endereços IP Baseado em padrões (incluído)
name Nomes de pessoas Alimentado por IA (custo adicional)
address Endereços físicos Alimentado por IA (custo adicional)
medical Informações médicas Alimentado por IA (custo adicional)

Entidades baseadas em formato (e-mail, telefone, SSN, cartão de crédito, IP) são detectadas usando correspondência de padrões sem custo adicional. Entidades contextuais (nome, endereço, médico) usam detecção baseada em IA e incorrem em uma pequena cobrança adicional por solicitação.

Pronto para integrar?

Crie uma conta gratuita para obter sua chave API e começar a traduzir.