Tutoriel
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
inputincorrect (promptmanquant,num_inference_stepshors 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
- Obtenir les détails d'une tâche — référence complète du polling
- Authentification — portées des clés API et format des en-têtes
- flux-2-klein-9b/image-to-image — même série, édite une image d'entrée plutôt que de générer à partir de zéro
- flux-2-klein-4b/text-to-image — modèle plus petit et plus rapide de la même série klein
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 →-
Tutoriel
Comment appeler hailuo-2.3-fast/image-to-video via l'API HiAPI : curl et Python en pratique
La première requête exploitable du palier image-vers-vidéo rapide et économique — de l'ID du modèle au téléchargement du MP4
-
Tutoriel
Comment appeler hailuo-2.3/text-to-video via l'API HiAPI : curl, Python et exemples de requêtes exécutables
-
Tutoriel
Utiliser Kandinsky 6.0 Pro texte-vers-vidéo sur HiAPI : tutoriel curl et Python
Démonstration pratique axée sur la requête : construire l'appel du prompt au clip vidéo, soumettre la requête, interroger l'état d'achèvement et télécharger le résultat