Início / Aprenda / Use o Claude com o SDK da OpenAI: endpoint compatível com OpenAI, streaming, ferramentas e limites
SDK da OpenAI + Claude. Dois conectores físicos de formatos complementares unindo uma janela de código a outra, uma metáfora clara para a compatibilidade de SDKs.

Use Claude com o SDK da OpenAI: endpoint compatível com OpenAI, streaming, ferramentas e limites

O código escrito para o SDK da OpenAI pode chamar o Claude sem precisar ser reescrito: aponte base_url para o /v1do gateway, use uma chave do gateway e um ID de modelo Claude. O endpoint aceita solicitações Chat Completions, transmite em streaming no mesmo formato e oferece suporte a chamadas de funções. Alguns recursos do Claude só existem no formato nativo da Anthropic; a última seção explica quando mudar.

Informações sobre o endpoint

Item Valor
URL basehttps://aiprimetech.io/v1
Endpoint de chatPOST https://aiprimetech.io/v1/chat/completions
Lista de modelosGET https://aiprimetech.io/v1/models
AutenticaçãoAuthorization: Bearer <key>; x-api-key também é aceito
ModelosIDs do Claude, como claude-sonnet-5; IDs do GPT com uma chave do grupo Codex

Python

terminal
pip install openai
app.py
import os
from openai import OpenAI

client = OpenAI(base_url="https://aiprimetech.io/v1", api_key=os.environ["AIPRIME_API_KEY"])

resp = client.chat.completions.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain idempotency keys in two sentences."},
    ],
)
print(resp.choices[0].message.content)
print(resp.usage)

base_url deve terminar em /v1: o SDK acrescenta /chat/completions ao final. Sem /v1 a solicitação chega ao site e retorna HTML; com /v1 duas vezes, retorna 404 page not found.

Node.js

app.mjs
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://aiprimetech.io/v1", apiKey: process.env.AIPRIME_API_KEY });

const resp = await client.chat.completions.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Write a haiku about retries." }],
});
console.log(resp.choices[0].message.content);

Transmissão

stream.py
stream = client.chat.completions.create(
    model="claude-sonnet-5",
    max_tokens=2048,
    stream=True,
    stream_options={"include_usage": True},
    messages=[{"role": "user", "content": "Outline a zero-downtime migration."}],
)
for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage)

Use streaming para respostas longas: uma solicitação sem streaming precisa terminar dentro do tempo limite do cliente; com streaming, isso não é necessário. include_usage adiciona um bloco final com a contagem de tokens. Saiba mais sobre por que isso importa em respostas de LLM com streaming.

Chamada de funções

tools.py
tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

resp = client.chat.completions.create(
    model="claude-sonnet-5", max_tokens=512, tools=tools,
    messages=[{"role": "user", "content": "What is the weather in Paris?"}],
)
call = resp.choices[0].message.tool_calls[0]
print(call.function.name, call.function.arguments)   # get_weather {"city": "Paris"}

A resposta retorna com finish_reason: "tool_calls" e, no estilo OpenAI, tool_calls. Execute a função, acrescente uma mensagem tool com o resultado e o tool_call_idcorrespondente e faça outra chamada, exatamente como com os modelos da OpenAI.

Raciocínio e pensamento

reasoning_effort corresponde à configuração de esforço do Claude e aceita low, medium, high, xhigh ou max. O valor none é rejeitado. Quando o modelo pensa, seu raciocínio chega em um campo separado reasoning_content ao lado de content, de modo que o código que lê message.content continua funcionando sem alterações.

reasoning.py
resp = client.chat.completions.create(
    model="claude-opus-5-5", max_tokens=4096, reasoning_effort="high",
    messages=[{"role": "user", "content": "Find the bug in this function: ..."}],
)

Modelos

ID do modelo Use para
claude-sonnet-5Padrão para programação e trabalho com agentes: rápido, eficiente e de preço intermediário.
claude-opus-5-5Raciocínio mais complexo, grandes refatorações e execuções longas de agentes.
claude-fable-5-1O mais capaz e mais caro; reserve-o para as tarefas mais difíceis.
claude-haiku-4-5Barato e rápido: títulos, resumos, classificação e pequenas etapas.

Use estes IDs exatamente como estão. IDs antigos com data, como claude-3-5-sonnet-20241022 ainda aparecem em algumas listas de modelos, mas não são disponibilizados e retornam um erro de modelo não compatível.

Quando usar a API nativa da Anthropic

O formato da OpenAI abrange chat, streaming, ferramentas e imagens. Use o formato Messages da própria Anthropic, no mesmo gateway, quando precisar de pontos explícitos de delimitação do cache de prompts, blocos de pensamento que são reenviados entre turnos, documentos PDF ou citações. O guia do SDK Python da Anthropic e a guia do Vercel AI SDK abordam essa opção.

Solução de problemas

