Uma chave, dezenas de modelos, pagamento em reais.
A Invision é uma API de modelos de linguagem compatível com o padrão da OpenAI. Você usa os mesmos SDKs e formatos que já conhece, acessa os principais modelos do mercado com uma única chave e paga por token, com recarga por Pix e sem mensalidade.
https://invision.dreamvision.com.br/v1Toda requisição precisa do header Authorization: Bearer SUA_CHAVE_INVISION. Nunca coloque a chave em código que roda no navegador ou em aplicativos públicos.
1. Crie sua chave
- Crie sua conta com e-mail ou Google.
- No painel, faça uma recarga por Pix. O crédito cai em segundos.
- Em Chaves de API, clique em Nova chave e copie o valor. Ele aparece uma única vez.
- Guarde a chave em uma variável de ambiente, por exemplo
INVISION_API_KEY.
2. Faça a primeira chamada
Com curl, direto no terminal:
curl https://invision.dreamvision.com.br/v1/chat/completions \
-H "Authorization: Bearer $INVISION_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qwen/qwen3.8-max",
"messages": [
{ "role": "system", "content": "Você é um assistente objetivo." },
{ "role": "user", "content": "Explique o que é uma API em uma frase." }
]
}'Resposta (resumida):
{
"id": "chatcmpl-...",
"object": "chat.completion",
"model": "...",
"choices": [
{ "index": 0,
"message": { "role": "assistant", "content": "Uma API é..." },
"finish_reason": "stop" }
],
"usage": { "prompt_tokens": 24, "completion_tokens": 18, "total_tokens": 42 }
}O campo usage mostra exatamente quantos tokens foram cobrados.
3. Use com seu SDK favorito
Python
pip install openai
from openai import OpenAI
import os
client = OpenAI(base_url="https://invision.dreamvision.com.br/v1", api_key=os.environ["INVISION_API_KEY"])
resp = client.chat.completions.create(
model="qwen/qwen3.8-max",
messages=[{"role": "user", "content": "Olá!"}],
)
print(resp.choices[0].message.content)JavaScript / TypeScript
npm install openai
import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://invision.dreamvision.com.br/v1",
apiKey: process.env.INVISION_API_KEY,
});
const resp = await client.chat.completions.create({
model: "qwen/qwen3.8-max",
messages: [{ role: "user", content: "Olá!" }],
});
console.log(resp.choices[0].message.content);Ferramentas como LangChain, LlamaIndex, Vercel AI SDK, Cursor, Continue e n8n também funcionam: escolha o provedor “OpenAI compatível” e informe a URL base e a chave da Invision.
Endpoints
| Método | Caminho | Para que serve |
|---|---|---|
| GET | /v1/models | Lista os modelos disponíveis, com janela de contexto e recursos. |
| POST | /v1/chat/completions | Chat no formato OpenAI. Suporta streaming, ferramentas, visão e JSON. |
| POST | /v1/responses | Formato Responses da OpenAI, para agentes e saídas estruturadas. |
| POST | /v1/messages | Formato Messages (Anthropic), para quem já usa o SDK do Claude. |
| POST | /v1/models/{model}:generateContent | Formato Gemini, para quem já usa o SDK do Google. |
Parâmetros do chat
Principais campos aceitos por POST /v1/chat/completions:
| Campo | Tipo | Descrição |
|---|---|---|
model | string | Obrigatório. ID do modelo, ex.: um valor de GET /v1/models. |
messages | array | Obrigatório. Lista de mensagens com role (system, user, assistant, tool) e content. |
stream | boolean | true para receber a resposta aos poucos (Server-Sent Events). |
temperature | number | 0 a 2. Mais baixo = mais previsível; mais alto = mais criativo. |
top_p | number | Alternativa à temperature. Use um ou outro. |
max_tokens | integer | Limite de tokens na resposta. Controla custo e tamanho. |
stop | string | array | Sequências que encerram a geração. |
tools | array | Funções que o modelo pode pedir para chamar. |
tool_choice | string | object | auto, none, required ou uma função específica. |
response_format | object | { type: "json_object" } ou json_schema para forçar JSON. |
stream_options | object | { include_usage: true } envia o consumo no último evento do stream. |
Nem todo modelo aceita todos os campos. Consulte os recursos de cada um em GET /v1/models.
Streaming
Com "stream": true, a resposta chega em pedaços, no formato Server-Sent Events. Cada linha começa com data: e o fim é marcado por data: [DONE]. Ideal para chats, pois o usuário vê o texto sendo escrito.
stream = client.chat.completions.create(
model="qwen/qwen3.8-max",
messages=[{"role": "user", "content": "Conte uma história curta."}],
stream=True,
stream_options={"include_usage": True},
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)Ferramentas (function calling)
Descreva funções do seu sistema e o modelo decide quando chamá-las. Você executa a função e devolve o resultado numa mensagem com role: "tool".
{
"model": "...",
"messages": [{ "role": "user", "content": "Qual o clima em São Paulo?" }],
"tools": [{
"type": "function",
"function": {
"name": "clima_atual",
"description": "Retorna o clima de uma cidade",
"parameters": {
"type": "object",
"properties": { "cidade": { "type": "string" } },
"required": ["cidade"]
}
}
}]
}Imagens (visão)
Modelos com visão aceitam imagens por URL pública ou em base64 dentro de content:
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "O que tem nesta foto?" },
{ "type": "image_url", "image_url": { "url": "https://exemplo.com/foto.jpg" } }
]
}]Saída em JSON
Use "response_format": { "type": "json_object" } e peça JSON na mensagem de sistema. Para um formato exato, use json_schema com o esquema desejado.
Formato Anthropic
Quem já usa o SDK do Claude aponta para a Invision sem reescrever nada:
from anthropic import Anthropic
client = Anthropic(base_url="https://invision.dreamvision.com.br", api_key=os.environ["INVISION_API_KEY"])
msg = client.messages.create(
model="...", max_tokens=512,
messages=[{"role": "user", "content": "Olá!"}],
)Modelos (62)
Use o ID exatamente como abaixo no campo model. Lista ao vivo (atualizada em 2026-09-22); também disponível em GET /v1/models, e os preços por token em Preços.
qwen/qwen3.8-maxqwen/qwen3.7-maxqwen/qwen3.6-max-previewqwen/qwen3.7-plusqwen/qwen3.6-plusqwen/qwen3.6-flashqwen/qwen3.8-flash-nextanthropic/claude-fable-5-1anthropic/claude-fable-5anthropic/claude-opus-5anthropic/claude-opus-4.5anthropic/claude-sonnet-4.5anthropic/claude-sonnet-5anthropic/claude-opus-4.6anthropic/claude-opus-4.7anthropic/claude-opus-4.8anthropic/claude-sonnet-4.6anthropic/claude-haiku-4.5bytedance/doubao-seed-evolvingbytedance/doubao-seed-2.1-probytedance/doubao-seed-2.0-probytedance/doubao-seed-2.0-codebytedance/doubao-seed-2.1-turbobytedance/doubao-seed-2.0-litebytedance/doubao-seed-2.0-minideepseek/deepseek-v4-prodeepseek/deepseek-v4-flash-vision-expdeepseek/deepseek-v4-flashdeepseek/deepseek-v4.1-flashgoogle/gemini-3.1-pro-previewgoogle/gemini-3.5-flashgoogle/gemini-3.6-flashgoogle/gemini-2.5-progoogle/gemini-3.7-flashgoogle/gemini-3.8-flashgoogle/gemini-3-flash-previewgoogle/gemini-2.5-flashgoogle/gemini-3.1-flash-lite-previewgoogle/gemini-3.5-flash-litemoonshotai/kimi-k3openai/gpt-5.5-proopenai/gpt-5.4-proopenai/gpt-6-astraopenai/gpt-5.4openai/gpt-5.6-solopenai/gpt-5.5openai/gpt-5.3-codexopenai/gpt-5.4-miniopenai/gpt-5.6-terraopenai/gpt-5.4-nanoopenai/gpt-5.6-lunaglm/glm-5.3glm/glm-5.1glm/glm-5.2glm/glm-5-turboglm/glm-5v-turboglm/glm-5glm/glm-5.3-flashxai/grok-4.7xai/grok-4.6xai/grok-4.5xai/grok-4.3Cobrança e saldo
- Você paga por token de entrada (o que envia) e de saída (o que o modelo responde).
- Os preços são definidos em dólar e cobrados em reais pela cotação do dia.
- O débito acontece ao fim de cada requisição, com base no
usageretornado. - Sem saldo, a API responde
402 insufficient_creditaté a próxima recarga. - Recarga por Pix, confirmada automaticamente. Sem mensalidade, sem valor mínimo mensal.
Limites
Cada conta tem um limite de requisições por minuto para garantir estabilidade. Ao atingi-lo, a API responde 429 com o header Retry-After. Precisa de mais? Fale com a gente.
Erros
Erros sempre voltam em JSON:
{ "error": { "type": "invalid_api_key", "code": "invalid_api_key", "message": "Chave Invision inválida." } }| HTTP | Código | Significado | O que fazer |
|---|---|---|---|
| 400 | invalid_request | JSON malformado ou campo fora do formato. | Revise o corpo da requisição. |
| 401 | invalid_api_key | Chave ausente, errada ou revogada. | Confira o header Authorization: Bearer. |
| 402 | insufficient_credit | Saldo esgotado. | Recarregue por Pix no painel. |
| 404 | model_not_found | O model não existe no catálogo. | Use um ID de GET /v1/models. |
| 429 | rate_limited | Muitas requisições por minuto. | Aguarde o Retry-After e use backoff. |
| 500 | server_error | Falha inesperada do modelo. | Tente de novo com backoff. |
| 502 | upstream_unavailable | Falha momentânea de roteamento. | Tente de novo em alguns segundos. |
| 503 | gateway_unavailable | Serviço temporariamente indisponível. | Tente de novo; persiste? Fale com o suporte. |
| 504 | upstream_timeout | O modelo demorou demais. | Use streaming ou reduza max_tokens. |
Boas práticas
- Guarde a chave no servidor, nunca no navegador ou no app.
- Use uma chave por projeto; se vazar, revogue só aquela.
- Defina
max_tokenspara controlar custo. - Em erros 429, 5xx e 504, tente de novo com espera crescente (1s, 2s, 4s…).
- Use streaming em respostas longas para evitar tempo esgotado.
Perguntas frequentes
Preciso mudar meu código?
Não. Se você usa o SDK da OpenAI, troque apenas a base_url para a da Invision e a chave. O resto continua igual.
Existe mensalidade?
Não. Você recarrega por Pix e paga só pelos tokens usados. O saldo não expira.
Meus dados são usados para treinar modelos?
A Invision não armazena o conteúdo das suas mensagens; guardamos apenas a contagem de tokens para cobrança.
Posso ter várias chaves?
Sim. Crie uma chave por projeto ou ambiente e revogue qualquer uma a qualquer momento no painel.
Como vejo meu consumo?
No painel, em Consumo, com tokens e valor gasto por modelo e por dia.