> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cruq.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Models & providers

> Bring your own provider connection; agents address models by a fully-qualified name.

Cruq AI does not resell model access. You connect **your own** provider
credential in **Model Gateway**, and every run - interactive, scheduled, or eval

* bills to it. That is also why the plans are flat subscriptions rather than
  credits.

## Provider kinds

| Kind                | Use it for                                                                |
| ------------------- | ------------------------------------------------------------------------- |
| `openrouter`        | Hundreds of models behind one credential. The usual starting point.       |
| `openai`            | OpenAI directly.                                                          |
| `openai_compatible` | Any endpoint speaking the OpenAI API - vLLM, Together, a private gateway. |

Keys are encrypted at rest and are never returned by the API or shown again
after they are stored.

## Fully-qualified model names

An agent node's model is written `provider/model`. The **first segment selects
the provider connection**; everything after it is passed through to that
provider verbatim.

```
openrouter/openai/gpt-4o-mini
openrouter/anthropic/claude-3.5-sonnet
openai/gpt-4o
```

That means an OpenRouter model id keeps its own vendor prefix and gains one:
`anthropic/claude-3.5-sonnet` becomes `openrouter/anthropic/claude-3.5-sonnet`.
Writing it without the `openrouter/` prefix is the most common mistake - the
first segment would resolve no provider, and the run fails before it starts.

<Note>
  OpenRouter's floating aliases keep their `~` - for example
  `openrouter/~deepseek/deepseek-v4-flash-latest`. The `~` is part of the model
  id, not a typo.
</Note>

## Cost and usage

Every run records prompt tokens, completion tokens, total tokens, cost, and
duration from the provider's own usage block. These are **nullable**: null means
the provider reported no usage, which is "not measured" and not "measured as
free". The CLI and API preserve that distinction rather than showing `$0`.

See [Observability](/docs/concepts/observability) for where those numbers
surface, and [Evals](/docs/concepts/evals) for comparing models on them.
