// LOADING STUDIO CONNECTING MODELS WARMING UP GPU BUILDING INTERFACE 90%

API Pixyn: генерация из своего кода

Ключ даёт вашему коду тот же набор нейросетей, настроек и слотов, что человек видит в студии, и списывает токены с того же баланса. Отдельного тарифа за доступ нет. Выпускается в кабинете: Профиль → API . Показывается один раз.

С чего начать

  1. Выпустите ключ и положите его в переменную окружения.
  2. Заберите каталог — оттуда ключи моделей, настроек и слотов.
  3. Спросите смету: сколько спишется именно за ваш запрос.
  4. Запустите генерацию и опрашивайте статус до результата.
export PIXYN_API_KEY=pxn_live_…

Ключ идёт заголовком Authorization: Bearer … и работает от вашего имени: генерации создаются на ваш аккаунт, токены снимаются с вашего баланса. По умолчанию он умеет всё, что умеете вы сами. При выпуске набор можно урезать — например, ключ только на чтение каталога не потратит ни одного токена, даже если его украдут.

МетодПутьПравоЗачем
GET/api/v1/meЧей ключ, какие права, какие лимиты.
GET/api/v1/modelsmodels:readКаталог: группы, поколения, настройки, слоты, цена.
POST/api/v1/estimatemodels:readСколько токенов спишется за такой запрос.
POST/api/v1/generationsgenerations:createЗапустить генерацию.
GET/api/v1/generations/:idgenerations:readСтатус и результат одной генерации.
GET/api/v1/generationsgenerations:readСписок своих генераций по API.

Каталог нейросетей

Устроен как выбор в студии: группа (бренд) → поколение → тип входа → настройки. Ключи настроек и слотов берите только отсюда. Они разные у каждой модели и меняются вместе с ней.

curl -s "https://pixyn.ru/api/v1/models?category=video" \
  -H "Authorization: Bearer $PIXYN_API_KEY"
{
  "groups": [{
    "name": "Kling",
    "category": "video",
    "variants": [{
      "id": "fal-ai-kling-video-v3-pro-image-to-video",
      "input_kind": "image2video",
      "price": { "base_tokens": 35, "included_seconds": 5, "per_extra_second_tokens": 7 },
      "settings": [{ "key": "cfg_scale", "type": "number", "minimum": 0, "maximum": 1, "default": 0.5 }],
      "slots":    [{ "key": "start_image_url", "type": "frame-start", "required": true }],
      "defaults": { "resolution": "1080p" },
      "hidden_settings": ["seed"]
    }]
  }]
}
  • defaults — предустановки модели. Не отправите — результат разойдётся с тем, что даёт сайт.
  • hidden_settings — поля, скрытые в интерфейсе. В запрос они всё равно уходят со значением по умолчанию, поэтому мы их показываем.
  • slots — не всегда про файл: enum-select означает выбор из списка (голос, аватар).
  • base_tokens — только стартовая часть цены. Для видео секунды сверх включённых считаются отдельно.

Сколько спишется

Смету считает тот же код, который потом списывает токены. Поэтому число из /estimate совпадает с фактическим списанием при тех же параметрах. Считать на своей стороне не нужно: у части моделей цена зависит от длительности, качества и длины текста одновременно.

curl -s -X POST https://pixyn.ru/api/v1/estimate \
  -H "Authorization: Bearer $PIXYN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fal-ai-kling-video-v3-pro-image-to-video",
    "duration": 10,
    "settings": { "resolution": "1080p" }
  }'
Так не стоит: взять base_tokens из каталога и показать пользователю как итог. Для видео это стартовая часть, и на десятисекундном ролике разница выйдет заметной.

Запуск и результат

Настройки — плоским объектом settings ключами из каталога, медиа — объектом media ключами слотов. Разбираться, какому провайдеру в какой конверт класть параметры, не нужно: это делает сервер. Ответ приходит сразу со статусом pending — генерация идёт в фоне. Картинки обычно готовы за секунды, видео заметно дольше.

