Программа лояльности — до +15% бонусных токенов к каждой покупкеПодробнее →

API

Запускайте генерации из своих программ, ботов и ИИ-агентов (Claude Code, n8n, Make). Модели и цены — как на сайте, токены списываются с вашего баланса, при ошибке генерации возвращаются.

Ключи

Ключей пока нет.

Не публикуйте ключ: по нему тратятся токены вашего аккаунта. Если ключ утёк — отзовите его.

Как подключить — по шагам

Важно: ChatGPT, Claude или Gemini в обычном чате в браузере сами запросы к API не отправляют — им нужна программа, которая умеет выполнять команды: Claude Code, Cursor, n8n, Make или свой скрипт.

  1. 1

    Пополните баланс

    Через API тратятся те же токены, что и на сайте, по тем же ценам. Если генерация не удалась, токены вернутся.
  2. 2

    Создайте ключ

    Кнопка «Создать ключ» выше. Скопируйте ключ сразу — он показывается один раз. Потеряли — отзовите и создайте новый.
  3. 3

    Выберите способ и сделайте пару шагов ниже

    Самый простой — ИИ-агент: вы пишете задачу словами, он сам загружает файлы, запускает генерацию и скачивает результат.
  1. 1

    Установите агента

    Claude Code: установите Node.js (nodejs.org), затем в терминале:

    npm install -g @anthropic-ai/claude-code

    Создайте пустую папку для результатов, откройте в ней терминал и запустите claude. Подойдёт и Cursor или Gemini CLI — шаги те же.

  2. 2

    Передайте агенту инструкцию

    Нажмите кнопку — скопируется инструкция с адресами и форматом запросов. Вставьте её агенту первым сообщением.

    Ключ в инструкцию подставляется, только если вы создали его только что. Иначе замените hk_ВАШ_КЛЮЧ на свой ключ.

  3. 3

    Напишите задачу словами

    Например:

    Сделай видео в Seedance 2.0: 5 секунд, 720p, 9:16 — девушка с фото photo.jpg улыбается и машет рукой. Фото лежит в этой папке, готовый ролик сохрани сюда же.

    Агент сам загрузит фото, запустит генерацию, дождётся готового ролика (обычно 2–10 минут) и сохранит его в папку. Спросите «сколько у меня токенов?» — он проверит баланс.

Если не работает. Сервер всегда объясняет причину по-русски в поле detail — покажите его агенту или нам.

401 — ключ неверный или отозван. 402 — не хватает токенов. 409 — уже идёт другая генерация: на аккаунте одновременно одна. Генерации через API видны и в «Моих генерациях».

Справка

Адрес API: https://hakuba.ai/api/v1/public-api. Ключ — в заголовке Authorization: Bearer hk_….

  • GET /models — модели, что они принимают, допустимые пропорции, разрешения, длительности и цены
  • POST /files — загрузить файл (форма, поле file) и получить file_id
  • POST /price — сколько токенов будет стоить запрос (без запуска)
  • POST /generations — запустить генерацию
  • GET /generations/{id} — статус: processing → success (ссылка в result_url) или failed (токены вернутся)
  • GET /generations — последние генерации, GET /me — баланс

Лимиты: 120 запросов и 10 запусков в минуту на ключ.

curl

# 1) загрузить фото
curl -X POST https://hakuba.ai/api/v1/public-api/files -H "Authorization: Bearer hk_ВАШ_КЛЮЧ" -F "file=@photo.jpg"

# 2) запустить генерацию (file_id — из ответа шага 1)
curl -X POST https://hakuba.ai/api/v1/public-api/generations \
  -H "Authorization: Bearer hk_ВАШ_КЛЮЧ" -H "Content-Type: application/json" \
  -d '{"model":"seedance2","prompt":"Девушка улыбается и машет рукой","resolution":"720p","duration":5,"aspect_ratio":"9:16","images":["FILE_ID"]}'

# 3) статус
curl https://hakuba.ai/api/v1/public-api/generations/ID_ИЗ_ОТВЕТА -H "Authorization: Bearer hk_ВАШ_КЛЮЧ"

Python

import time, requests
BASE = "https://hakuba.ai/api/v1/public-api"
H = {"Authorization": "Bearer hk_ВАШ_КЛЮЧ"}

with open("photo.jpg", "rb") as f:
    file_id = requests.post(f"{BASE}/files", headers=H, files={"file": f}).json()["file_id"]

job = requests.post(f"{BASE}/generations", headers=H, json={
    "model": "seedance2", "prompt": "Девушка улыбается и машет рукой",
    "resolution": "720p", "duration": 5, "aspect_ratio": "9:16", "images": [file_id],
}).json()
if "id" not in job:
    raise SystemExit(job.get("detail"))
while job["status"] == "processing":
    time.sleep(15)
    job = requests.get(f"{BASE}/generations/{job['id']}", headers=H).json()
print(job["status"], job["result_url"] or job["error"])