HiAPI
Blog

Tutoriel

Comment utiliser flux-2-klein-9b/text-to-image via l'API hiapi

Jul 30, 2026
Comment utiliser flux-2-klein-9b/text-to-image via l'API hiapi

slug: flux-2-klein-9b-text-to-image-api-guide locale: en title: Comment utiliser flux-2-klein-9b/text-to-image via l'API hiapi category: tutorial summary:

  • Exemples curl et Python minimaux pour appeler flux-2-klein-9b/text-to-image via le point de terminaison unifié /v1/tasks de hiapi.
  • 'Tableau complet des paramètres : prompt, aspect_ratio, num_inference_steps, output_format et seed — un schéma strict rejette les champs inconnus.'
  • 'Remarques pour la production : callback.url comparé au polling, en-tête de requête Idempotency-Key, et les deux structures de réponse d'erreur. takeaways:
  • Créez une tâche avec POST /v1/tasks, puis interrogez GET /v1/tasks/{taskId} ou utilisez callback.url pour obtenir le résultat.
  • num_inference_steps n'accepte que 4-8 (entiers) ; ce modèle n'a pas de champ size ni n.
  • Réutiliser le même en-tête Idempotency-Key lors d'une nouvelle tentative renvoie le même taskId — réutilisation sûre en cas de timeout.
  • Les erreurs 400 utilisent error_code, les erreurs d'authentification 401 utilisent error.code imbriqué — vérifiez d'abord le code de statut HTTP. meta_title: Guide de l'API text-to-image flux-2-klein-9b meta_description: Appelez flux-2-klein-9b/text-to-image avec curl et Python ; créez des tâches, interrogez les images et gérez les callbacks, l'idempotence et les erreurs en production. keywords:
  • api text-to-image flux-2-klein-9b
  • exemple d'api flux-2-klein-9b
  • api de génération d'images 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

Comment utiliser flux-2-klein-9b/text-to-image via l'API hiapi

Ce que vous allez construire

Un script qui envoie un prompt à flux-2-klein-9b/text-to-image, attend la fin de la génération de l'image et la télécharge — ainsi que les détails de production nécessaires avant une exécution sans surveillance (callbacks, idempotence, structures d'erreur).

Prérequis : obtenez une clé API depuis la console hiapi. Chaque requête ci-dessous s'authentifie avec Authorization: Bearer sk-<your-api-key>.

Exemple minimal fonctionnel

Les modèles de génération de hiapi s'exécutent derrière un point de terminaison asynchrone unifié : POST /v1/tasks crée une tâche et renvoie immédiatement un taskId ; vous interrogez ensuite GET /v1/tasks/{taskId} jusqu'à ce qu'elle atteigne un état terminal.

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"
    }
  }'

Résultat renvoyé :

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

Interrogez la même tâche jusqu'à ce que data.status passe de handling à success (en passant brièvement par 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 est l'image générée. Il s'agit d'un lien temporaire — lors des tests, il expire environ 7 jours après la génération — donc téléchargez les octets et stockez-les vous-même plutôt que de créer un lien direct vers celui-ci.

Le même flux en Python (avec polling)

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)

Paramètres importants

flux-2-klein-9b/text-to-image dispose d'un schéma d'entrée strict — envoyer un champ qu'il ne reconnaît pas (size, n, negative_prompt, ou tout autre champ accepté par d'autres modèles d'image hiapi) sera directement rejeté, donc ne copiez pas les paramètres d'un modèle à l'autre sans avoir d'abord consulté la page du modèle.

Champ Obligatoire Description
prompt Oui Chaîne décrivant l'image.
aspect_ratio Non L'une des valeurs 1:1, 4:3, 3:4, 16:9, 9:16. Par défaut 4:3 si omis.
num_inference_steps Non Entier, 4–8. Par défaut 4 ; des valeurs plus élevées échangent de la vitesse contre un peu plus de détails.
output_format Non L'une des valeurs jpeg, png, webp. Par défaut png.
seed Non Entier. Réutiliser le seed rend les résultats de plusieurs appels reproductibles.

