Hanzo AI

Integrations

Point any agent framework at Hanzo. One host, one key, two lines — and the exact parameter name for each of sixteen frameworks.

An agent framework is the caller. It is not a service you connect to, so there is nothing to authorize and nothing to register. Every framework here accepts a base URL and a key, which makes pointing one at Hanzo two lines.

The parameter has four spellings — baseURL, base_url, api_base, and a few that take neither. Picking the wrong one is silent: the framework keeps calling whatever host it called before, and the first sign is a bill somewhere else.

The contract

Host. https://api.hanzo.ai. The document declares one server and that is it.

Base URL. https://api.hanzo.ai/v1 for every client that appends /chat/completions to what you hand it, which is all of them but one. The Claude Agent SDK appends /v1/messages itself, so it takes the bare host.

Key. Authorization: Bearer sk-.... A framework's apiKey or api_key parameter sets that header. Tenancy comes from the key — sk- resolves to a user, pk- to an org — so there is no header to add and no id to pass. Where keys come from →

Routes. The OpenAI shape and the Anthropic shape, on the one host:

RouteReached by
POST /v1/chat/completionswhere every snippet below lands, but one
POST /v1/responsesPydantic AI, the OpenAI Agents SDK, Agno and the Vercel AI SDK, each on a sibling constructor
POST /v1/messagesthe Claude Agent SDK
POST /v1/embeddingsretrieval, wherever a framework indexes

Each page below says which one its snippet lands on.

Picking a model

GET /v1/models is the list, and it answers without a credential:

curl -s https://api.hanzo.ai/v1/models | jq -r '.data[].id'

Pass the id through verbatim as the framework's model name — zen5, claude-sonnet-4-6, gpt-5.5. Every record carries id, owned_by and premium; pricing and context_window are on nearly all of them; supports_tools and supports_vision on a handful. An absent field is undeclared, not false.

Some frameworks want those same facts restated in their own constructor — AutoGen's model_info, LlamaIndex's is_chat_model — and the page says so where it applies.

Tools

Hanzo's own tools are one MCP endpoint — POST https://api.hanzo.ai/v1/mcp, streamable HTTP, the same bearer key. Every framework below reaches it; fifteen own an MCP client, and DSPy converts another SDK's tools into its own. Each page shows the wiring. The tool catalogue →

The frameworks

FrameworkLanguageWhat you setWhere
AgnoPythonbase_urlOpenAILike
AutoGenPythonbase_urlOpenAIChatCompletionClient
Claude Agent SDKTypeScript, PythonANTHROPIC_BASE_URLthe environment
Cloudflare AgentsTypeScriptbaseURLnew OpenAI()
CrewAIPythonbase_urlLLM
DSPyPythonapi_basedspy.LM
Google ADKPythonapi_baseLiteLlm
LangGraphPythonbase_urlChatOpenAI
Lettaanybase URL and keythe /connect flow
LlamaIndexPythonapi_baseOpenAILike
MastraTypeScripturlthe agent's model
OpenAI Agents SDKPythonbase_urlAsyncOpenAI
Pydantic AIPythonbase_urlOpenAIProvider
Semantic Kernel.NET, Pythonendpoint, async_clientAddOpenAIChatCompletion
smolagentsPythonapi_baseOpenAIModel
Vercel AI SDKTypeScriptbaseURLcreateOpenAICompatible

How is this guide?