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

OpenAI-совместимый API: текст, изображения, видео и эмбеддинги — один ключ, один баланс.

English quickstart (summary) — the API is fully OpenAI-compatible: change base_url and the key in any OpenAI client, and it works. Create an sk-… key in the console (email signup), top up from $1 (Telegram Stars or USDT TRC-20), then call /v1/chat/completions (text), /v1/images/generations (images), /v1/embeddings (RAG) or async /v1/videos (video, incl. image-to-video; poll the task id, fetch mp4 from /content). Failed tasks are never billed. The complete reference below is in Russian; support answers in English too — just write in the Telegram bot.

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

API полностью совместим с OpenAI: возьмите любой клиент для OpenAI, поменяйте base_url и ключ. Ключ создаётся в консоли за 10 секунд, вход — по e-mail.

BASE_URL = https://api.rodnik.ai/v1
API_KEY  = sk-...   # Консоль → API-ключи

💡 Без кода: те же модели доступны в нашем Telegram-боте — команды /img и /video, или пришлите фото с подписью, чтобы его «оживить». Оплата — с того же баланса.

ТекстИзображенияВидео ЭмбеддингиОшибки и лимиты

Текст — chat/completions

Стриминг поддерживается (SSE). Рекомендуем glm-4.5-air для быстрых задач, glm-5.3 для сложных, deepseek-v4-flash для логики и математики.

# pip install openai
from openai import OpenAI

client = OpenAI(
    base_url="https://api.rodnik.ai/v1",
    api_key="sk-...",
)

resp = client.chat.completions.create(
    model="glm-5.2",
    messages=[
        {"role": "system", "content": "Ты — помощник, отвечай по-русски."},
        {"role": "user", "content": "Объясни RAG в двух предложениях"},
    ],
    stream=True,          # потоковая выдача
)
for chunk in resp:
    if chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="")
// npm i openai  — Node.js / JavaScript
import OpenAI from "openai";

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

const stream = await client.chat.completions.create({
  model: "glm-5.2",
  messages: [{ role: "user", content: "Привет! Кто ты?" }],
  stream: true,
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

Изображения — images/generations

Синхронный вызов; по умолчанию приходит ссылка (url), base64 — через response_format="b64_json". До 10 изображений за запрос.

resp = client.images.generate(
    model="kolors",
    prompt="минималистичный постер: гора, закат, плоские цвета",
    n=1,
    size="1024x1024",
)
url = resp.data[0].url      # скачайте по ссылке
# то же самое в curl
curl https://api.rodnik.ai/v1/images/generations \
  -H "Authorization: Bearer sk-..." -H "Content-Type: application/json" \
  -d '{"model":"kolors","prompt":"горный пейзаж, закат","n":1,"size":"1024x1024"}'

Видео — /v1/videos

Формат как у OpenAI: создаёте задачу → опрашиваете статус → скачиваете mp4. Обычно 1–5 минут. До 4 задач одновременно. Оплата — за успешный результат.

# pip install httpx
import httpx, time

BASE, KEY = "https://api.rodnik.ai", "sk-..."
H = {"Authorization": f"Bearer {KEY}", "Content-Type": "application/json"}

# 1) Создать задачу
r = httpx.post(f"{BASE}/v1/videos", headers=H, json={
    "model": "wan22-t2v",
    "prompt": "кот идёт по мокрой улице под дождём, кинематографично",
    "seconds": "5",
    "size": "852x480",
})
vid = r.json()["id"]

# 2) Опрашивать статус (раз в 3–5 секунд)
while True:
    v = httpx.get(f"{BASE}/v1/videos/{vid}", headers=H).json()
    print(v["status"], v.get("progress", 0), "%")
    if v["status"] in ("completed", "failed"):
        break
    time.sleep(5)

# 3) Скачать mp4
if v["status"] == "completed":
    mp4 = httpx.get(f"{BASE}/v1/videos/{vid}/content", headers=H).content
    open("out.mp4", "wb").write(mp4)
# Фото → видео: multipart с файлом input_reference (фикс. 5 секунд)
curl https://api.rodnik.ai/v1/videos \
  -H "Authorization: Bearer sk-..." \
  -F model=wan22-i2v \
  -F seconds=5 \
  -F prompt="оживи это фото: лёгкое движение камеры" \
  -F input_reference=@photo.jpg

Эмбеддинги — bge-m3

Для поиска и RAG, мультиязычные (ru/en/zh + 100 языков). $0.01 / 1M токенов.

resp = client.embeddings.create(
    model="bge-m3",
    input=["Первый документ", "Второй документ"],
)
vec = resp.data[0].embedding   # 1024 измерения

Ошибки и лимиты

КодПричинаЧто делать
401Неверный или отозванный ключПроверьте ключ / создайте новый в консоли
402Недостаточно балансаПополните в консоли (USDT TRC-20), в боте (Stars) или картой/СБП — как оплатить без крипты
429Слишком частые запросы / очередь видео заполненаПовторите через минуту; видео — не более 4 одновременно
5xxСбой на нашей сторонеСредства не списываются — просто повторите запрос
Таймаут видеоЗадача выполняется дольше обычногоОпрашивайте статус, не держите длинный HTTP-запрос

Тарификация: текст — $ за 1 млн токенов (вход/выход раздельно); изображения — за штуку; видео — фиксированная цена за ролик указанной длительности, ожидание не тарифицируется. Лимиты: промпт до 5 000 символов; изображения — до 10 за запрос; видео — 4 параллельные задачи. Полные цены — в таблице тарифов. Не нашли ответ? Напишите в наш Telegram-бот — ИИ-ассистент отвечает мгновенно.