Skip to Content
APIRoteamento de provedores

Roteamento de provedores

Um modelo costuma ser atendido por vários provedores, e provider.type fixa a requisição em um deles. Quais provedores existem e por que fixar um estão em Roteamento de provedores; esta página é o contrato de campo por protocolo.

Onde fica o campo

O campo não fica no mesmo lugar em todos os protocolos:

Protocolo / endpointCorpo da requisiçãoCabeçalho
OpenAI Chat Completions · POST /v1/chat/completionsextra_body.provider.typeX-OfoxAI-Provider-Type
OpenAI Responses · POST /v1/responsesextra_body.provider.typeX-OfoxAI-Provider-Type
OpenAI Images · POST /v1/images/generationsextra_body.provider.typeX-OfoxAI-Provider-Type
Anthropic Messages · POST /anthropic/v1/messagesextra_body.provider.typeX-OfoxAI-Provider-Type
Gemini generateContent · POST /gemini/v1beta/…ignorado silenciosamenteX-OfoxAI-Provider-Type
Video API · POST /v1/videosprovider.type de nível superior

Entre os modelos de imagem, hoje apenas openai/gpt-image-2 é atendido por mais de um provedor (azure_foundry e openai); os demais são de provedor único, então indicar outro retorna 400 provider_type_unavailable. Note também que os modelos de imagem do Gemini têm dois pontos de entrada — em /v1/images/generations o campo do corpo funciona; no generateContent nativo do Gemini ele é ignorado.

Enviando no corpo da requisição

extra_body precisa ser uma chave literal do corpo JSON, com provider aninhado dentro:

Terminal
curl https://api.ofox.io/v1/chat/completions \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "anthropic/claude-sonnet-5", "messages": [{ "role": "user", "content": "..." }], "extra_body": { "provider": { "type": "bedrock" } } }'

Com os SDKs oficiais da OpenAI, extra_body precisa existir como chave literal no corpo da requisição. O SDK de TypeScript envia exatamente como está escrito no objeto de parâmetros. O argumento extra_body= do SDK de Python mescla o conteúdo no nível superior do corpo, então a chave precisa ser aninhada um nível a mais, ou enviada como cabeçalho.

O protocolo nativo do Gemini ignora extra_body.provider no corpo — a requisição é concluída, a restrição simplesmente não se aplica e não há erro algum. Nesse protocolo, use o cabeçalho abaixo.

Enviando em um cabeçalho

X-OfoxAI-Provider-Type funciona em todos os protocolos de texto, incluindo o Gemini, e serve para integrações que não conseguem alterar o corpo da requisição:

Terminal
curl https://api.ofox.io/gemini/v1beta/models/google/gemini-3.1-flash-lite:generateContent \ -H "Authorization: Bearer $OFOX_API_KEY" \ -H "X-OfoxAI-Provider-Type: vertex" \ -H "Content-Type: application/json" \ -d '{ "contents": [{ "parts": [{ "text": "..." }] }] }'

Onde ambos são suportados, o cabeçalho e o campo do corpo são equivalentes. A Video API não tem forma de cabeçalho — veja Video API · Roteamento de provedores.

Erros

error.typeQuando acontece
invalid_provider_typeO valor não é um nome de provedor: erro de digitação ou grafia descontinuada.
provider_type_unavailableO provedor existe, mas não atende este modelo. A mensagem também lista os que atendem.

Quais provedores você pode indicar

A lista completa, e como descobrir quais provedores atendem um modelo, estão em Roteamento de provedores.

Last updated on