curl -s -X POST https://pixyn.ru/api/v1/generations \
  -H "Authorization: Bearer $PIXYN_API_KEY" \
  -H "Idempotency-Key: 8f14e45f-ea6a-4f2b-9c1d-0b6f2a1d77e0" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "fal-ai-kling-video-v3-pro-image-to-video",
    "prompt": "кот едет на скейте по набережной, вечерний свет",
    "duration": 10,
    "settings": { "resolution": "1080p", "cfg_scale": 0.7 },
    "media": { "start_image_url": "https://example.com/cat.jpg" }
  }'

# в ответе — id и статус pending; результат забирать так:
curl -s https://pixyn.ru/api/v1/generations/GEN_ID \
  -H "Authorization: Bearer $PIXYN_API_KEY"

Idempotency-Key защищает от двойного списания: с тем же ключом вернётся та же генерация и ответ 200 вместо 201. Ключ помнится сутки. Ставьте его на каждый запуск — сетевой таймаут не означает, что запрос не дошёл.

Из чата: MCP

MCP — способ, которым Claude, ChatGPT и VS Code подключают внешние инструменты. Подключите наш сервер, и можно просить ассистента сгенерировать картинку или видео словами. Он сделает это через ваш аккаунт и ваш баланс, а готовое покажет прямо в переписке — забирать результат откуда-то ещё не нужно.

Claude Code — одной командой

claude mcp add --transport http pixyn https://pixyn.ru/api/mcp \
  --header "Authorization: Bearer $PIXYN_API_KEY"

Claude Desktop, Cursor, VS Code — через конфиг

Нужны ровно два значения: адрес https://pixyn.ru/api/mcp и заголовок Authorization: Bearer <ваш ключ>. Форма файла у клиентов слегка разная — вот общий вид, впишите его туда, где ваш клиент держит список MCP-серверов.

{
  "mcpServers": {
    "pixyn": {
      "type": "http",
      "url": "https://pixyn.ru/api/mcp",
      "headers": { "Authorization": "Bearer pxn_live_…" }
    }
  }
}
Заголовок с ключом — не опция. Без него сервер добавится и будет виден в списке, но первый же вызов вернёт 401: своего входа по логину у MCP нет, ключ и есть вход.

Что сказать ассистенту

Дальше обычными словами — модель сама подберёт инструмент и подставит параметры из каталога. Просить «вызови create_generation» не нужно.

— Покажи, какие есть модели для видео из картинки
— Сколько будет стоить 10 секунд в Kling v3 Pro в 1080p?
— Оживи это фото: пусть камера медленно отъезжает. Начальный кадр — вот ссылка
— Открой студию, я сам выберу модель

Ассистент поставит генерацию в очередь, дождётся её и покажет ссылку на готовое прямо в переписке. Если модель платная и дорогая, попросите сначала смету — это отдельный инструмент, и он ничего не списывает.

  • Инструменты: каталог, смета, запуск, статус, история, баланс.
  • Отдельная команда открывает окно выбора прямо в чате — с теми же нейросетями, поколениями и настройками, что на сайте.
  • Запуск и получение результата — два разных вызова. Видео делается минутами, ждать его внутри одного вызова хост не даст.
  • Права те же, что у ключа: ключ без запуска покажет каталог и смету, но не потратит токены.

Доставка на свой сервер

Необязательная штука. Нужна, если чата нет вовсе и опрашивать статус в цикле неудобно: бот, бэкенд, крон. Подпишите адрес в кабинете — и мы придём POST-запросом, когда генерация закончится. События два: generation.completed и generation.failed.

X-Pixyn-Signature: sha256=<подпись>
X-Pixyn-Timestamp: 1786000000

{
  "event": "generation.completed",
  "data": {
    "id": "gen_…",
    "status": "completed",
    "output": ["https://gen.pixyn.ru/m/…"],
    "error": null,
    "tokens_spent": 70
  }
}

