Uma chave por aplicação
Se uma precisar sair de uso, só ela é revogada. As outras seguem funcionando.
A CentopeIA funciona com os SDKs oficiais da OpenAI, da Anthropic e do Replicate, e com a API de modelos 3D. Você só aponta o cliente para o nosso endereço e usa a sua chave CentopeIA. Todo o resto continua igual.
client = OpenAI(
- api_key="sk-proj-...",
+ api_key="sk-ctp-...",
+ base_url="https://jukepix.centopeia.io/openai/v1",
)
client.chat.completions.create(...) # igual Do zero à primeira resposta em poucos minutos. Escolha o provedor e a linguagem: os exemplos se ajustam.
O nosso time entrega uma chave sk-ctp-... para cada aplicação. Ela é exibida
uma única vez: salve em uma variável de ambiente, nunca no código.
CENTOPEIA_API_KEY=sk-ctp-...Nada de biblioteca nova: use exatamente o SDK que você já conhece.
pip install openai anthropic replicate requestsInforme a chave e o endereço base. A partir daqui, é a API de sempre do GPT.
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CENTOPEIA_API_KEY"],
base_url="https://jukepix.centopeia.io/openai/v1",
)
resposta = client.chat.completions.create(
model="gpt-5.5",
max_completion_tokens=500,
messages=[{"role": "user", "content": "Diga olá em uma frase."}],
)
print(resposta.choices[0].message.content)Pronto. A mesma chave funciona para GPT e Claude. O consumo aparece por chave no painel da sua empresa e é cobrado em reais.
Os SDKs oficiais leem a chave e o endereço base direto do ambiente. Com estas quatro linhas, o seu projeto passa a usar a CentopeIA sem tocar no código.
# Os SDKs oficiais leem estas variáveis sozinhos
OPENAI_API_KEY=sk-ctp-...
OPENAI_BASE_URL=https://jukepix.centopeia.io/openai/v1
ANTHROPIC_API_KEY=sk-ctp-...
ANTHROPIC_BASE_URL=https://jukepix.centopeia.io/anthropicfrom openai import OpenAI
from anthropic import Anthropic
gpt = OpenAI() # já aponta para a CentopeIA
claude = Anthropic() # idemIdeal para projetos que já usam OpenAI ou Anthropic: troque as variáveis no deploy e pronto.
Endereço base: https://jukepix.centopeia.io/openai/v1. Todos os exemplos abaixo
partem do cliente configurado no passo 3.
A interface mais recente da OpenAI para texto e ferramentas.
resposta = client.responses.create(
model="gpt-5.5",
input="Explique o que é uma API em duas frases.",
max_output_tokens=500,
)
print(resposta.output_text)Receba o texto à medida que é gerado. O último pedaço da transmissão traz o resumo de consumo, por isso confira se há conteúdo antes de ler.
stream = client.chat.completions.create(
model="gpt-5.5",
max_completion_tokens=500,
messages=[{"role": "user", "content": "Conte uma história curta."}],
stream=True,
)
for chunk in stream:
if chunk.choices: # o último pedaço traz apenas o consumo
print(chunk.choices[0].delta.content or "", end="", flush=True)Gere vetores para busca semântica, recomendação e RAG.
resultado = client.embeddings.create(
model="text-embedding-3-small",
input=["CentopeIA", "IA em reais"],
)
vetor = resultado.data[0].embedding
print(len(vetor))Crie imagens a partir de texto com o gpt-image-2.5-sunburst, o modelo de imagem mais
detalhado da OpenAI. A imagem volta em base64, pronta para salvar.
import base64
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["CENTOPEIA_API_KEY"],
base_url="https://jukepix.centopeia.io/openai/v1",
)
resposta = client.images.generate(
model="gpt-image-2.5-sunburst",
prompt=(
"Suíte de luxo em um hotel 5 estrelas nos Alpes Suíços, "
"janelas panorâmicas com vista para montanhas nevadas, "
"lareira acesa, madeira nobre e pedra, luz quente ao entardecer, "
"fotografia de arquitetura hiper-realista"
),
size="1536x864", # 16:9, largura e altura múltiplas de 16
quality="high", # low, medium, high, xhigh ou max
n=1,
)
with open("suite_alpes.png", "wb") as arquivo:
arquivo.write(base64.b64decode(resposta.data[0].b64_json))
print("Imagem salva em suite_alpes.png")Escolha qualquer formato: largura e altura múltiplas de 16, lado maior de até 3840 px e proporção de até 3:1.
1024x1024QuadradoPosts e avatares1536x86416:9Banners e capas864x15369:16Stories e telas de celular1536x10243:2Fotografia3840x21604K 16:9Telas grandes e impressãoMais qualidade traz mais detalhe, com mais tempo de geração e custo maior.
lowmediumhighxhighmaxgpt-image-2.5-sunburstMáximo detalhe, ideal para fotorrealismogpt-image-2.5-flareOs mesmos recursos, com geração mais rápidagpt-image-2Geração anterior, com low, medium e highUm tamanho fora dessas regras, como 1600x900 (900 não é múltiplo de 16), é
recusado antes da geração e não gera custo. Para 16:9, use 1536x864 ou 2560x1440.
for modelo in client.models.list():
print(modelo.id)Endereço base: https://jukepix.centopeia.io/anthropic. O SDK completa o caminho /v1 sozinho; em chamadas diretas (cURL), use https://jukepix.centopeia.io/anthropic/v1.
with client.messages.stream(
model="claude-sonnet-5-5",
max_tokens=1024,
messages=[{"role": "user", "content": "Conte uma história curta."}],
) as stream:
for texto in stream.text_stream:
print(texto, end="", flush=True)Saiba o tamanho de uma mensagem antes de enviá-la. Esta chamada não gera custo de modelo.
contagem = client.messages.count_tokens(
model="claude-sonnet-5-5",
messages=[{"role": "user", "content": "Quantos tokens tem esta frase?"}],
)
print(contagem.input_tokens)Tarefas que levam de segundos a minutos: você cria a tarefa, recebe um identificador e consulta até ficar pronta. A cobrança é pelo que a tarefa produz e sai do mesmo saldo da empresa. Tarefas que falham não são cobradas.
Endereço base: https://jukepix.centopeia.io/meshy/openapi/v1, compatível com a API da
Meshy. Envie a imagem como URL pública ou data URI. O resultado traz o modelo em GLB, FBX,
OBJ e USDZ em model_urls, disponível por 3 dias. Para várias fotos do mesmo
objeto, use multi-image-to-3d com image_urls.
import base64, os, sys, time
import requests
BASE = "https://jukepix.centopeia.io/meshy/openapi/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['CENTOPEIA_API_KEY']}"}
# Foto do objeto (JPG, PNG ou WebP, até 20 MB). Também aceita uma URL pública HTTPS.
with open("foto.png", "rb") as arquivo:
imagem = "data:image/png;base64," + base64.b64encode(arquivo.read()).decode()
r = requests.post(f"{BASE}/image-to-3d", headers=HEADERS, json={
"image_url": imagem,
"ai_model": "meshy-6-lite", # rascunho rápido: 5 créditos
"should_texture": False, # True gera textura (mais créditos)
})
if not r.ok:
sys.exit(f"Erro {r.status_code} ({r.json().get('code')}): {r.json().get('message')}")
tarefa = r.json()["result"]
while True:
t = requests.get(f"{BASE}/image-to-3d/{tarefa}", headers=HEADERS).json()
print(t.get("status"), t.get("progress"), "%")
if t.get("status") in ("SUCCEEDED", "FAILED", "CANCELED"):
break
time.sleep(5)
if t["status"] == "SUCCEEDED":
print("Modelo GLB:", t["model_urls"]["glb"]) # baixe em até 3 dias
else:
print("A tarefa não foi concluída:", t.get("task_error", {}).get("message"))Use o SDK oficial do Replicate com o endereço https://jukepix.centopeia.io/replicate/v1.
Os modelos liberados para sua empresa, com preços em reais, ficam na aba Modelos do
painel. Envie arquivos de entrada como URL ou data URI; webhooks não são aceitos, então
consulte a predição ou use o cabeçalho Prefer: wait.
import os
import urllib.request
import replicate
client = replicate.Client(
api_token=os.environ["CENTOPEIA_API_KEY"],
base_url="https://jukepix.centopeia.io/replicate",
)
links = client.run(
"black-forest-labs/flux-schnell",
input={"prompt": "Uma centopeia verde lendo um livro, ilustração"},
use_file_output=False, # devolve os links dos arquivos gerados
)
urllib.request.urlretrieve(links[0], "imagem.webp") # o link expira: guarde o arquivo
print("Imagem salva em imagem.webp")Crie a predição, guarde o id e espere o resultado. Os arquivos gerados ficam disponíveis
por 1 hora: baixe e guarde no seu armazenamento.
import os
import replicate
client = replicate.Client(
api_token=os.environ["CENTOPEIA_API_KEY"],
base_url="https://jukepix.centopeia.io/replicate",
)
# Tarefas longas (vídeo, transcrição): crie, guarde o id e espere o resultado.
predicao = client.models.predictions.create(
model="bytedance/seedance-1-lite",
input={"prompt": "Drone sobrevoando uma floresta ao amanhecer", "duration": 5},
)
predicao.wait()
print(predicao.status, predicao.output) # links dos arquivos: baixe em até 1 horaUse o identificador do modelo na chamada. Os parâmetros de input são os mesmos
da página de cada modelo no Replicate. Os liberados para sua empresa, com preço em reais, aparecem
na aba Modelos do painel.
image-to-3dmulti-image-to-3d Modelo 3D (GLB, FBX, OBJ, USDZ) a partir de uma ou várias fotosblack-forest-labs/flux-schnellgoogle/nano-bananabytedance/sdxl-lightning-4step Gerar e editar imagens a partir de textowan-video/wan-2.2-i2v-fastprunaai/p-videobytedance/seedance-1-lite Vídeos curtos a partir de texto ou imagemmeta/meta-llama-3-8b-instructmeta/meta-llama-3-70b-instructmeta/meta-llama-3-8b Conversa e geração de texto com Llama 3nightmareai/real-esrgantencentarc/gfpgansczhou/codeformer Aumentar a resolução e recuperar rostos851-labs/background-removerlucataco/remove-bgcjwbw/rembg Recortar o objeto principal de uma imagemopenai/whispervaibhavs10/incredibly-fast-whispervictor-upmeet/whisperx Fala para texto, com marcação de tempo e falantesminimax/speech-02-turbojaaari/kokoro-82mlucataco/xtts-v2 Texto para áudio com vozes naturaisQualquer ferramenta que aceite um endereço base personalizado para OpenAI ou Anthropic funciona com a CentopeIA.
from langchain_openai import ChatOpenAI
from langchain_anthropic import ChatAnthropic
gpt = ChatOpenAI(
model="gpt-5.5",
api_key=CHAVE_CENTOPEIA,
base_url="https://jukepix.centopeia.io/openai/v1",
max_tokens=500,
)
claude = ChatAnthropic(
model="claude-sonnet-5-5",
api_key=CHAVE_CENTOPEIA,
base_url="https://jukepix.centopeia.io/anthropic",
max_tokens=1024,
)
print(claude.invoke("Olá!").content)import { createOpenAI } from "@ai-sdk/openai";
import { createAnthropic } from "@ai-sdk/anthropic";
import { generateText } from "ai";
const openai = createOpenAI({
apiKey: process.env.CENTOPEIA_API_KEY,
baseURL: "https://jukepix.centopeia.io/openai/v1",
});
const anthropic = createAnthropic({
apiKey: process.env.CENTOPEIA_API_KEY,
baseURL: "https://jukepix.centopeia.io/anthropic/v1",
});
const { text } = await generateText({
model: anthropic("claude-sonnet-5-5"),
maxOutputTokens: 500,
prompt: "Olá!",
});O servidor MCP nativo da CentopeIA implementa a especificação oficial Model Context Protocol (transporte HTTP/SSE). Com ele, assistentes de código e chat acessam os modelos da plataforma (texto, imagem, embeddings, vídeo, áudio e 3D), consultam preços em tempo real, gerenciam chaves, acompanham o saldo da empresa e operam com as permissões do seu papel. Você também pode conectar seus próprios agentes, pipelines ou projetos externos usando qualquer cliente MCP oficial.
https://jukepix.centopeia.io/mcpNo Claude: Configurações, Conectores, Adicionar conector personalizado. No ChatGPT: Configurações, Aplicativos e conectores, modo desenvolvedor, novo conector com autenticação OAuth. Cole o endereço acima e autorize pelo navegador com um clique.
claude mcp add --transport http centopeia https://jukepix.centopeia.io/mcp{
"mcpServers": {
"centopeia": {
"url": "https://jukepix.centopeia.io/mcp"
}
}
}{
"servers": {
"centopeia": {
"type": "http",
"url": "https://jukepix.centopeia.io/mcp"
}
}
}Quando conectado via MCP, seu assistente ou aplicação ganha acesso a estas ferramentas padronizadas:
gerar_texto, gerar_imagem, gerar_embeddings, chamar_api, criar_tarefa_midia, consultar_tarefa_midia, cancelar_tarefa_midialistar_modelos, detalhes_do_modelo, exemplo_de_codigo, documentacao, diagnosticar_erro, verificar_configuracaolistar_chaves, criar_chave, ajustar_chave, revogar_chavever_saldo, ver_extrato, ver_consumo, recarregar_pix, pix_fixo, ajustar_teto_diariolistar_equipe, convidar_membro, alterar_membro, remover_membroPara scripts, agentes customizados ou ferramentas sem login pelo navegador, gere um token pessoal sk-ctp-mcp-... no painel e envie no cabeçalho Authorization: Bearer <token>.
Envie a chave em qualquer um dos cabeçalhos. Os SDKs fazem isso por você.
Authorization: Bearer sk-ctp-... x-api-key: sk-ctp-...Cada requisição pode ter até 32 MB.
PrivacidadeNão guardamos o conteúdo das suas mensagens. Registramos apenas o modelo e os tokens usados, para a cobrança.
/openai/v1/chat/completions Conversas e completions/openai/v1/responses Responses API/openai/v1/embeddings Vetores para busca e RAG/openai/v1/images/generations Geração de imagens por texto/openai/v1/models Modelos disponíveis/anthropic/v1/messages Mensagens com o Claude/anthropic/v1/messages/count_tokens Contagem de tokens/anthropic/v1/models Modelos disponíveis/meshy/openapi/v1/image-to-3d Modelo 3D a partir de uma imagem/meshy/openapi/v1/multi-image-to-3d Modelo 3D a partir de 1 a 4 fotos/meshy/openapi/v1/image-to-3d/{id} Situação e arquivos da tarefa/replicate/v1/models/{dono}/{nome}/predictions Imagem, vídeo, áudio e modelos abertos/replicate/v1/predictions/{id} Situação e resultado/replicate/v1/predictions/{id}/cancel Cancelar/mcp Servidor Model Context Protocol (OAuth 2.1 e token pessoal)Recursos que armazenam dados no provedor, como arquivos, batches e respostas salvas, não estão disponíveis. Assim, nada do que você envia fica guardado fora da sua aplicação. Em mídia e 3D, cada tarefa só pode ser consultada pela empresa que a criou, e os resultados expiram (1 hora para mídia, 3 dias para 3D).
Se a sua chave ou empresa tem um limite mensal, cada chamada é conferida antes de chegar ao modelo. Para isso, alguns cuidados simples:
max_completion_tokens no Chat Completions, max_output_tokens na Responses API e max_tokens no Claude.messages ou input, em vez de previous_response_id ou conversation.size e quality explícitos e até uma imagem por chamada
em streaming.402.O valor máximo da chamada é reservado no início e ajustado ao consumo real no fim. Você nunca paga pela reserva, só pelo que foi usado.
Os erros seguem o mesmo formato de cada provedor, então os SDKs lançam as exceções que você já trata hoje.
import openai
try:
resposta = client.chat.completions.create(...)
except openai.AuthenticationError:
print("Confira a chave CentopeIA configurada.")
except openai.PermissionDeniedError as erro:
print(erro.message) # ex.: saldo de créditos ou limite da chave atingido
except openai.RateLimitError:
print("Muitas chamadas ao mesmo tempo. Tente de novo em instantes.")Se uma precisar sair de uso, só ela é revogada. As outras seguem funcionando.
Nunca coloque a chave no navegador ou em apps mobile. Chame a API a partir do seu backend.
Guarde a chave em variáveis ou em um gerenciador de segredos, fora do repositório.
Definir o máximo de tokens deixa o custo previsível e as respostas mais rápidas.
Imagens, vídeos, áudios e modelos 3D expiram. Baixe o arquivo assim que a tarefa terminar.
Entre na lista de espera. Nosso time cadastra a sua empresa e entrega as chaves.
Modelos publicados, parâmetros e exemplos compartilham a mesma revisão. Seu painel mostra os modelos habilitados para sua empresa.
O saldo permanece em reais. O preço é fixado no início de cada chamada.
Recargas permanecem em reais. Novas chamadas usam a referência USDT/BRL e o preço vigentes na admissão. A cotação fica preservada até a conclusão, inclusive em tarefas demoradas. Consulte o extrato no painel.