# SDK y frameworks

NezhaGate ofrece tanto una API compatible con OpenAI como una API de Anthropic, así que los SDK oficiales solo necesitan una nueva URL base y clave.

> https://nezhagate.com/es/docs/integrations/sdks

## Dos URL base

| Protocolo | Base URL | Para |
| --- | --- | --- |
| OpenAI | `https://nezhagate.com/v1` | Todos los modelos de chat, además de los endpoints de imagen y vídeo |
| Anthropic | `https://nezhagate.com/anthropic` | Los modelos Claude (el SDK de Anthropic añade `/v1/messages` por su cuenta) |

Los ejemplos leen la clave de la variable de entorno `NEZHAGATE_API_KEY`; nunca pongas una clave directamente en el código.

## SDK de OpenAI

```
import os
from openai import OpenAI

client = OpenAI(base_url="https://nezhagate.com/v1", api_key=os.environ["NEZHAGATE_API_KEY"])
r = client.chat.completions.create(
    model="gpt-5.5",
    messages=[{"role": "user", "content": "Hello"}],
)
print(r.choices[0].message.content)
```

```
import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://nezhagate.com/v1", apiKey: process.env.NEZHAGATE_API_KEY });
const r = await client.chat.completions.create({
  model: "gpt-5.5",
  messages: [{ role: "user", content: "Hello" }],
});
console.log(r.choices[0].message.content);
```

El SDK de OpenAI también lee las variables de entorno `OPENAI_BASE_URL` y `OPENAI_API_KEY`. `client.responses.create(...)` llama a la API Responses, que solo ofrece los modelos GPT.

## SDK de Anthropic

```
import os
from anthropic import Anthropic

client = Anthropic(base_url="https://nezhagate.com/anthropic", api_key=os.environ["NEZHAGATE_API_KEY"])
m = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=1024,
    messages=[{"role": "user", "content": "Hello"}],
)
print(next(b.text for b in m.content if b.type == "text"))
```

```
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({ baseURL: "https://nezhagate.com/anthropic", apiKey: process.env.NEZHAGATE_API_KEY });
const msg = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 1024,
  messages: [{ role: "user", content: "Hello" }],
});
const first = msg.content[0];
if (first.type === "text") console.log(first.text);
```

Apunta `base_url` a `/anthropic`, sin `/v1`. Las variables de entorno `ANTHROPIC_BASE_URL` y `ANTHROPIC_API_KEY` también funcionan.

## LangChain

```
import os
from langchain_openai import ChatOpenAI

llm = ChatOpenAI(
    model="gpt-5.5",
    base_url="https://nezhagate.com/v1",
    api_key=os.environ["NEZHAGATE_API_KEY"],
    use_responses_api=False,
    stream_usage=True,
)
print(llm.invoke("Hello").content)
```

```
import { ChatOpenAI } from "@langchain/openai";

const llm = new ChatOpenAI({
  model: "gpt-5.5",
  apiKey: process.env.NEZHAGATE_API_KEY,
  configuration: { baseURL: "https://nezhagate.com/v1" },
  useResponsesApi: false,
});
console.log((await llm.invoke("Hello")).content);
```

LangChain cambia por su cuenta a la API Responses algunos modelos GPT, o las peticiones con ciertos parámetros; `use_responses_api=False` (`useResponsesApi: false` en JavaScript) lo mantiene en el endpoint de chat. Con una `base_url` personalizada, el streaming no incluye información de uso a menos que pongas `stream_usage=True`.

## Vercel AI SDK

```
import { createOpenAI } from "@ai-sdk/openai";
import { generateText } from "ai";

const gw = createOpenAI({ baseURL: "https://nezhagate.com/v1", apiKey: process.env.NEZHAGATE_API_KEY });
const { text } = await generateText({ model: gw.chat("gpt-5.5"), prompt: "Hello" });
console.log(text);
```

Desde AI SDK 5, `gw("model-id")` usa la API Responses; `gw.chat("model-id")` usa el endpoint de chat y funciona con todos los modelos. Con `@ai-sdk/anthropic`, pon baseURL en `https://nezhagate.com/anthropic/v1` (con `/v1`).

## Errores habituales

**404 from the OpenAI SDK**

A `base_url` le falta `/v1`; debería ser `https://nezhagate.com/v1`.

**404 from the Anthropic SDK**

`base_url` termina en `/v1`, así que las peticiones van a `/anthropic/v1/v1/messages`. Termínala en `/anthropic`.

**A non-GPT model fails through a framework**

Puede que el framework haya cambiado a la API Responses, que solo ofrece los modelos GPT: pon `use_responses_api=False` en LangChain, o usa `gw.chat(...)` en el Vercel AI SDK.
