Documentação da API
A API Many oferece todos os modelos com uma URL base e uma chave. Os endpoints de texto seguem os formatos da OpenAI e da Anthropic, então os SDKs oficiais funcionam sem mudanças; imagem, vídeo e música rodam como tarefas assíncronas.
URL base https://apimany.com/v1
Início rápido
- Entre e crie uma chave em Chaves de API.
- Adicione saldo a partir de US$ 10 em Saldo.
- Envie sua primeira requisição:
curl https://apimany.com/v1/chat/completions \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "claude-sonnet-5-5", "messages": [{"role": "user", "content": "Hello"}]}'Autenticação
Envie sua chave no cabeçalho Authorization como token Bearer. As chaves são secretas: chame a API do seu servidor, nunca do navegador ou de um app móvel.
Authorization: Bearer sk_apimany_xxxxxxxxxxxxxxxx
# Anthropic-style clients may send the key as:
x-api-key: sk_apimany_xxxxxxxxxxxxxxxxSDKs
Use o SDK oficial da OpenAI (Python, Node.js, Go, Java, .NET) com base_url https://apimany.com/v1, ou o SDK oficial da Anthropic com base_url https://apimany.com. Qualquer cliente HTTP funciona para os endpoints de mídia.
Cobrança
Cada requisição reserva o custo máximo do saldo ao começar e é liquidada ao terminar:
- Texto: cobrado pelos tokens de entrada, em cache e de saída informados pelo modelo, aos preços por milhão da página dele.
- Imagens: cobradas por imagem conforme a resolução ou qualidade escolhida; modelos de imagem por tokens são liquidados pelo uso informado.
- Vídeo: cobrado por segundo conforme a resolução escolhida (ou por clipe nos modelos de duração fixa).
- Requisições com falha, rejeitadas ou expiradas não são cobradas: a reserva volta integralmente.
Envie um cabeçalho Idempotency-Key (1–200 caracteres) para repetir com segurança: uma chave repetida retorna o registro original em vez de executar de novo.
Chat completions POST/v1/chat/completions
Chat compatível com OpenAI para todos os modelos de linguagem, incluindo Claude, Gemini, DeepSeek, Grok, Qwen e Kimi. Streaming, ferramentas, modo JSON e imagens seguem o formato da OpenAI. Respostas em streaming trazem o uso no último bloco.
curl https://apimany.com/v1/chat/completions \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-v4.1-flash",
"stream": true,
"messages": [
{"role": "system", "content": "You are concise."},
{"role": "user", "content": "Summarize HTTP/3 in two sentences."}
]
}'Anthropic Messages POST/v1/messages
Os modelos Claude também aceitam a API Messages nativa da Anthropic, com streaming, ferramentas, pensamento estendido e cache de prompts. Os cabeçalhos anthropic-version e anthropic-beta são repassados.
import anthropic
client = anthropic.Anthropic(base_url="https://apimany.com", api_key="YOUR_API_KEY")
message = client.messages.create(
model="claude-opus-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Write a haiku about APIs."}],
)
print(message.content[0].text)Responses POST/v1/responses
A API Responses da OpenAI para os modelos que a suportam.
curl https://apimany.com/v1/responses \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "gpt-6.1-sol", "input": "Explain recursion to a child."}'Embeddings POST/v1/embeddings
curl https://apimany.com/v1/embeddings \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "text-embedding-3-small", "input": ["first text", "second text"]}'Imagens POST/v1/images/generations
Texto para imagem e edição de imagens. Cada modelo documenta seus campos (tamanho, resolução, qualidade, imagens de referência) na página dele; envie-os como listados. A chamada retorna uma tarefa na hora:
curl https://apimany.com/v1/images/generations \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2",
"prompt": "A watercolor fox in a snowy forest",
"size": "16:9",
"resolution": "2k",
"image_urls": ["https://example.com/style-reference.png"]
}'{
"id": "2c7f9a8e-0d1b-4b5e-9a5d-6f0c1e2d3a4b",
"object": "generation.task",
"model": "seedance-2.5",
"status": "pending",
"reserved_usd": 2.16,
"task_id": "2c7f9a8e-0d1b-4b5e-9a5d-6f0c1e2d3a4b"
}Vídeos POST/v1/videos/generations
Texto para vídeo, imagem para vídeo, referências, edições e extensões — conforme o modelo. Modelos por segundo reservam a duração pedida e liquidam pelo clipe entregue.
curl https://apimany.com/v1/videos/generations \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "seedance-2.5",
"prompt": "Slow dolly-in on a neon alley after rain",
"resolution": "720p",
"duration": 8,
"size": "16:9",
"callback_url": "https://your-app.com/webhooks/apimany"
}'Música POST/v1/music/generations
curl https://apimany.com/v1/music/generations \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "suno", "custom": false, "version": "v6", "prompt": "Late-night lo-fi piano with soft rain"}'Tarefas e consultas GET/v1/tasks/{id}
Consulte a cada 3–10 segundos até o status ser completed ou failed. Status: pending, processing, completed, failed. Tarefas concluídas trazem URLs assinadas válidas por 30 dias; baixe o que quiser guardar.
curl https://apimany.com/v1/tasks/TASK_ID -H "Authorization: Bearer $APIMANY_API_KEY"Webhooks
Adicione callback_url (HTTPS público) a qualquer requisição de mídia e enviaremos a tarefa concluída por POST, com até seis novas tentativas espaçadas. Verifique X-Apimany-Signature com o segredo de webhooks da página de chaves de API.
import crypto from 'node:crypto'
// Express-style handler; keep the raw body for the signature check.
export function verify(rawBody, headers, secret) {
const timestamp = headers['x-apimany-timestamp']
const expected = crypto.createHmac('sha256', secret.replace(/^whsec_/, ''))
.update(`${timestamp}.${rawBody}`).digest('hex')
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(headers['x-apimany-signature']))
}
// Payload: { "event": "task.completed" | "task.failed", "data": { ...task, "record": { ... } } }Transcrição POST/v1/audio/transcriptions
Fala para texto compatível com OpenAI com envio multipart (até 25 MB).
curl https://apimany.com/v1/audio/transcriptions \
-H "Authorization: Bearer $APIMANY_API_KEY" \
-F model=gpt-4o-transcribe \
-F [email protected] \
-F response_format=jsonModelos GET/v1/models
Lista pública de todos os modelos com tipo, endpoint e preços; filtre com ?kind=chat|image|video|audio|embedding.
# Every model with its pricing (no key needed)
curl https://apimany.com/v1/models
# Only video models
curl "https://apimany.com/v1/models?kind=video"
# One model with its parameters
curl https://apimany.com/v1/models/seedance-2.5Registros GET/v1/records
Cada chamada (texto, mídia e áudio) tem um registro com status, uso, custo e resultados. Filtre por model, kind, status, api_key_id ou since.
curl "https://apimany.com/v1/records?limit=20&kind=video&status=completed" \
-H "Authorization: Bearer $APIMANY_API_KEY"
curl https://apimany.com/v1/records/RECORD_ID -H "Authorization: Bearer $APIMANY_API_KEY"Saldo GET/v1/account/balance
curl https://apimany.com/v1/account/balance -H "Authorization: Bearer $APIMANY_API_KEY"
# { "object": "balance", "currency": "usd", "balance_usd": 42.17, "debt_usd": 0 }Erros
Os erros usam o formato da OpenAI, então as exceções dos SDKs funcionam normalmente.
{
"error": {
"message": "Your balance is too low for this request. Top up and try again.",
"type": "insufficient_quota",
"param": null,
"code": "insufficient_balance"
}
}| HTTP | code | Significado |
|---|---|---|
| 400 | invalid_request | Falta um parâmetro ou ele não é permitido para este modelo. Nada foi cobrado. |
| 401 | invalid_api_key | A chave está ausente, malformada ou revogada. |
| 402 | insufficient_balance | Seu saldo não cobre a reserva desta requisição. |
| 404 | model_not_found | O ID do modelo não existe. Liste os modelos com GET /v1/models. |
| 409 | idempotency_replay | Esta Idempotency-Key já foi usada; consulte o registro anterior. |
| 413 | request_too_large | O corpo da requisição excede o limite. Envie mídias como URLs. |
| 429 | rate_limited | Requisições demais por minuto para esta chave. Tente de novo com espera progressiva. |
| 502 | generation_failed | Todos os canais deste modelo falharam. Nada foi cobrado; tente de novo em breve. |
| 503 | model_unavailable | O modelo está temporariamente indisponível. |
Limites
- Corpo da requisição: até 25 MB para texto e 40 MB para mídia. Envie arquivos grandes como URLs HTTPS.
- Envios no playground: imagens até 10 MB, vídeo até 100 MB e áudio até 50 MB.
- Limite: 120 requisições por minuto por conta, por padrão. Fale conosco para limites maiores.
- Os arquivos gerados ficam 30 dias. Tarefas que nunca terminam são revisadas e reembolsadas.
- Os recursos e limites de cada modelo seguem o fabricante.