Documentação MangabaRouter
MangabaRouter é uma interface frontend que utiliza a API OpenRouter para dar acesso unificado a mais de 300 modelos de inteligência artificial de diferentes provedores.
Base URL
Todas as requisições devem ser feitas para:
https://openrouter.ai/api/v1
Autenticação
Todas as requisições requerem um header de autorização com sua chave API OpenRouter.
Authorization: Bearer sk-or-v1-sua-chave-aqui
Também é recomendado incluir headers de identificação:
HTTP-Referer: https://seusite.com
X-Title: Nome do Seu App
Quickstart
Faça sua primeira requisição em menos de 2 minutos.
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="sk-or-v1-sua-chave",
)
response = client.chat.completions.create(
model="openai/gpt-4o-mini",
messages=[
{"role": "user", "content": "Olá! Qual é a capital do Brasil?"}
]
)
print(response.choices[0].message.content)
Chat Completions
O endpoint principal para interações conversacionais com modelos de linguagem.
POST https://openrouter.ai/api/v1/chat/completions
Parâmetros do Body
| Parâmetro | Tipo | Descrição |
|---|---|---|
model | string (obr.) | ID do modelo. Ex: openai/gpt-4o |
messages | array (obr.) | Array de mensagens com role e content |
stream | boolean | Se true, retorna chunks SSE em tempo real |
temperature | number (0-2) | Controla aleatoriedade. 0 = determinístico |
max_tokens | integer | Limite de tokens na resposta |
top_p | number (0-1) | Nucleus sampling |
Exemplo Completo
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'HTTP-Referer': 'https://dheiver2.github.io/mangabarouter',
'X-Title': 'MangabaRouter',
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'anthropic/claude-3.5-sonnet',
messages: [
{ role: 'system', content: 'Você é um assistente útil.' },
{ role: 'user', content: 'Explique machine learning em 2 frases.' }
],
temperature: 0.7,
max_tokens: 1024
})
});
const data = await response.json();
console.log(data.choices[0].message.content);
Endpoint de Modelos
Liste todos os modelos disponíveis. Este endpoint é público e não requer autenticação.
GET https://openrouter.ai/api/v1/models
curl https://openrouter.ai/api/v1/models | jq '.data[0]'
Resposta
{
"id": "openai/gpt-4o",
"name": "GPT-4o",
"description": "OpenAI's most capable model",
"context_length": 128000,
"pricing": {
"prompt": "0.000005",
"completion": "0.000015"
}
}
Streaming
O streaming permite receber a resposta do modelo em tempo real, palavra por palavra, ao invés de esperar a resposta completa.
const response = await fetch('https://openrouter.ai/api/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({
model: 'openai/gpt-4o-mini',
messages: [{ role: 'user', content: 'Conte uma história curta' }],
stream: true
})
});
const reader = response.body.getReader();
const decoder = new TextDecoder();
while (true) {
const { done, value } = await reader.read();
if (done) break;
const lines = decoder.decode(value).split('\n');
for (const line of lines) {
if (!line.startsWith('data: ') || line === 'data: [DONE]') continue;
try {
const json = JSON.parse(line.slice(6));
const delta = json.choices?.[0]?.delta?.content;
if (delta) process.stdout.write(delta);
} catch(e) {}
}
}
Tratamento de Erros
A API retorna erros padrão HTTP com corpo JSON descritivo.
| Código | Erro | Descrição |
|---|---|---|
400 | Bad Request | Parâmetros inválidos |
401 | Unauthorized | Chave API inválida ou ausente |
402 | Payment Required | Créditos insuficientes |
429 | Too Many Requests | Limite de taxa excedido |
500 | Server Error | Erro interno do servidor |
503 | Service Unavailable | Modelo temporariamente indisponível |
try {
const res = await fetch('...', { ... });
if (!res.ok) {
const error = await res.json();
throw new Error(error.error?.message || `HTTP ${res.status}`);
}
const data = await res.json();
} catch (err) {
console.error('Erro API:', err.message);
}
SDK Python
Use o SDK oficial da OpenAI com a URL base do OpenRouter.
pip install openai
from openai import OpenAI
client = OpenAI(
base_url="https://openrouter.ai/api/v1",
api_key="sk-or-v1-sua-chave",
default_headers={
"HTTP-Referer": "https://meusite.com",
"X-Title": "Meu App"
}
)
# Streaming
stream = client.chat.completions.create(
model="anthropic/claude-3.5-sonnet",
messages=[{"role": "user", "content": "Olá!"}],
stream=True
)
for chunk in stream:
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
SDK JavaScript / TypeScript
npm install openai
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://openrouter.ai/api/v1',
apiKey: process.env.OPENROUTER_API_KEY,
defaultHeaders: {
'HTTP-Referer': 'https://meusite.com',
'X-Title': 'Meu App',
},
});
const completion = await client.chat.completions.create({
model: 'openai/gpt-4o',
messages: [{ role: 'user', content: 'Olá mundo!' }],
});
console.log(completion.choices[0].message.content);
cURL
curl https://openrouter.ai/api/v1/chat/completions \
-H "Authorization: Bearer $OPENROUTER_API_KEY" \
-H "HTTP-Referer: https://meusite.com" \
-H "X-Title: Meu App" \
-H "Content-Type: application/json" \
-d '{
"model": "openai/gpt-4o-mini",
"messages": [
{"role": "user", "content": "Qual é a capital do Brasil?"}
]
}'
Listar modelos
curl https://openrouter.ai/api/v1/models | python3 -m json.tool