Como usar a API do Claude Fable 5.2 e conferir respostas e custos
Conecte o Fable 5.2 com o ID exato, valide respostas e histórico de ferramentas e calcule custos sem confundir suporte no catálogo com recursos testados.
Para integrar o Fable 5.2, use o ID exato do modelo, faça uma pequena requisição e confira o texto retornado e o motivo de encerramento antes de adicionar ferramentas ou migrar conversas existentes. Na Ofox, o ID do catálogo é anthropic/claude-fable-5.2; na Claude API, é claude-fable-5-2. Esses identificadores pertencem a configurações de provedores diferentes.
Este guia separa o contrato documentado do modelo, o catálogo atual da Ofox e as verificações da aplicação. A documentação, o catálogo e um pequeno teste de API com protocolo nativo foram verificados em 10 de novembro de 2026. O corpo da requisição cURL abaixo foi testado; os exemplos de SDK ilustram o padrão equivalente de integração e não foram executados separadamente contra o serviço. A Ofox publica este blog e fornece o gateway descrito aqui.
Escolha o endpoint junto com o ID exato
| Acesso | Identificador do modelo | Endpoint da requisição |
|---|---|---|
| Claude API | claude-fable-5-2 | https://api.anthropic.com/v1/messages |
| Ofox, protocolo Anthropic | anthropic/claude-fable-5.2 | https://api.ofox.ai/anthropic/v1/messages |
| Ofox, Chat Completions compatível com OpenAI | anthropic/claude-fable-5.2 | https://api.ofox.ai/v1/chat/completions |
A visão geral oficial informa janela de contexto de 1 milhão de tokens e saída máxima de 128 mil tokens. São limites, não tamanhos padrão adequados para uma requisição. Comece com uma entrada curta, sem dados sensíveis, e um limite de saída definido.
A página do modelo na Ofox e o catálogo público listam os protocolos Anthropic e OpenAI, com aws_bedrock como tipo de provedor atualmente listado para o 5.2. Um rótulo de protocolo não comprova que todos os recursos beta da Anthropic são repassados em todas as rotas. Teste cada recurso antes de tornar sua aplicação dependente dele.
Um erro de versão fácil de cometer: no registro datado do catálogo, claude-fable-latest ainda é um alias da entrada 5.1. Use o ID exato do 5.2 nos testes de implantação e registre o modelo retornado e o ID da requisição. Não presuma que um alias mudou só porque uma nova versão foi lançada.
Envie uma pequena requisição nativa
Crie uma chave de API seguindo as instruções de autenticação da Ofox e carregue-a em OFOX_API_KEY pelo seu gerenciador de segredos habitual. Execute o código em um servidor ou computador local de desenvolvimento, nunca em código público entregue ao navegador. O corpo abaixo omite deliberadamente sampling, seleção forçada de ferramentas e controles beta opcionais.
curl --fail-with-body --max-time 180 \
https://api.ofox.ai/anthropic/v1/messages \
-H "x-api-key: $OFOX_API_KEY" \
-H 'anthropic-version: 2023-06-01' \
-H 'content-type: application/json' \
--data '{
"model": "anthropic/claude-fable-5.2",
"max_tokens": 4096,
"output_config": {"effort": "low"},
"messages": [{
"role": "user",
"content": "A synthetic order contains 3 units at USD 12 each. Return the total and one calculation line. Do not use tools."
}]
}' > response.json
O resultado esperado é US$ 36. A resposta real retornou esse valor e o cálculo, com HTTP 200, stop_reason: "end_turn", 46 tokens de entrada e 32 de saída. Essa única requisição sintética verifica apenas esse caso, não todos os fluxos de produção. Inspecione seu próprio response.json antes de continuar. Sucesso HTTP, por si só, não comprova que o modelo respondeu, cumpriu a tarefa ou terminou dentro do limite de saída.
Este pequeno script de inspeção evita presumir que o primeiro bloco de conteúdo contém texto:
import json
from pathlib import Path
response = json.loads(Path("response.json").read_text())
if "error" in response:
raise RuntimeError(response["error"])
text = "\n".join(
block.get("text", "") for block in response.get("content", [])
if block.get("type") == "text"
)
print("model:", response.get("model"))
print("stop_reason:", response.get("stop_reason"))
print("usage:", response.get("usage"))
print(text)
if response.get("stop_reason") != "end_turn" or not text.strip():
raise SystemExit("Not a completed text answer; inspect before continuing.")
Para esse teste sem ferramentas, exija uma resposta textual concluída e confira o cálculo manualmente. Em uma tarefa de produção, substitua a revisão manual por um validador independente adequado à saída. Buscar apenas a substring 36 não basta: “o total não é 36” também contém esse número.
A documentação de Messages nativo apresenta o endpoint e o formato de autenticação. Se a aplicação usar Chat Completions, mantenha os formatos desse protocolo para messages, respostas e resultados de ferramentas em todo o fluxo. Não cole blocos nativos tool_result em uma conversa no formato OpenAI supondo que o adaptador reconstruirá o estado original.
Reserve espaço para o raciocínio e a resposta
O Fable 5.2 usa raciocínio adaptativo sempre ativo. output_config.effort controla o esforço; não altera o preço de cada token. O teste pequeno usa low para limitar uma tarefa trivial. Isso não é uma recomendação para reparos difíceis em repositórios ou análises em várias etapas.
Para trabalho mais exigente, comece pelo padrão documentado high e compare níveis menores nos seus casos de aceitação. A orientação de effort da Anthropic recomenda reservar níveis maiores para tarefas que se beneficiem desse esforço. Meça tokens totais e conclusão, não apenas a qualidade aparente da redação.
max_tokens inclui o raciocínio e a saída da resposta. Um limite pequeno pode produzir um bloco de thinking seguido de stop_reason: "max_tokens", sem resposta visível. Isso é diferente de um erro 400 na requisição. Inspecione o motivo de encerramento e aumente o limite ou reduza o esforço de forma deliberada. Não repita cegamente o mesmo limite várias vezes para depois tratar o gasto como comparação de preços dos modelos.
Faça streaming sem perder a mensagem final
Ao usar o SDK oficial de Python, preserve a mensagem montada ao fim do streaming. O exemplo abaixo é um modelo para um SDK recente com o campo documentado output_config. Registre e fixe a versão do SDK validada na sua aplicação.
import os
import anthropic
client = anthropic.Anthropic(
api_key=os.environ["OFOX_API_KEY"],
base_url="https://api.ofox.ai/anthropic",
max_retries=0,
timeout=180.0,
)
with client.messages.stream(
model="anthropic/claude-fable-5.2",
max_tokens=4096,
output_config={"effort": "low"},
messages=[{"role": "user", "content": "Calculate 3 times 12."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
final_message = stream.get_final_message()
print(final_message.stop_reason, final_message.usage)
O stream de texto serve para exibição. Ele não é a mensagem completa que deve ser salva para uma etapa posterior com ferramentas. Se a conexão cair antes do término, marque a tentativa como incompleta; não salve uma transcrição parcial visível como uma resposta válida do assistente. Veja no diagnóstico de assinaturas de thinking, em inglês os campos que um coletor apenas de texto pode perder.
Adicione primeiro uma ferramenta somente de leitura
Uma boa primeira ferramenta retorna um registro sintético de estoque. Defina lookup_stock com um esquema de entrada que exija uma SKU como string, configure tool_choice como auto e peça ao modelo que confira a SKU DEMO-001. Valide o nome da ferramenta e os argumentos gerados pelo modelo com base na sua lista de permissões antes de executá-la.
Para uma alternativa completa e executável, use o programa de consulta de estoque somente de leitura com o módulo de checkpoint. Essa versão define read_stock para as três linhas de teste e inclui requisição inicial, validação da ferramenta, mensagem com o resultado real, continuação e verificação final da transferência. As instruções passo a passo separam verificações locais da execução explicitamente paga.
No protocolo nativo, acrescente o conteúdo inteiro do assistente exatamente como foi retornado. Depois, acrescente uma mensagem do usuário com o resultado real e o ID correspondente da ferramenta:
# response is the completed SDK response; tool is one validated tool_use block.
messages.append({
"role": "assistant",
"content": [b.model_dump(exclude_none=True) for b in response.content],
})
messages.append({"role": "user", "content": [{
"type": "tool_result",
"tool_use_id": tool.id,
"content": '{"sku":"DEMO-001","available":7,"source":"synthetic fixture"}'
}]})
Esse trecho ilustra o formato da continuação, não um executor completo de múltiplas ferramentas. Se houver várias chamadas, trate cada ID e reporte o resultado real de cada uma. Uma falha exige um resultado de erro, não um registro fictício de sucesso. O guia de tool_result ausente, em inglês explica falhas de associação; o guia de atualização para 5.2 cobre restrições específicas da versão.
Não trate auto como “a ferramenta obrigatoriamente será executada”. Sua aplicação deve detectar uma resposta somente textual quando a tarefa exige uma consulta e se recusar a marcar essa tarefa como concluída. Comece com dados de teste somente de leitura para que repetições durante a depuração não enviem pedidos ou mensagens em duplicidade.
Calcule a cobrança separando as categorias de tokens
Tarifas padrão em USD por milhão de tokens, verificadas em 10 de novembro:
| Categoria | Tarifa publicada da Claude API | Preço de lista do catálogo Ofox |
|---|---|---|
| Entrada sem cache | $8 | $8 |
| Saída | $40 | $40 |
| Gravação de cache por 5 minutos | $10 | $10 |
| Gravação de cache por 1 hora | $16 | $16 |
| Leitura de cache | $0.20 | $0.20 |
Fontes: preços da Anthropic, a página do modelo na Ofox e nosso registro datado do catálogo. O repositório da Ofox define esses campos em USD por token; a tabela multiplica os valores por um milhão. O código do repositório lê dados dinâmicos dos modelos, portanto o código Git sozinho não é uma tabela de preços atual. O registro do 5.2 não tem um objeto separado provider_price: faltam dados do preço do fornecedor, o que não significa custo zero nem desconto confirmado.
Para uma requisição ilustrativa sem cache com 20.000 tokens de entrada e 4.000 tokens de saída faturados:
20,000 × $8 / 1,000,000 + 4,000 × $40 / 1,000,000 = $0.32
Para uma requisição ilustrativa com 19.000 tokens lidos do cache, 1.000 tokens de entrada sem cache e a mesma saída:
19,000 × $0.20 / 1,000,000 + 1,000 × $8 / 1,000,000
+ 4,000 × $40 / 1,000,000 = $0.1718
O segundo exemplo exclui a requisição anterior que gravou o cache. Some essa requisição ao estimar uma sessão inteira. Use categorias de entrada mutuamente exclusivas e nunca some tokens de gravação de cache novamente à entrada sem cache. Inclua saída de raciocínio faturada, novas tentativas e ferramentas cobradas separadamente. São cálculos, não faturas observadas. Tarifas de batch ou modo rápido exigem verificação própria de elegibilidade e roteamento; não foram aplicadas aqui.

Captura em inglês do nosso registro de teste renderizado localmente, preenchido com respostas reais da API. Não é uma captura da interface do produto Ofox.
Decida se a integração está pronta
Nossos testes adicionais com protocolo nativo concluíram uma resposta textual por streaming e um ciclo completo de ferramenta somente de leitura. Dois testes com parâmetros deliberadamente incompatíveis também retornaram 200: um enviou thinking: {"type":"disabled"}, e o outro forçou lookup_stock enquanto o prompt pedia um cálculo sem ferramentas. O segundo retornou texto sem chamada de ferramenta. Nenhuma resposta comprova que esses controles funcionaram. Os resultados específicos da rota no artigo sobre 400 explicam por que as verificações de aceitação da aplicação continuam necessárias.
Antes de migrar tráfego, exija quatro resultados: requisição textual concluída; stream completo; ciclo de ferramenta somente de leitura com IDs corretos; e sessão existente de múltiplas etapas restaurada sem alteração de histórico. Guarde IDs das requisições, modelo exato, effort, uso, motivo de encerramento, versão do SDK e resultado de aceitação de cada caso.
Para um 400, diagnostique o corpo em vez de repetir sem alterações. Em sobrecarga, use tentativas limitadas e consulte o guia de Claude 529, em inglês. Para trocar de modelo, preserve fatos da aplicação separadamente do raciocínio opaco seguindo o tutorial de checkpoint. A comparação entre 5.2, 5.1 e Opus 5.5 apoia a decisão de custo e migração.
Documentação relacionada: autenticação da API, Messages nativo e roteamento de provedores. Confirme os requisitos de retenção com o serviço que efetivamente processará seus dados: a Anthropic documenta exigências específicas para o 5.2, e um rótulo de suporte a protocolo da Ofox não é garantia de privacidade.


