# SDKs

> Usa los SDK oficiales de OpenAI y Anthropic. Cambia la URL base y la clave.


NotHoly no tiene un SDK propio. Los SDK oficiales de OpenAI y Anthropic funcionan con solo cambiar dos ajustes.

| SDK | URL base | Clave |
|---|---|---|
| OpenAI (Python, JavaScript, Go, otros) | `https://api.notholy.com/v1` | `NOTHOLY_API_KEY` como clave de API |
| Anthropic (Python, JavaScript) | `https://api.notholy.com` | `NOTHOLY_API_KEY` como clave de API |

## SDK de OpenAI

```python test
import os
from openai import OpenAI

client = OpenAI(base_url="https://api.notholy.com/v1", api_key=os.environ["NOTHOLY_API_KEY"])

r = client.chat.completions.create(model="notholy-specter", messages=[{"role": "user", "content": "What is CWE-79?"}])
print(r.choices[0].message.content)
```

## SDK de Anthropic

```python test
import os
from anthropic import Anthropic

client = Anthropic(base_url="https://api.notholy.com", api_key=os.environ["NOTHOLY_API_KEY"])
m = client.messages.create(
    model="notholy-specter",
    max_tokens=512,
    messages=[{"role": "user", "content": "What is CWE-89?"}],
)
print(m.content[0].text)
```

```js test
import Anthropic from '@anthropic-ai/sdk';

const client = new Anthropic({ baseURL: 'https://api.notholy.com', apiKey: process.env.NOTHOLY_API_KEY });
const m = await client.messages.create({
  model: 'notholy-specter',
  max_tokens: 512,
  messages: [{ role: 'user', content: 'What is CWE-89?' }],
});
console.log(m.content[0].type === 'text' ? m.content[0].text : '');
```

## Siguientes pasos

- [Migración desde OpenAI y Anthropic](/es/references/migration)
- [Integraciones](/es/integrations/claude-code)