Подпись проверять обязательно. Адрес рано или поздно попадает в логи или на скриншот, и без проверки любой сможет прислать вам «результат». Подписывается строка «отметка времени + точка + тело», ключ — секрет подписки. Отметка входит в подпись специально: без неё перехваченный запрос повторяется бесконечно.

import crypto from 'node:crypto'

function verify(rawBody, headers, secret) {
  const ts = Number(headers['x-pixyn-timestamp'])
  // старше пяти минут — отвергаем: иначе перехваченный запрос можно повторять
  if (!Number.isFinite(ts) || Math.abs(Date.now() / 1000 - ts) > 300) return false

  const expected = 'sha256=' + crypto
    .createHmac('sha256', secret)
    .update(ts + '.' + rawBody)
    .digest('hex')

  const a = Buffer.from(expected)
  const b = Buffer.from(headers['x-pixyn-signature'] ?? '')
  return a.length === b.length && crypto.timingSafeEqual(a, b)
}
  • Секрет показывается один раз при создании подписки, дальше только маска.
  • Отвечайте быстро любым 2xx, работу делайте асинхронно: мы ждём не дольше десяти секунд.
  • Не ответили — повторим до пяти раз с растущими паузами. Десять неудач подряд, и подписка отключится; причина и код видны в кабинете, там же включается обратно.
  • Приходят только генерации по ключу. Сделанное руками на сайте наружу не уходит.
  • Подписками управляют только из кабинета — API-ключ этого не может. Иначе украденный ключ настроил бы себе канал утечки результатов.

Границы

  • Отмены нет. Токены уходят в момент отправки запроса нейросети, остановить запущенное нельзя. Проверяйте параметры сметой заранее.
  • Возврат — только за наш сбой. Упало на нашей стороне — токены вернутся автоматически. «Не понравился результат» возвратом не считается.
  • Файлы принимаются ссылкой. Загрузки тела файла нет: медиа передаётся абсолютной https-ссылкой, доступной нашему серверу.
  • История — только по API. Сделанное на сайте через ключ не видно.
  • Одновременных генераций ограниченное число. Упёрлись в потолок — ручка ответит 503, повторите позже.

Ошибки

У каждой есть машинный код в поле error и пояснение в message. Ошибки в настройках возвращают ещё и список допустимых значений — по нему видно, что править.

КодHTTPЧто означает
BEARER_REQUIRED401Нет заголовка Authorization или он не Bearer.
INVALID_TOKEN401Ключ не распознан, отозван или истёк.
INSUFFICIENT_SCOPE403У ключа нет права на эту ручку.
UNKNOWN_MODEL400Такой модели нет в каталоге.
UNKNOWN_SETTING400У модели нет настройки с таким ключом. В ответе — список доступных.
INVALID_SETTING_VALUE400Значение вне допустимого списка или границ.
INVALID_DURATION400Такую длительность модель не принимает.
UNKNOWN_SLOT400У модели нет такого медиа-слота.
INVALID_MEDIA_URL400Ссылка не абсолютная https.
INSUFFICIENT_TOKENS402На балансе не хватает токенов.
GENERATION_INFLIGHT409Запрос с этим ключом идемпотентности уже выполняется.
RATE_LIMIT_EXCEEDED429Превышен лимит запросов в минуту.
CONCURRENCY_LIMIT503Достигнут потолок одновременных генераций.

Когда API не нужен

Десяток генераций в неделю руками — ключ ничего не упростит. В студии быстрее: видно результат, историю и подсказки по настройкам. Для повторяющихся цепочек без кода есть воркфлоу, для типовых операций — экшены. Ключ имеет смысл, когда генерация встроена в ваш продукт или в регулярный процесс.

Выпустить ключ

Создаётся в кабинете за пару секунд и работает сразу. Стоимость генераций — на странице тарифов; отдельной платы за доступ к API нет.

Профиль → API