# Migration from OpenAI and Anthropic

> Move existing code to NotHoly by changing the base URL, the key and the model ID.


| You use | Change |
|---|---|
| OpenAI SDK | `base_url="https://api.notholy.com/v1"`, `api_key=NOTHOLY_API_KEY`, `model="notholy-specter"` |
| Anthropic SDK | `base_url="https://api.notholy.com"`, `api_key=NOTHOLY_API_KEY`, `model="notholy-specter"` |
| Raw HTTP | Same paths under `https://api.notholy.com/v1` |

```bash test
curl https://api.notholy.com/v1/chat/completions \
  -H "Authorization: Bearer $NOTHOLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "notholy-specter", "messages": [{"role": "user", "content": "ping"}]}'
```

## What behaves differently

- Responses is stateless. `previous_response_id` returns 400.
- `cache_control` is ignored. Caching is automatic.
- PDF `document` sources in Messages return 400.
- Server tools are not run. Only your function tools.
- `n` must be 1.
- There is no embedding model yet.
- Batch, fine-tuning, assistants, audio and image generation endpoints do not exist.

## Next

- [SDKs](/en/getting-started/sdks)
