HiAPI
Блог

Руководство

Как использовать flux-2-klein-9b/text-to-image через hiapi API

Jul 30, 2026
Как использовать flux-2-klein-9b/text-to-image через hiapi API

slug: flux-2-klein-9b-text-to-image-api-guide locale: en title: Как использовать flux-2-klein-9b/text-to-image через hiapi API category: tutorial summary:

  • Минимальные примеры curl и Python для вызова flux-2-klein-9b/text-to-image через единый эндпоинт /v1/tasks в hiapi.
  • 'Полная таблица параметров: prompt, aspect_ratio, num_inference_steps, output_format и seed — строгая схема отклоняет неизвестные поля.'
  • 'Замечания для продакшена: сравнение callback.url и опроса, заголовок Idempotency-Key, а также две структуры ответов с ошибками. takeaways:
  • Создайте задачу с помощью POST /v1/tasks, затем опрашивайте GET /v1/tasks/{taskId} или используйте callback.url для получения результата.
  • num_inference_steps принимает только 4-8 (целые числа); у этой модели нет полей size или n.
  • При повторной попытке с тем же заголовком Idempotency-Key возвращается тот же taskId — его можно безопасно переиспользовать при таймауте.
  • Ошибки 400 используют error_code, ошибки аутентификации 401 используют вложенный error.code — сначала проверяйте HTTP-статус. meta_title: Руководство по API генерации изображений из текста flux-2-klein-9b meta_description: Вызов flux-2-klein-9b/text-to-image с помощью curl и Python; создание задач, опрос изображений, а также обработка колбэков, идемпотентности и ошибок в продакшене. keywords:
  • api генерации изображений из текста flux-2-klein-9b
  • пример api flux-2-klein-9b
  • api генерации изображений hiapi
  • flux klein api curl python tags:
  • api-guide
  • image-generation
  • flux author_name: hiapi is_published: false cover_image: https://static.hiapi.ai/blog/_default/recipe-cover.jpg

Как использовать flux-2-klein-9b/text-to-image через hiapi API

Что вы создадите

Скрипт, который отправляет промпт в flux-2-klein-9b/text-to-image, ждёт завершения генерации изображения и скачивает его — а также содержит производственные детали (колбэки, идемпотентность, структуры ошибок), необходимые перед запуском без присмотра.

Предварительные условия: Получите API-ключ в консоли hiapi. Каждый запрос ниже аутентифицируется с помощью Authorization: Bearer sk-<your-api-key>.

Минимальный рабочий пример

Генеративные модели hiapi работают за единым асинхронным эндпоинтом: POST /v1/tasks создаёт задачу и сразу возвращает taskId; затем вы опрашиваете GET /v1/tasks/{taskId}, пока она не достигнет терминального состояния.

curl -X POST https://api.hiapi.ai/v1/tasks \
  -H "Authorization: Bearer sk-<your-api-key>" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "flux-2-klein-9b/text-to-image",
    "input": {
      "prompt": "a red fox walking through fresh snow, golden hour light",
      "aspect_ratio": "16:9"
    }
  }'

Возвращаемый результат:

{"code": 200, "data": {"taskId": "tk-hiapi-01K..."}, "message": "success"}

Опрашивайте ту же задачу, пока data.status не изменится с handling на success (по пути ненадолго проходя через archiving):

curl https://api.hiapi.ai/v1/tasks/tk-hiapi-01K... \
  -H "Authorization: Bearer sk-<your-api-key>"
{
  "code": 200,
  "data": {
    "status": "success",
    "output": [
      {"type": "image", "url": "https://temp.hiapi.ai/.../01K...-0.png", "expireAt": 1785941465}
    ]
  },
  "message": "success"
}

data.output[0].url — это сгенерированное изображение. Это временная ссылка — в тестах она истекает примерно через 7 дней после генерации — поэтому скачайте байты и сохраните их самостоятельно, а не ссылайтесь на неё напрямую.

Тот же процесс на Python (с опросом)

import time
import requests

API_KEY = "sk-<your-api-key>"
BASE = "https://api.hiapi.ai/v1"
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}

resp = requests.post(f"{BASE}/tasks", headers=headers, json={
    "model": "flux-2-klein-9b/text-to-image",
    "input": {
        "prompt": "a red fox walking through fresh snow, golden hour light",
        "aspect_ratio": "16:9",
    },
})
resp.raise_for_status()
task_id = resp.json()["data"]["taskId"]

while True:
    task = requests.get(f"{BASE}/tasks/{task_id}", headers=headers).json()["data"]
    if task["status"] == "success":
        image_url = task["output"][0]["url"]
        break
    if task["status"] == "failed":
        raise RuntimeError(f"generation failed: {task}")
    time.sleep(3)

