API
Запускайте генерации из своих программ, ботов и ИИ-агентов (Claude Code, n8n, Make). Модели и цены — как на сайте, токены списываются с вашего баланса, при ошибке генерации возвращаются.
Ключи
Ключей пока нет.
Не публикуйте ключ: по нему тратятся токены вашего аккаунта. Если ключ утёк — отзовите его.
Как подключить — по шагам
Важно: ChatGPT, Claude или Gemini в обычном чате в браузере сами запросы к API не отправляют — им нужна программа, которая умеет выполнять команды: Claude Code, Cursor, n8n, Make или свой скрипт.
- 1
Пополните баланс
Через API тратятся те же токены, что и на сайте, по тем же ценам. Если генерация не удалась, токены вернутся. - 2
Создайте ключ
Кнопка «Создать ключ» выше. Скопируйте ключ сразу — он показывается один раз. Потеряли — отзовите и создайте новый. - 3
Выберите способ и сделайте пару шагов ниже
Самый простой — ИИ-агент: вы пишете задачу словами, он сам загружает файлы, запускает генерацию и скачивает результат.
- 1
Установите агента
Claude Code: установите Node.js (nodejs.org), затем в терминале:
npm install -g @anthropic-ai/claude-code
Создайте пустую папку для результатов, откройте в ней терминал и запустите
claude. Подойдёт и Cursor или Gemini CLI — шаги те же. - 2
Передайте агенту инструкцию
Нажмите кнопку — скопируется инструкция с адресами и форматом запросов. Вставьте её агенту первым сообщением.
Ключ в инструкцию подставляется, только если вы создали его только что. Иначе замените
hk_ВАШ_КЛЮЧна свой ключ. - 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_idPOST /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"])