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

# Quickstart

> Create a key, add credit, and make your first routed request.

Source: https://telluvian.ai/docs/quickstart

## 1. Create an API key

Mint one in [the dashboard](https://telluvian.ai/dashboard/keys). The key is shown **once** and
cannot be recovered afterwards, so store it somewhere safe.

## 2. Add credit

Billing is prepaid and denominated in dollars. A $25 payment adds $25 of API
credit. [Add credit](https://telluvian.ai/dashboard/billing); requests are refused with a `402`
until your balance is positive.

## 3. Send a request

Send `telluvian/gallery-1` and we pick the model. Probing is off by default;
`include_scores: false` makes that choice explicit.

```bash
curl https://api.telluvian.ai/v1/chat/completions \
  -H "Authorization: Bearer $TELLUVIAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "telluvian/gallery-1",
    "messages": [{"role": "user", "content": "When was the Eiffel Tower built?"}],
    "include_scores": false
  }'
```

```python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.telluvian.ai/v1",
    api_key=os.environ["TELLUVIAN_API_KEY"],
)

response = client.chat.completions.create(
    model="telluvian/gallery-1",
    messages=[{"role": "user", "content": "When was the Eiffel Tower built?"}],
    extra_body={"include_scores": False},
)

print(response.choices[0].message.content)
print(response.model)   # the model we picked
```

```typescript
import OpenAI from 'openai';

const client = new OpenAI({
  baseURL: 'https://api.telluvian.ai/v1',
  apiKey: process.env.TELLUVIAN_API_KEY,
});

const response = await client.chat.completions.create({
  model: 'telluvian/gallery-1',
  messages: [{ role: 'user', content: 'When was the Eiffel Tower built?' }],
  include_scores: false,
} as OpenAI.ChatCompletionCreateParamsNonStreaming & { include_scores: boolean });

console.log(response.choices[0].message.content);
console.log(response.model);   // the model we picked
```

You can also name a model yourself. Any id from `GET /v1/models` works in place
of `telluvian/gallery-1`, and the rest of the request is identical.

## 4. Add verification

Set `include_scores: true` to request per-token hallucination scores. A token
whose probe reading is unavailable has a `null` score.

```bash
curl https://api.telluvian.ai/v1/chat/completions \
  -H "Authorization: Bearer $TELLUVIAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
  "model": "telluvian/gallery-1",
  "messages": [
    {
      "role": "user",
      "content": "When was the Eiffel Tower built?"
    }
  ],
  "include_scores": true
}'
```

```python
response = client.chat.completions.create(
    model="telluvian/gallery-1",
    extra_body={"include_scores": True},
    messages=[{"role": "user", "content": "When was the Eiffel Tower built?"}],
)

print(response.scores)   # {"hallucination": [0.03, 0.01, 0.44, ...]}
print(response.tokens)   # the tokens those scores line up with
```

Verification adds $1.00 per 1M completion tokens. See [Reading the
scores](https://telluvian.ai/docs/scores.md) for what the numbers mean.

> **Which model?**
>
> `GET /v1/models` lists everything you can call, with its current price. If you
> would rather not choose, [Gallery](https://telluvian.ai/docs/gallery.md) picks for you, and [Model
> Select](https://telluvian.ai/docs/model-select.md#the-controls) has the controls that shape the choice: a quality bar and an allowlist. The latency control is currently ignored.
