# Быстрый старт (/docs/quickstart)

> Первый запрос к Hubris за 60 секунд. Примеры на cURL, Python, TypeScript и OpenAI SDK.

import { CodeTabs } from '@/components/docs/code-tabs';
import { EnvVar } from '@/components/docs/env-var';
import { EndpointBadge } from '@/components/docs/endpoint-badge';
import { TryItButton } from '@/components/docs/try-it-button';

Подключение к Hubris — это смена одного URL. Если у вас уже есть код под OpenAI API, замените базовый URL на `https://api.hubris.pw/v1` и подставьте ключ Hubris. Всё остальное работает как было.

<TryItButton model="anthropic/claude-haiku-4.5" label="Попробовать прямо сейчас →" />

## 1. Получите API-ключ

[Зарегистрируйтесь](/sign-in) (нужен email и одноразовый код), затем создайте ключ в разделе [API-ключи](/keys). Ключ показывается **один раз** — сохраните его в менеджер паролей или передайте в переменную окружения <EnvVar name="HUBRIS_API_KEY" /> сразу.

## 2. Пополните баланс

В разделе [Биллинг](/billing) пополните баланс через СБП — минимально 100 ₽. Этого хватит на тысячи запросов к мелким моделям.

## 3. Сделайте первый запрос

<EndpointBadge method="POST" path="/v1/chat/completions" />

Замените `sk-gw-...` на ваш ключ:

<CodeTabs
  tabs={[
  {
    value: 'curl',
    label: 'cURL',
    code: `curl -s https://api.hubris.pw/v1/chat/completions \\
-H "Authorization: Bearer sk-gw-..." \\
-H "Content-Type: application/json" \\
-d '{
  "model": "anthropic/claude-haiku-4.5",
  "messages": [{"role": "user", "content": "Привет! Ответьте одним словом: OK"}],
  "max_tokens": 10
}'`
  },
  {
    value: 'python',
    label: 'Python',
    code: `import json
import requests

API_BASE = "https://api.hubris.pw/v1"
API_KEY = "sk-gw-..."

response = requests.post(
  f"{API_BASE}/chat/completions",
  headers={"Authorization": f"Bearer {API_KEY}"},
  json={
      "model": "anthropic/claude-haiku-4.5",
      "messages": [{"role": "user", "content": "Привет! Ответьте одним словом: OK"}],
      "max_tokens": 10,
  },
)
print(json.dumps(response.json(), ensure_ascii=False, indent=2))`
  },
  {
    value: 'typescript',
    label: 'TypeScript',
    code: `const API_BASE = "https://api.hubris.pw/v1";
const API_KEY = "sk-gw-...";

const response = await fetch(\`\${API_BASE}/chat/completions\`, {
method: "POST",
headers: {
  Authorization: \`Bearer \${API_KEY}\`,
  "Content-Type": "application/json",
},
body: JSON.stringify({
  model: "anthropic/claude-haiku-4.5",
  messages: [{ role: "user", content: "Привет! Ответьте одним словом: OK" }],
  max_tokens: 10,
}),
});

const data = await response.json();
console.log(JSON.stringify(data, null, 2));`
  },
]}
/>

## С OpenAI SDK

Если у вас уже OpenAI SDK — поменяйте только `base_url` и ключ.

<CodeTabs
  tabs={[
  {
    value: 'openai-py',
    label: 'Python',
    code: `from openai import OpenAI

client = OpenAI(
  base_url="https://api.hubris.pw/v1",
  api_key="sk-gw-...",
)

response = client.chat.completions.create(
  model="anthropic/claude-haiku-4.5",
  messages=[{"role": "user", "content": "Привет! Ответьте одним словом: OK"}],
  max_tokens=10,
)
print(response.choices[0].message.content)`
  },
  {
    value: 'openai-node',
    label: 'Node.js',
    code: `import OpenAI from "openai";

const client = new OpenAI({
baseURL: "https://api.hubris.pw/v1",
apiKey: "sk-gw-...",
});

const response = await client.chat.completions.create({
model: "anthropic/claude-haiku-4.5",
messages: [{ role: "user", content: "Привет! Ответьте одним словом: OK" }],
max_tokens: 10,
});

console.log(response.choices[0].message.content);`
  },
]}
/>

## Ожидаемый ответ

Стандартный OpenAI-формат:

```json
{
  "id": "chatcmpl-...",
  "object": "chat.completion",
  "created": 1714000000,
  "model": "anthropic/claude-haiku-4.5",
  "choices": [
    {
      "index": 0,
      "message": { "role": "assistant", "content": "OK" },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 12,
    "completion_tokens": 1,
    "total_tokens": 13
  }
}
```

Если получили `401` — ключ неверный или отсутствует заголовок `Authorization`. См. [Аутентификацию](/docs/authentication). Если `402` — мало денег на балансе, см. [Биллинг](/billing).

## Что дальше

* **[Аутентификация](/docs/authentication)** — управление ключами, безопасное хранение, ротация.
* **[Каталог моделей](/models)** — все доступные модели с актуальными ценами.
* **[Биллинг](/billing)** — пополнение, минимальный остаток.
