Documentação da API
Integrar tradução poderosa em suas aplicações com a nossa API REST simples.
Começar
A TranslateAPI fornece uma interface REST simples para traduzir texto entre 180 mais idiomas. Todos os endpoints da API retornam respostas JSON.
https://api.translateapi.ai/api/v1/
Inicio Rápido
Faça o seu primeiro pedido de tradução:
curl -X POST https://api.translateapi.ai/api/v1/translate/ \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"text": "Hello, world!",
"target_language": "es"
}'
import requests
response = requests.post(
"https://api.translateapi.ai/api/v1/translate/",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
json={
"text": "Hello, world!",
"target_language": "es"
}
)
result = response.json()
print(result["translated_text"]) # "Hola, mundo!"
const response = await fetch("https://api.translateapi.ai/api/v1/translate/", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({
text: "Hello, world!",
target_language: "es"
})
});
const result = await response.json();
console.log(result.translated_text); // "Hola, mundo!"
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
class Program
{
static async Task Main()
{
var client = new HttpClient();
client.DefaultRequestHeaders.Add(
"Authorization", "Bearer YOUR_API_KEY"
);
var content = new StringContent(
JsonConvert.SerializeObject(new {
text = "Hello, world!",
target_language = "es"
}),
Encoding.UTF8,
"application/json"
);
var response = await client.PostAsync(
"https://api.translateapi.ai/api/v1/translate/",
content
);
var result = await response.Content.ReadAsStringAsync();
var data = JsonConvert.DeserializeObject<dynamic>(result);
Console.WriteLine(data.translated_text); // "Hola, mundo!"
}
}
Autenticação
Autenticar seus pedidos usando uma chave API. Você pode criar chaves API a partir de sua painel.
Autenticação Header (Recomendado)
Authorization: Bearer ta_your_api_key_here
Parâmetro de Consulta
https://api.translateapi.ai/api/v1/translate/?api_key=ta_your_api_key_here
Traduzir Texto
Traduzir texto para um único idioma alvo.
POST https://api.translateapi.ai/api/v1/translate/
Órgão de Pedido
| Parâmetro | Tipo | Requerido | Descrição |
|---|---|---|---|
text |
string | Sim | Texto a traduzir (máx. 50.000 caracteres) |
target_language |
string | Sim* | Target language code (e.g., "es", "fr", "de") |
source_language |
string | Não | Source language code. Default: "auto" (auto-detect) |
* Utilizar target_language (string) para uma única língua ou target_languages Para múltiplos. Tradução Multi-Target.
Resposta
{
"translated_text": "Hola, mundo!",
"source_language": "en",
"target_language": "es",
"translations": {
"es": "Hola, mundo!"
},
"character_count": 13,
"translation_time": 0.45
}
Tradução Multi-Target
Traduzir texto para múltiplos idiomas em um único pedido. Usa o mesmo endpoint que uma única tradução.
POST https://api.translateapi.ai/api/v1/translate/
Órgão de Pedido
{
"text": "Hello, world!",
"target_languages": ["es", "fr", "de", "ja"],
"source_language": "en"
}
Utilização target_languages Em vez de target_language (string) para múltiplos alvos.
Resposta
{
"source_language": "en",
"translations": {
"es": "Hola, mundo!",
"fr": "Bonjour, monde!",
"de": "Hallo, Welt!",
"ja": "こんにちは、世界!"
},
"character_count": 52,
"translation_time": 2.31
}
Tradução de Lote
Traduzir múltiplos textos de uma vez com processamento de async. Envie um lote e pesquisa para obter resultados.
POST https://api.translateapi.ai/api/v1/translate/batch/
Passo 1: Enviar Lote
curl -X POST https://api.translateapi.ai/api/v1/translate/batch/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"texts": ["Hello", "Goodbye", "Thank you"],
"target_language": "es",
"source_language": "en"
}'
Resposta (HTTP 202 Aceitada)
{
"job_id": "67535b2b-c9e3-4f82-9499-e237edbc1dd8",
"status": "pending",
"total_texts": 3,
"queue_position": 1,
"source_language": "en",
"target_languages": ["es"],
"character_count": 22,
"credits_remaining": -1,
"poll_url": "https://api.translateapi.ai/api/v1/jobs/67535b2b-c9e3-4f82-9499-e237edbc1dd8/"
}
Etapa 2: Pesquisa de Resultados
GET https://api.translateapi.ai/api/v1/jobs/{job_id}/
Exemplo de sondagem (Python)
import time, requests
job_id = response.json()["job_id"]
total = response.json()["total_texts"]
headers = {"Authorization": "Bearer YOUR_API_KEY"}
print(f"Batch submitted: {total} texts (job {job_id})")
while True:
result = requests.get(f"https://api.translateapi.ai/api/v1/jobs/{job_id}/", headers=headers).json()
status = result["status"]
processed = result.get("processed_texts", 0)
progress = result.get("progress_percentage", 0)
if status == "completed":
print(f"Completed: {processed}/{total} texts in {result.get('processing_time', 0):.1f}s")
translations = result["result_data"]["translations"]
break
elif status == "failed":
print(f"Failed at {processed}/{total}: {result.get('error_message', 'unknown')}")
raise Exception(result.get("error_message", "Translation failed"))
elif status == "pending":
queue_pos = result.get("queue_position", "?")
print(f"Queued (position {queue_pos}) — waiting for GPU worker...")
else:
print(f"[{status}] {processed}/{total} ({progress:.0f}%)")
time.sleep(3)
Resposta (em função — na fila, à espera da GPU)
{
"job_id": "67535b2b-...",
"status": "pending",
"processed_texts": 0,
"total_texts": 3,
"progress_percentage": 0.0,
"queue_position": 3
}
Resposta (durante o processamento)
{
"job_id": "67535b2b-...",
"status": "processing",
"processed_texts": 1,
"total_texts": 3,
"progress_percentage": 33.33,
"queue_position": null
}
Resposta (completada)
{
"job_id": "67535b2b-...",
"status": "completed",
"processed_texts": 3,
"total_texts": 3,
"progress_percentage": 100.0,
"processing_time": 10.65,
"result_data": {
"translations": ["Hola", "Adiós", "Gracias"],
"source_language": "en",
"target_language": "es",
"character_count": 22,
"processing_time": 10.65
}
}
Seguimento do progresso em tempo real
Cada resposta da pesquisa inclui campos de progresso em tempo real para que você possa monitorar exatamente o que está acontecendo com o seu lote:
| Campo | Descrição |
|---|---|
status |
Estado do trabalho atual: pending (em fila, à espera de um trabalhador do GPU), processing (traduzir ativamente), completed, failed |
processed_texts |
Número de traduções individuais completadas até agora. Atualizações em tempo real como cada texto é traduzido. |
total_texts |
Número total de traduções neste lote (textos × línguas-alvo). |
progress_percentage |
Percentagem de conclusão (0-100). Calculada a partir de textos_processados/textos_total. |
queue_position |
Sua posição na fila quando o estado está "pendido" (1 = próximo). Null ao processar ou completar. Use isto para estimar o tempo de espera e mostrar o estado da fila aos seus usuários. |
processing_time |
Tempo total de processamento em segundos (disponível quando completado). |
status é "pending", os trabalhadores da GPU estão ocupados com outros lotes. queue_position Para ver quantos trabalhos estão à sua frente (1 = você é o próximo). Seu trabalho vai começar automaticamente — nenhuma ação necessária, apenas continuar a votar.
Melhores práticas para grandes cargas de trabalho
- Envie 1 idioma-alvo por pedido de lote. Isto mantém cada lote rápido e torna o progresso fácil de rastrear.
- Manter lotes em 50-100 textos. Lotes menores completam mais rápido e lhe dão atualizações de progresso mais frequentes.
- Execute no máximo 2 trabalhos em lote concorrentes. O GPU processa 2 lotes em paralelo — fila de trabalhos adicionais e não vai começar mais rápido.
- No tempo de espera, re-poll o mesmo job_id em vez de enviar um novo lote. O trabalho original pode ainda estar processando na GPU.
- Enquete a cada 3-5 segundos. A sondagem mais frequente não acelera o processamento.
Lote Multi-Língua
Traduzir múltiplos textos para múltiplos idiomas de uma vez:
{
"texts": ["Hello", "Goodbye"],
"target_languages": ["es", "fr"],
"source_language": "en"
}
Data_de_resultado Completado
{
"translations": [
{"es": "Hola", "fr": "Bonjour"},
{"es": "Adiós", "fr": "Au revoir"}
],
"source_language": "en",
"target_languages": ["es", "fr"],
"character_count": 24,
"processing_time": 2.45
}
Parâmetros de Pedido
| Parâmetro | Tipo | Requerido | Descrição |
|---|---|---|---|
texts |
array | Sim | Array de cordas para traduzir |
target_language |
string | Sim* | Código da língua-alvo para uma única língua |
target_languages |
array | Sim* | Array de códigos de língua-alvo para múltiplas línguas |
source_language |
string | Não | Source language code. Default: "auto" |
* Fornecer qualquer target_language ou target_languages, não ambos.
job_id. Ensaio GET /api/v1/jobs/{job_id}/ até status é "completed", então ler result_data para traduções. progress_percentage Para acompanhar o progresso.
Tradução do documento
Traduzir documentos inteiros ao preservar a formatação. Suporta vários formatos de arquivo.
POST https://api.translateapi.ai/api/v1/translate/document/
Pedido (multipart/formulário)
| Parâmetro | Tipo | Requerido | Descrição |
|---|---|---|---|
file |
file | Sim | O documento a traduzir (máx. 10MB) |
target_language |
string | Sim | Target language code (e.g., "es", "fr", "de") |
source_language |
string | Não | Source language code. Default: "auto" (auto-detect) |
Tipos de Ficheiros Suportados
.txt- Ficheiros de texto simples.docx- Documentos-chave.pdf- Documentos PDF (incluindo escaneados).json- Arquivos JSON (traduzir os valores de string).xml- Ficheiros XML
.srt- Ficheiros de subtítulos.po/.pot- Ficheiros de tradução do Gettext.jpg/.jpeg- Imagens JPEG (OCR).png- Imagens PNG (OCR).tiff/.tif- Imagens TIFF (OCR).bmp- Imagens BMP (OCR).webp- Imagens WebP (OCR)
Exemplo (cURL)
# Translate a Word document
curl -X POST https://api.translateapi.ai/api/v1/translate/document/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@document.docx" \
-F "target_language=es" \
-F "source_language=en"
# Translate text from an image (OCR)
curl -X POST https://api.translateapi.ai/api/v1/translate/document/ \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@scanned_page.jpg" \
-F "target_language=es" \
-F "source_language=en"
.txt arquivo.
Resposta
{
"id": 123,
"original_filename": "document.docx",
"file_type": "docx",
"source_language": "en",
"target_language": "es",
"status": "completed",
"character_count": 5420,
"translated_file_url": "/media/translated/document_es.docx",
"created_at": "2024-01-15T10:30:00Z",
"completed_at": "2024-01-15T10:30:05Z"
}
Valores de Estado
pending |
Ficheiro carregado, à espera de ser processado |
processing |
Tradução em curso |
completed |
Tradução completa, download disponível |
failed |
A tradução falhou (verifique o erro_mensagem) |
GET https://api.translateapi.ai/api/v1/translate/document/{id}/
Verifique o estado de tradução de um documento ou recupere a URL do download.
Resposta
{
"id": 123,
"original_filename": "document.docx",
"status": "completed",
"translated_file_url": "/media/translated/document_es.docx",
"character_count": 5420
}
Detecção de Línguas
A detecção de idiomas é incorporada em cada pedido de tradução. source_language to "auto" (ou omitir) e a língua detectada é devolvida na resposta.
POST https://api.translateapi.ai/api/v1/translate/
Órgão de Pedido
{
"text": "Bonjour, comment allez-vous?",
"target_language": "en"
}
Resposta
{
"translated_text": "Hello, how are you?",
"source_language": "fr",
"target_language": "en",
"translations": {
"en": "Hello, how are you?"
},
"character_count": 28,
"translation_time": 0.52
}
O source_language campo na resposta mostra a linguagem detectada quando a autodetecção é utilizada.
Línguas Suportadas
Obtenha a lista de todas as línguas suportadas.
GET https://api.translateapi.ai/api/v1/translate/languages/
Resposta
{
"count": 186,
"results": [
{"iso": "en", "name": "English", "en_label": "English"},
{"iso": "es", "name": "Español", "en_label": "Spanish"},
{"iso": "fr", "name": "Français", "en_label": "French"},
...
]
}
Modelos de Tradução
Utilizamos modelos de tradução de código aberto de última geração que funcionam em nossa própria infraestrutura GPU. Todos os modelos são licenciados comercialmente (Apache 2.0).
| Modelo | Línguas | Melhor para |
|---|---|---|
| Helsinki-NLP/opus-mt | 50+ pares de línguas | Línguas comuns (EN, ES, FR, DE, IT, PT, RU, ZH, JA, etc.) |
| Google MADLAD-400 | 400+ línguas | Línguas raras, cobertura abrangente |
A API seleciona automaticamente o melhor modelo para o seu par de idiomas. Você pode opcionalmente especificar um engine parâmetro:
| Motor | Descrição |
|---|---|
"auto" |
Por defeito. Tria HuggingFace primeiro, volta para MADLAD-400 |
"huggingface" |
Força HuggingFace/MarianMT (mais rápido, 50+ línguas) |
"madlad" |
Força MADLAD-400 (400+ línguas) |
Tratamento de Erros
A API usa códigos de estado HTTP padrão para indicar sucesso ou falha.
| Código | Descrição |
|---|---|
200 |
Sucesso |
400 |
Pedido Incorreto - Parâmetros inválidos |
401 |
Não autorizado - Inválido ou faltando chave API |
402 |
Pagamento exigido - Contingente de caráter diário excedido |
429 |
Demasiados pedidos - limite de taxa excedido |
503 |
Serviço não disponível - Motor de tradução temporariamente para baixo |
Formato de Resposta de Erro
{
"error": "daily_limit_exceeded",
"credits_remaining": 0,
"daily_limit": 100000
}
Limites de taxa
Os limites variam por plano. Preços Para detalhes completos:
| Plano | Características/Mes | Preço | |
|---|---|---|---|
| Grátis | 250,000 | $0 | Inscreva-se gratuitamente |
| Início | 2,500,000 | $9/mo | Subscrever |
| Pro | 10,000,000 | $29/mo | Subscrever |
| Negócios | 40,000,000 | $79/mo | Subscrever |
| Escala | 125,000,000 | $199/mo | Subscrever |
Quando exceder o seu limite, você receberá um 429 Too Many Requests resposta até o próximo mês ou você atualiza.
Auto-Scaling Cloud Infrastructure
TranslateAPI runs on dedicated NVIDIA A100 GPU instances with automatic horizontal scaling. When demand increases, additional GPU instances are launched within minutes to maintain fast response times. This means our API can handle virtually unlimited concurrent requests without degradation — from a single request to thousands per minute.