Подключение SDK / curl к vibecode.moe

Установка и подключение Claude Code, Codex CLI, OpenCode или любого OpenAI/Anthropic-совместимого SDK.

SDK / curl

Прямой доступ к API — для своих SDK или скриптов. Ставить нечего: ты сам выбираешь клиент (openai, anthropic, litellm, своя обёртка…); подмена идёт в двух полях — base_url и api_key.

·

OpenAI-совместимый SDK: base_url = https://vibecode.moe/v1 + api_key = vk-…

·

Anthropic-совместимый SDK: base_url = https://vibecode.moe/v1 + x-api-key: vk-…

·

Или через сырой curl:

curl https://vibecode.moe/v1/chat/completions -H "Authorization: Bearer vk-YOUR-KEY" -H "Content-Type: application/json" -d '{"model":"gpt-6-astra","messages":[{"role":"user","content":"hi"}]}'

Генерация изображений

Отдельная ручка /v1/images/generations, совместимая с OpenAI. Тот же vk- ключ, оплата — за картинку, а не за токены.

·

Запрос

curl https://vibecode.moe/v1/images/generations \
  -H "Authorization: Bearer vk-YOUR-KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2","prompt":"a red fox in the snow","n":1,"size":"1024x1024"}'

Обязательное поле одно — model. Остальные (prompt, n, size, quality…) — те же, что в OpenAI Images API, и поддерживаются в объёме, который умеет выбранная модель. Генерация занимает десятки секунд — ставь таймаут клиента не меньше минуты.

·

Ответ

{
  "created": 1789534663,
  "data": [
    { "url": "https://vibecode.moe/v1/images/file/0cd95374-….png" }
  ]
}

Ссылка временная — живёт несколько часов, потом отдаёт 404. Скачай файл сразу (ключ для этого не нужен) или запрашивай b64_json, чтобы получить байты прямо в ответе (ниже).

·

Байты вместо ссылки — добавь "response_format":"b64_json", и в data[].b64_json придёт сам файл в base64. Удобно, когда некуда ходить за ссылкой — очередь, фоновый воркер, изолированная сеть.

curl https://vibecode.moe/v1/images/generations \
  -H "Authorization: Bearer vk-YOUR-KEY" -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2","prompt":"a red fox in the snow","response_format":"b64_json"}' \
  | python -c "import sys,json,base64; open('out.png','wb').write(base64.b64decode(json.load(sys.stdin)['data'][0]['b64_json']))"
·

Картинка-референс — чтобы модель отталкивалась от твоего изображения (изменить его, дорисовать, совместить несколько), шли запрос на /v1/images/edits. Это multipart/form-data, как в OpenAI Images API: картинка идёт файлом в поле image — не ссылкой и не base64 внутри JSON.

curl https://vibecode.moe/v1/images/edits \
  -H "Authorization: Bearer vk-YOUR-KEY" \
  -F model=gpt-image-2.5 \
  -F prompt="put a red scarf on the fox" \
  -F image=@fox.png
from openai import OpenAI

client = OpenAI(base_url="https://vibecode.moe/v1", api_key="vk-YOUR-KEY")
result = client.images.edit(
    model="gpt-image-2.5",
    image=open("fox.png", "rb"),
    prompt="put a red scarf on the fox",
)
print(result.data[0].url)

Обязательны model, prompt и хотя бы один файл image. Файлов может быть до четырёх (повтори поле image), формат — PNG, JPEG или WebP, весь запрос — до 32 МБ. Остальные поля (size, quality, response_format…) — те же, что при генерации. Файл mask принимается, но модели пока его не учитывают — правится вся картинка по описанию; n на правке даёт одну картинку. Запрос без файла или с не-картинкой вернёт ошибку 400 сразу, без списания. Правка идёт дольше генерации — до 2–3 минут, ставь таймаут клиента не меньше 4 минут.

Ответ, временная ссылка и цена — как у генерации: одна картинка в ответе — одно списание по цене модели.

·

Модели — gpt-image-2, gpt-image-2.5, gpt-image-2.5-flare, gpt-image-2.5-sunburst, gpt-image-2-vip, nano-banana-2, nano-banana-2-lite, nano-banana-2.1, nano-banana-pro. Цена за картинку и доступные размеры — на странице моделей и в GET https://vibecode.moe/v1/models (поле usd_per_image).

Через /v1/chat/completions эти модели не работают — только через /v1/images/generations и /v1/images/edits. Картинку, переданную как image_url в сообщении чата, они не получат. Если генерация не удалась, ответ будет ошибкой, и списания не произойдёт.

Jev — модель решений

Jev не пишет текст. Ты даёшь материал (state) и вопросы — в ответ приходит выбор из твоих вариантов, оценка по шкале или вероятность «да», вместе с вероятностями и уверенностью. Для этого — отдельная ручка /v1/systemone, тот же vk- ключ. Платишь только за входные токены: ответ бесплатный.

·

Запрос

curl https://vibecode.moe/v1/systemone \
  -H "Authorization: Bearer vk-YOUR-KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "jev-latest",
    "state": "Help! My payouts have been failing for 3 days.",
    "questions": {
      "department": {
        "type": "choice",
        "instructions": "Which team should handle this?",
        "criteria": {
          "billing": "Payments, invoicing, refunds",
          "technical": "Bugs, outages, integrations",
          "sales": "Pricing, upgrades, new accounts"
        }
      },
      "urgent": { "type": "noul", "instructions": "Does this convey urgency?" }
    }
  }'

Обязательные поля — model (jev-latest — сейчас это jev-1.14.0, — либо версия явно: jev-1.14.0 или jev-1.13.0), state (строка, объект или массив) и questions: ключ вопроса выбираешь ты, по нему же вернётся ответ. Любые другие поля запроса игнорируются.

·

Ответ

{
  "model": "jev-1.14.0",
  "answers": {
    "department": {
      "type": "choice",
      "choice": "billing",
      "probabilities": { "billing": 0.85, "technical": 0.15, "sales": 0.0 },
      "confidence": 0.77
    },
    "urgent": { "type": "noul", "noul": 0.95 }
  },
  "usage": { "input_tokens": 349, "output_tokens": 38 }
}

Списываются usage.input_tokens по цене из каталога — output_tokens бесплатны. В model приходит конкретная версия модели: если настраиваешь пороги под неё, указывай её и в запросе — jev-latest переедет на следующую версию.

·

Три типа вопросов

choice — выбор одного варианта: criteria это объект «вариант → описание» (до 255 вариантов), в ответе choice, probabilities и confidence. score — позиция на шкале: criteria это массив описаний уровней от низшего к высшему (от 2 до 10), в ответе score (может лежать между уровнями), legend, probabilities и confidence. noul — да/нет: criteria необязательны ({"true": "…", "false": "…"}), в ответе noul от 0 («нет») до 1 («да»). У каждого вопроса есть instructions. confidence — число от 0 до 1; по нему удобно решать, действовать автоматически или отдать человеку.

Через /v1/chat/completions и другие текстовые ручки Jev не работает — только через /v1/systemone. Цена за миллион токенов — на странице моделей и в GET https://vibecode.moe/v1/models.