# Integrations

URL: https://docs.hanzo.ai/docs/guides/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 →](https://docs.hanzo.ai/docs/api-keys)

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

| Route                       | Reached by                                                                                    |
| --------------------------- | --------------------------------------------------------------------------------------------- |
| `POST /v1/chat/completions` | where every snippet below lands, but one                                                      |
| `POST /v1/responses`        | Pydantic AI, the OpenAI Agents SDK, Agno and the Vercel AI SDK, each on a sibling constructor |
| `POST /v1/messages`         | the Claude Agent SDK                                                                          |
| `POST /v1/embeddings`       | retrieval, 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:

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

Pass the `id` through verbatim as the framework's model name — `zen6`, `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 →](https://docs.hanzo.ai/docs/mcp-tools)

## The frameworks

| Framework                                                                             | Language           | What you set               | Where                        |
| ------------------------------------------------------------------------------------- | ------------------ | -------------------------- | ---------------------------- |
| [Agno](https://docs.hanzo.ai/docs/guides/integrations/agno)                           | Python             | `base_url`                 | `OpenAILike`                 |
| [AutoGen](https://docs.hanzo.ai/docs/guides/integrations/autogen)                     | Python             | `base_url`                 | `OpenAIChatCompletionClient` |
| [Claude Agent SDK](https://docs.hanzo.ai/docs/guides/integrations/claude-agent-sdk)   | TypeScript, Python | `ANTHROPIC_BASE_URL`       | the environment              |
| [Cloudflare Agents](https://docs.hanzo.ai/docs/guides/integrations/cloudflare-agents) | TypeScript         | `baseURL`                  | `new OpenAI()`               |
| [CrewAI](https://docs.hanzo.ai/docs/guides/integrations/crewai)                       | Python             | `base_url`                 | `LLM`                        |
| [DSPy](https://docs.hanzo.ai/docs/guides/integrations/dspy)                           | Python             | `api_base`                 | `dspy.LM`                    |
| [Google ADK](https://docs.hanzo.ai/docs/guides/integrations/google-adk)               | Python             | `api_base`                 | `LiteLlm`                    |
| [LangGraph](https://docs.hanzo.ai/docs/guides/integrations/langgraph)                 | Python             | `base_url`                 | `ChatOpenAI`                 |
| [Letta](https://docs.hanzo.ai/docs/guides/integrations/letta)                         | any                | base URL and key           | the `/connect` flow          |
| [LlamaIndex](https://docs.hanzo.ai/docs/guides/integrations/llamaindex)               | Python             | `api_base`                 | `OpenAILike`                 |
| [Mastra](https://docs.hanzo.ai/docs/guides/integrations/mastra)                       | TypeScript         | `url`                      | the agent's `model`          |
| [OpenAI Agents SDK](https://docs.hanzo.ai/docs/guides/integrations/openai-agents)     | Python             | `base_url`                 | `AsyncOpenAI`                |
| [Pydantic AI](https://docs.hanzo.ai/docs/guides/integrations/pydantic-ai)             | Python             | `base_url`                 | `OpenAIProvider`             |
| [Semantic Kernel](https://docs.hanzo.ai/docs/guides/integrations/semantic-kernel)     | .NET, Python       | `endpoint`, `async_client` | `AddOpenAIChatCompletion`    |
| [smolagents](https://docs.hanzo.ai/docs/guides/integrations/smolagents)               | Python             | `api_base`                 | `OpenAIModel`                |
| [Vercel AI SDK](https://docs.hanzo.ai/docs/guides/integrations/vercel-ai-sdk)         | TypeScript         | `baseURL`                  | `createOpenAICompatible`     |