La référence complète des paramètres se trouve sur la page du modèle ; les tarifs actuels facturés par image figurent sur la page de tarification — consultez-les là plutôt que de coder en dur des chiffres, car les tarifs à l'usage changent.

Remarques pour la production

Utilisez des callbacks au lieu du polling. Pour tout ce qui va au-delà d'un script rapide, évitez la boucle de polling et ajoutez callback.url (ainsi que "when": "final") dans le corps de la requête de création de tâche — hiapi POSTera le résultat vers votre point de terminaison une fois la tâche terminée, avec une structure de charge utile identique à celle renvoyée par GET /v1/tasks/{taskId}. Pour plus de détails sur les champs de callback et la vérification de signature, consultez Créer une tâche.

{
  "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"}
}

Idempotence. Définissez l'en-tête Idempotency-Key sur l'appel POST /v1/tasks (255 octets maximum). Réessayer la même requête avec la même clé sous le même compte ne crée pas une seconde tâche — vous récupérez le taskId d'origine. C'est précisément ce qui permet de réessayer en toute sécurité une requête qui a expiré de votre côté sans double facturation.

Gestion des erreurs. Deux structures d'échec différentes apparaissent en pratique, il faut donc vérifier les deux :

  • Un input incorrect (prompt manquant, num_inference_steps hors plage, champ non pris en charge) renvoie HTTP 400 et {"error_code": "INVALID_REQUEST", "message": "..."}.
  • Une clé API invalide ou non autorisée renvoie HTTP 401, avec une structure de réponse différente : {"error": {"code": "permission_denied", "message": "...", "request_id": "..."}}.

Branchez d'abord sur le code de statut HTTP, puis lisez le champ d'erreur réellement présent — ne supposez pas que tous les échecs utilisent la même structure de réponse.

Ressources associées

Questions fréquentes

flux-2-klein-9b/text-to-image prend-il en charge l'image-to-image ? Pas directement — c'est un modèle distinct, flux-2-klein-9b/image-to-image, qui possède son propre schéma d'entrée.

Quelle est la différence entre flux-2-klein-9b et flux-2-klein-4b ? Les deux sont des points de terminaison text-to-image de la même série FLUX.2 [klein] ; 9b est le plus grand des deux, conçu pour un meilleur réalisme, un meilleur rendu du texte et plus de détails. Avant de changer, consultez la page du modèle 4b pour connaître sa tarification et ses paramètres actuels.

Peut-on demander plusieurs images en un seul appel ? Non — le schéma n'accepte ni n ni aucun champ de comptage. Envoyez une requête par image.

Combien de temps l'URL de l'image renvoyée reste-t-elle valide ? output[0].url est un lien temporaire avec son propre horodatage expireAt ; considérez-le comme de courte durée (environ une semaine lors des tests) et téléchargez les octets dès que la tâche réussit, plutôt que de stocker l'URL.

Pourquoi est-ce que je reçois une erreur 401 permission_denied ? Votre clé est absente, invalide, ou n'a pas accès à ce modèle. Vérifiez que vous envoyez bien Authorization: Bearer sk-... avec une clé issue de la console, et non un espace réservé.

Faut-il exécuter son propre serveur pour utiliser cette API ? Seulement si vous avez besoin de callbacks. Le polling de GET /v1/tasks/{taskId} depuis un script, une tâche planifiée ou une fonction serverless convient parfaitement à un faible volume d'utilisation ; lorsque le volume de génération augmente, passez à callback.url.

Articles similaires

Voir tous les articles →

Commencez avec des artefacts IA persistants

Obtenez votre clé API et appelez des modèles d'image, de vidéo et d'audio via une API unique basée sur les tasks.

Lire la documentation de l'API