Документация
OpenAI-совместимый шлюз: замените base_url — SDK и код остаются вашими. Чат, эмбеддинги, файлы, векторные хранилища, RAG с цитатами, речь и задачи казахского языка Qazgramma — через один ключ и одну квоту.
Быстрый старт
Три шага. После первого у вас есть ключ, после третьего — ответ модели.
1. Создайте организацию
Одна форма, письма ждать не нужно: /ru/signup. Сразу даётся 100 000 токенов в месяц.
2. Выпустите ключ
В портале: «Разработчикам» → «Ключи API» → «Новый ключ». Ключ показывается один раз.
3. Сделайте запрос
curl https://router.tilqazyna.kz/v1/chat/completions \ -H "Authorization: Bearer $TQ_KEY" \ -H "Content-Type: application/json" \ -d '{"model":"qwen","messages":[{"role":"user","content":"Сәлем!"}]}'
Быстрый старт для вайбкодинга
Если вы пишете код вместе с ИИ-агентом, дайте ему это. Дальше он разберётся сам.
Одной строкой в промпт
Используй OpenAI-совместимый API: base_url https://router.tilqazyna.kz/v1, ключ в переменной TQ_KEY, model "qwen". Описание для агентов: https://router.tilqazyna.kz/llms.txtPython, как есть
from openai import OpenAI
client = OpenAI(
base_url="https://router.tilqazyna.kz/v1",
api_key=os.environ["TQ_KEY"],
)
answer = client.chat.completions.create(
model="qwen",
messages=[{"role": "user", "content": "Сәлем!"}],
)
print(answer.choices[0].message.content)TypeScript, тот же SDK
import OpenAI from 'openai';
const client = new OpenAI({
baseURL: 'https://router.tilqazyna.kz/v1',
apiKey: process.env.TQ_KEY,
});
const answer = await client.chat.completions.create({
model: 'qwen',
messages: [{ role: 'user', content: 'Сәлем!' }],
});Задачи казахского языка вызываются через имя модели, а не через отдельный эндпоинт: qazgramma:v1:pro:style.rewrite:news. Полный список — в разделе ниже. Агент, который этого не знает, будет пытаться найти несуществующий /v1/qazgramma.
Подключение
- Base URL
https://router.tilqazyna.kz/v1- Авторизация
Authorization: Bearer sk-tq-…— ключ создаётся в портале- Формат
- JSON, UTF-8. Ошибки — в формате OpenAI
Модели
| Идентификатор | Назначение |
|---|---|
| qwen | Доступна сейчас — список получен от шлюза |
| qazgramma | Доступна сейчас — список получен от шлюза |
| auto | Доступна сейчас — список получен от шлюза |
Таблица выше — живой ответ GET /v1/models, а не список, набранный руками. Машинное описание /llms.txt называет те же имена и объясняет задачи Qazgramma — его можно дать ИИ-агенту как есть.
Имена моделей Qazgramma
Задача едет в имени модели. Части можно ставить в любом порядке, лишние — опускать.
qazgramma[:v1][:free|pro][:задача][:вариант]Без уточнений qazgramma означает qazgramma:v1:free:gec.correct.
Задача не из списка — E_TASK_UNKNOWN. Вариант не из списка задачи — E_VARIANT_UNKNOWN. В обоих случаях ответ называет допустимые значения.
| Задача | Что делает | Тариф | Варианты |
|---|---|---|---|
| gec.correct | Исправить ошибки | free · pro | — |
| gec.incorrect | Внести ошибку — для учебных заданий | pro | septik (по умолчанию) |
| text.summarize | Сократить | pro | short, medium (по умолчанию), bullets |
| text.expand | Развернуть | pro | — |
| text.paraphrase | Пересказать другими словами | pro | close (по умолчанию), free |
| style.rewrite | Переписать в другом стиле | pro | neutral (по умолчанию), news, academic, official, conversational |
| style.simplify | Упростить | pro | — |
| style.complicate | Усложнить | pro | — |
| gov.review | Проверить служебный текст | pro | full (по умолчанию), calque, glossary, tone |
| gov.compose | Составить служебный текст | pro | — |
Примеры имён
qazgramma → исправить ошибки, бесплатно
qazgramma:pro → то же, платный тариф
qazgramma:v1:pro:text.summarize → сократить (вариант medium)
qazgramma:v1:pro:text.summarize:bullets → сократить списком
qazgramma:v1:pro:style.rewrite:news → переписать в стиле новости
qazgramma:v1:pro:gov.review:glossary → проверить по глоссариюЧто платформа умеет и чего не умеет
Список закрытый: если чего-то нет в левом столбце — этого нет. Правый столбец существует, чтобы не тратить ваше время на проверку.
| Умеет | Не умеет |
|---|---|
| Чат-запросы, совместимые с OpenAI | Дообучать модели под вас |
| Потоковый ответ | Картинки, видео, генерацию изображений |
| Базы знаний с поиском по документам | Документы в форматах, кроме перечисленных ниже |
| Telegram-бот и виджет на сайт | Голосовые каналы и звонки |
| Ключи в боевом и тестовом режимах | Оплату картой в личном кабинете |
| Задачи казахского языка — раздел Qazgramma | Гарантию отсутствия ошибок в ответе модели |
Ограничения
Числа настоящие: столько выдаётся и столько проверяется на сервере.
| Квота новой организации | 100 000 токенов в месяц |
| Увеличение без обращения к нам | до 200 000 |
| Запросов в минуту | 30 |
| Размер документа | 15 МБ |
| Форматы документов | txt, md, csv, pdf, docx |
| Срок сессии в портале | 30 дней |
| Ответ в песочнице на главной | до 300 токенов |
Эндпоинты
Массив messages. Проходят stream, tools, response_format, seed, n.
input — строка или массив строк.
Список доступных моделей.
multipart, поле file. PDF, DOCX, TXT, MD, CSV.
Удаление загруженного файла.
{"query": "…"} — поиск по хранилищу.
Управляемый RAG с цитатами в annotations.
{"input": "…"} → audio/wav.
Ошибки
{ "error": { "message": "…", "type": "…", "code": "…" } }Успехом считается только код 2xx от движка. Любой другой ответ — включая осмысленный 4xx — шлюз трактует как отказ узла и отдаёт 502. Поэтому прикладные ошибки сервисы за шлюзом возвращают внутри ответа 200, а не кодом HTTP.
Qazgramma: API задач
Инструменты казахского языка: правка ошибок, стиль, суммаризация, госдокументы и обратная генерация ошибок для обучающих наборов. Задача называется в имени модели — отдельное поле в теле не проходит ни через типизированный TypeScript SDK, ни через ноду OpenAI в n8n.
qazgramma:v1:pro:style.rewrite:news канонический вид qazgramma → qazgramma:v1:free:gec.correct qazgramma:pro → qazgramma:v1:pro:gec.correct qazgramma:v1:pro:style.rewrite → …:style.rewrite:neutral
Сегменты опознаются по значению, а не по позиции. Дефолт подставляется за пропущенный сегмент и никогда за нераспознанный: gec.corect с опечаткой вернёт E_TASK_UNKNOWN, а не выполнит молча другую задачу.
{
"schema_version": "1.0",
"status": "ok",
"task": "gec.correct",
"model": "qazgramma:v1:free:gec.correct",
"result": { "text": "Мен кітапты оқыдым.", "changed": true },
"corrections": [ {
"edit_type": "replace",
"spans": [ {"start": 4, "end": 11} ], // руны, [start, end)
"original": "кітапды", "corrected": "кітапты",
"layer": "GRAM",
"codes": [ "GEC.SEPTIK", "GEC.UNDESTIK" ],
"confidence": 0.6, "classified_by": "rules"
} ]
}Категорию правки ставят правила по морфемам. Чего они не распознали — GEC.UNKNOWN с confidence: 0. Поле codes — массив: одна морфема бывает сразу двух категорий, как в примере выше, где выбор аффикса -ты это и падеж, и закон благозвучия.
Рецепты
from openai import OpenAI
import json
client = OpenAI(base_url="https://router.tilqazyna.kz/v1", api_key="sk-tq-…")
r = client.chat.completions.create(
model="qazgramma:v1:free:gec.correct",
messages=[{"role": "user", "content": "Мен кітапды оқыдым."}],
)
data = json.loads(r.choices[0].message.content)
print(data["result"]["text"]) # Мен кітапты оқыдым.curl https://router.tilqazyna.kz/v1/chat/completions \
-H "Authorization: Bearer sk-tq-…" \
-H "Content-Type: application/json" \
-d '{
"model": "qazgramma:v1:pro:style.rewrite:news",
"messages": [{"role":"user","content":"Кеше мектепте жиналыс болды."}]
}'В n8n укажите модель строкой в ноде OpenAI Chat Model — ничего сверх стандартных полей не требуется. Ради этого задача и живёт в имени модели.