O que você vê Causa Correção
Um erro de análise de JSON, com a resposta começando por <base_url sem /v1https://aiprimetech.io/v1
404 page not found/v1 duas vezesExatamente um /v1
401 Invalid API keyChave ausente ou incorreta no processoVerifique a variável; cada chave pertence a um gateway
Modelo não compatívelID de modelo antigo com data ou com erro de digitaçãoUse um ID da tabela acima
'none' is not supportedreasoning_effort="none"Use low ou superior, ou omita esse parâmetro
429 Concurrency limit exceeded for userRequisições demais em andamentoLimite o paralelismo; consulte limites de requisições e novas tentativas
Tempo limite excedido em respostas longasSolicitação longa sem streamingUse streaming ou aumente o tempo limite do cliente

Perguntas frequentes

Posso usar o Claude com o SDK da OpenAI?
Sim, por meio de um endpoint compatível com a OpenAI: defina base_url como o endereço /v1 do gateway, use uma chave de API do gateway e um ID de modelo Claude, como claude-sonnet-5. O streaming e as chamadas de função funcionam no formato da OpenAI.
Qual URL base devo usar para o Claude no SDK da OpenAI?
A URL do gateway terminada em /v1, por exemplo, https://aiprimetech.io/v1. O SDK acrescenta /chat/completions.
As chamadas de função funcionam com o Claude por meio do formato da OpenAI?
Sim. Envie tools no formato da OpenAI; o Claude retorna tool_calls com finish_reason definido como tool_calls, e você responde com mensagens de ferramenta, como de costume.
Quando devo usar a API nativa da Anthropic?
Quando precisar de cache explícito de prompts, blocos de pensamento entre turnos, entrada de PDF ou citações. Esses recursos fazem parte do formato Messages da Anthropic.
Comece a usar o Claude em minutos

Obtenha uma chave de API — sem precisar de conta na Anthropic nem de lista de espera.

Obtenha sua chave de API

AI Prime Tech é um gateway de API independente. Não tem afiliação com a Anthropic, não é endossado por ela e não é seu revendedor. Claude e os nomes dos modelos relacionados são marcas comerciais de seus respectivos proprietários.

Mais guias da API do Claude

Como obter uma chave de API do ClaudePreços da API Claude explicadosA maneira mais barata de usar a API do ClaudeCursor ilimitado com a API do ClaudeAcesso ilimitado ao Claude CodeGateway da API do Claude vs. acesso direto à AnthropicModelos Claude explicados: uma comparação entre Claude Opus, Sonnet, Haiku e Fable — todos os modelos da API Claude, nomes e preços dos modelos Anthropic (2026)Pagamento da API do Claude com criptomoedasAcesso à API do Claude sem lista de esperaComo reduzir o uso de tokens do ClaudeCline ilimitado com a API do ClaudeRoo Code ilimitado com a API do ClaudeClaude ilimitado nas IDEs da JetBrainsAider com Claude por meio de um gateway: ANTHROPIC_API_BASE, arquivos de configuração, modo arquiteto e correçõesClaude ilimitado no VS CodeConfiguração do OpenCode para Claude: configuração do opencode.json, modelos e erros comunsHermes Agent com Claude por meio de um gateway: configuração de provedor personalizado, controles de custos e correçõesExecutando OpenClaw ilimitado com ClaudeO que significa uma API compatível com a AnthropicChave de API do Claude Code — ANTHROPIC_API_KEY: como obtê-la, configurá-la e quando usar claude setup-token em seu lugarCustos da API do Claude Code — Preços e como reduzi-losErros da API Claude explicados: erro de servidor 500, sobrecarga 529, limite de requisições 429, requisição inválida 400 — e a correção para cada umComo comprar créditos da API do Claude — e por que um crédito do Claude é melhor do que qualquer oferta de "comprar conta do Claude"API Claude gratuita: existe uma chave de API Claude gratuita e o que realmente é gratuito em 2026?API do Claude vs assinatura Claude Pro/Max — Qual escolherCodex CLI com um provedor personalizado: config.toml, modelos GPT e Claude, extensão para IDE e correçõesConectando Claude ao n8nRoteando LiteLLM para ClaudeUsando Claude no Kilo CodeGitHub Copilot Chat com Claude por meio de um gateway: configuração de Custom Endpoint, modo agente e correçõesConecte o Zed ao Claude por meio do gatewayConecte o Cherry Studio ao ClaudeChatAnthropic no LangChain: importação, base_url, streaming, ferramentas e errosSDK de Python da Anthropic: instale, defina base_url, use streaming e trate errosClaude com o Vercel AI SDK: baseURL de createAnthropic, streaming e correçõesExecute o Factory Droid com o ClaudeA API do Claude Code, explicadaComo integrar a API do Claude à sua aplicaçãoComo obter uso ilimitado do Claude — e por que não existe "Claude Code crackeado"