image_bytes = requests.get(image_url).content
open("fox.png", "wb").write(image_bytes)

Важные параметры

flux-2-klein-9b/text-to-image имеет строгую входную схему — отправка полей, которые она не знает (size, n, negative_prompt или любых других полей, принимаемых другими моделями изображений hiapi), будет сразу отклонена, поэтому не копируйте параметры между моделями, не заглянув сначала на страницу модели.

Поле Обязательно Описание
prompt Да Строка, описывающая изображение.
aspect_ratio Нет Одно из значений 1:1, 4:3, 3:4, 16:9, 9:16. По умолчанию 4:3, если не указано.
num_inference_steps Нет Целое число, 4–8. По умолчанию 4; более высокие значения обменивают скорость на немного большую детализацию.
output_format Нет Одно из значений jpeg, png, webp. По умолчанию png.
seed Нет Целое число. Повторное использование seed делает результаты нескольких вызовов воспроизводимыми.

Полный справочник параметров см. на странице модели; текущие цены с оплатой за изображение см. на странице тарифов — проверяйте там, а не хардкодьте числа, поскольку тарифы на основе использования меняются.

Замечания для продакшена

Используйте колбэки вместо опроса. Для любого сценария, кроме быстрых скриптов, пропустите цикл опроса и добавьте callback.url (а также "when": "final") в тело запроса на создание задачи — hiapi отправит результат POST-запросом на ваш эндпоинт после завершения задачи, и структура его полезной нагрузки будет точно такой же, как у ответа GET /v1/tasks/{taskId}. Подробности о полях колбэка и проверке подписи см. в разделе Создание задачи.

{
  "model": "flux-2-klein-9b/text-to-image",
  "callback": {"url": "https://yourapp.com/hooks/hiapi", "when": "final"},
  "input": {"prompt": "a red fox walking through fresh snow, golden hour light"}
}

Идемпотентность. Установите заголовок Idempotency-Key в вызове POST /v1/tasks (не более 255 байт). Повторная попытка того же запроса с тем же ключом в рамках одной учётной записи не создаст вторую задачу — вы получите исходный taskId. Именно поэтому можно безопасно повторять запросы, которые истекли по таймауту на вашей стороне, без двойного списания средств.

Обработка ошибок. На практике встречаются две разные структуры сбоев, поэтому проверяйте обе:

  • Неверный input (отсутствует prompt, num_inference_steps вне диапазона, неподдерживаемые поля) возвращает HTTP 400 и {"error_code": "INVALID_REQUEST", "message": "..."}.
  • Недействительный или неавторизованный API-ключ возвращает HTTP 401 с другой структурой ответа: {"error": {"code": "permission_denied", "message": "...", "request_id": "..."}}.

Сначала ветвите обработку по HTTP-статусу, затем читайте фактически присутствующие поля ошибки — не предполагайте, что все сбои используют одну и ту же структуру ответа.

Связанные ресурсы

Часто задаваемые вопросы

Поддерживает ли flux-2-klein-9b/text-to-image генерацию изображения из изображения? Напрямую нет — это отдельная модель flux-2-klein-9b/image-to-image со своей собственной входной схемой.

В чём разница между flux-2-klein-9b и flux-2-klein-4b? Оба являются эндпоинтами генерации изображений из текста в одной серии FLUX.2 [klein]; 9b — более крупная из двух, нацеленная на более сильный реализм, рендеринг текста и детализацию. Перед переключением см. страницу модели 4b, чтобы узнать её текущие цены и параметры.

Можно ли запросить несколько изображений за один вызов? Нет — схема не принимает n или поля подсчёта. Отправляйте один запрос на каждое изображение.

Как долго действителен возвращённый URL изображения? output[0].url — это временная ссылка с собственным временным меткой expireAt; считайте её короткоживущей (в тестах около недели) и скачивайте байты сразу после успешного завершения задачи, а не сохраняйте URL.

Почему я получаю ошибку 401 permission_denied? Ваш ключ отсутствует, недействителен или не имеет доступа к этой модели. Убедитесь, что вы отправляете Authorization: Bearer sk-... с ключом из консоли, а не заглушку.

Нужно ли запускать собственный сервер для использования этого API? Только если вам нужны колбэки. Опрос GET /v1/tasks/{taskId} из скрипта, планировщика или бессерверной функции вполне подходит для небольших объёмов использования; когда масштаб генерации вырастет, переключитесь на callback.url.

Похожие статьи

Все статьи →

Начните работать с постоянными артефактами ИИ

Получите API-ключ и вызывайте модели изображений, видео и аудио через один API на основе tasks.

Читать документацию API