# SDKs

> Use os SDKs oficiais da OpenAI e da Anthropic. Troque a URL base e a chave.


A NotHoly não tem SDK próprio. Os SDKs oficiais da OpenAI e da Anthropic funcionam depois que você muda duas configurações.

| SDK | URL base | Chave |
|---|---|---|
| OpenAI (Python, JavaScript, Go e outros) | `https://api.notholy.com/v1` | `NOTHOLY_API_KEY` como chave de API |
| Anthropic (Python, JavaScript) | `https://api.notholy.com` | `NOTHOLY_API_KEY` como chave de API |

## SDK da 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 da 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 : '');
```

## Próximos passos

- [Migração da OpenAI e da Anthropic](/pt-br/references/migration)
- [Integrações](/pt-br/integrations/claude-code)
