# Models

> Every public model with its ID, limits and price per million tokens, read from the live catalog.


Send the model ID as `model`. The response echoes the same ID. Every model below is an abliterated open-weight model: its refusal behavior was removed by editing its weights. It can still be wrong, so check its output like any other source.

| Model | ID | Context | Max output | Input | Output | Cached input |
|---|---|---|---|---|---|---|
| NotHoly Specter | `notholy-specter` | 1,048,576 | 131,072 | $1.82 | $3.64 | $0.273 |
| NotHoly Pulse Flash | `notholy-pulse` | 1,048,576 | 131,072 | $0.27 | $1.12 | $0.067 |
| NotHoly Vector Flash 1017 | `notholy-vector` | 1,048,576 | 131,072 | $0.27 | $0.97 | $0.068 |
| NotHoly Wisp Flash | `notholy-wisp` | 1,048,576 | 131,072 | $0.20 | $0.80 | $0.05 |

USD per 1M tokens.

This list is the public catalog: the same models and prices that `GET /v1/models` returns. A model shows up here when it is enabled, and leaves when it is retired. Prices change only through new price versions, and every usage record keeps the version that was applied. Each model has its own page with limits, capabilities and example requests.

## Catalog endpoints

```bash test
curl https://api.notholy.com/v1/models -H "Authorization: Bearer $NOTHOLY_API_KEY"
```

```js test
import OpenAI from 'openai';

const client = new OpenAI({ baseURL: 'https://api.notholy.com/v1', apiKey: process.env.NOTHOLY_API_KEY });

const m = await client.models.retrieve('notholy-specter');
console.log(m.id, m.context_length, m.max_output_tokens);
```

An unknown ID returns `404 model_not_found`. Field by field: [Models API](/en/api/models).

## Notes

- Reasoning levels differ by model. `capabilities.reasoning_efforts` lists the ones a model accepts. See [Reasoning](/en/guides/reasoning).
- There is no embedding model yet. `POST /v1/embeddings` returns `404 model_not_found`.
- A model in maintenance returns `503 model_unavailable`.
