AI Relay

Документация

API совместим с OpenAI: если клиент умеет ходить в OpenAI/минимум настраиваемый base_url — он заработает.

Быстрый старт

  1. Создай ключ в разделе «Профиль» (понадобится парольная фраза).
  2. В настройках клиента поставь base_url = https://reletnless.su/api/v1.
  3. Модель указывается в формате провайдер/модель — смотри таблицу ниже.
curl
curl https://reletnless.su/api/v1/chat/completions \
  -H "Authorization: Bearer sk-relay-ВАШ_КЛЮЧ" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "openrouter/z-ai/glm-5.2:free",
    "messages": [{"role": "user", "content": "Привет!"}],
    "stream": true
  }'

Python (openai SDK)

python
from openai import OpenAI

client = OpenAI(
    base_url="https://reletnless.su/api/v1",
    api_key="sk-relay-ВАШ_КЛЮЧ",
)

resp = client.chat.completions.create(
    model="openrouter/z-ai/glm-5.2:free",
    messages=[{"role": "user", "content": "Привет!"}],
)
print(resp.choices[0].message.content)
python · stream
# стриминг: текст появляется по мере генерации
stream = client.chat.completions.create(
    model="openrouter/z-ai/glm-5.2:free",
    messages=[{"role": "user", "content": "Придумай короткий анекдот"}],
    stream=True,
)
for chunk in stream:
    piece = chunk.choices[0].delta.content
    if piece:
        print(piece, end="", flush=True)

JavaScript / Node

javascript
const res = await fetch("https://reletnless.su/api/v1/chat/completions", {
  method: "POST",
  headers: {
    "Authorization": "Bearer sk-relay-ВАШ_КЛЮЧ",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "openrouter/z-ai/glm-5.2:free",
    messages: [{ role: "user", content: "Привет!" }],
    stream: true,
  }),
});

const reader = res.body.getReader();
const decoder = new TextDecoder();
while (true) {
  const { done, value } = await reader.read();
  if (done) break;
  process.stdout.write(decoder.decode(value, { stream: true }));
}

Список моделей и их статус

curl
curl https://reletnless.su/api/v1/models
# статус и средний TPS всех моделей:
curl https://reletnless.su/api/v1/status

/api/v1/models возвращает объекты в OpenAI-формате (поле data). /api/v1/status — статусы, средний TPS и число запросов по каждой модели.

Формат имени модели

Значение model: <провайдер>/<id модели>. Префикс выбирает бэкенд, всё после первого слэша уходит провайдеру как есть.

ПровайдерПример моделиБесплатно
openrouteropenrouter/z-ai/glm-5.2:freeдесятки :free моделей (список в /api/v1/models)
geminigemini/gemini-3.8-flashfree tier AI Studio
qwenqwen/qwen-flash1М токенов × 90 дней

Лимиты

ИсточникЛимит
OpenRouter (free-модели)20 запросов/мин, 50/день; 1000/день после разового пополнения $10
Gemini (free tier)≈5–10 запросов/мин, 100–250/день на Flash-модели
Qwen (free tier)1 млн токенов на каждую модель в первые 90 дней

Статусы моделей

РаботаетПерегрузЛимитНе работаетНет трафикаНет данных

«Работает» — аптайм ≥98% за сутки по реестру openrouter-uptime. «Перегруз» — деградация или свежая ошибка 5xx. «Лимит» — исчерпан бесплатный лимит (429). «Не работает» — даун. Средний TPS считается по собственным замерам через этот прокси (токенов/сек).

Коды ошибок

ОтветЧто значит
401 invalid_api_keyКлюч не создан в «Профиле» или неверен
403 bad_passwordНеверная парольная фраза при создании ключа
429Исчерпан лимит провайдера (смотри статус модели)
502Провайдер недоступен
503 provider_disabledКлюч провайдера не настроен на сервере