curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "A blue cat sitting on the grass",
"resolution": "2MP",
"size": "16:9",
"output_format": "jpeg"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "A blue cat sitting on the grass",
"resolution": "2MP",
"size": "16:9",
"output_format": "jpeg"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "A blue cat sitting on the grass",
resolution: "2MP",
size: "16:9",
output_format: "jpeg"
};
const response = await fetch(url, {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance, please top up",
"type": "payment_required"
}
}
Flux 2.0
Génération d'images avec FLUX.2
Soumettez des tâches asynchrones FLUX.2 de génération à partir de texte ou d’images de référence. L’API renvoie un identifiant de tâche ; interrogez ensuite le point de terminaison des tâches pour obtenir l’image générée.
POST
/
v1
/
images
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "A blue cat sitting on the grass",
"resolution": "2MP",
"size": "16:9",
"output_format": "jpeg"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "A blue cat sitting on the grass",
"resolution": "2MP",
"size": "16:9",
"output_format": "jpeg"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "A blue cat sitting on the grass",
resolution: "2MP",
size: "16:9",
output_format: "jpeg"
};
const response = await fetch(url, {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance, please top up",
"type": "payment_required"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "A blue cat sitting on the grass",
"resolution": "2MP",
"size": "16:9",
"output_format": "jpeg"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "A blue cat sitting on the grass",
"resolution": "2MP",
"size": "16:9",
"output_format": "jpeg"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "A blue cat sitting on the grass",
resolution: "2MP",
size: "16:9",
output_format: "jpeg"
};
const response = await fetch(url, {
method: "POST",
headers: {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify(payload)
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "Authentication failed, please check your API key",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Insufficient balance, please top up",
"type": "payment_required"
}
}
Modèles pris en charge
| Modèle | Description |
|---|---|
flux-2-flex | Génération avec réglage précis du nombre d’étapes d’échantillonnage et du niveau de guidage. |
flux-2-pro | Bon équilibre entre qualité et rapidité pour les workflows de production courants. |
flux-2-max | Modèle FLUX.2 offrant la meilleure qualité et le niveau de détail le plus élevé. |
Authentification
string
requis
Tous les points de terminaison nécessitent une authentification par jeton Bearer.Obtenez une clé API sur la page Gestion des clés API, puis ajoutez-la à l’en-tête de la requête :
Authorization: Bearer YOUR_API_KEY
Corps de la requête
string
requis
Nom du modèle :
flux-2-flexflux-2-proflux-2-max
boolean
défaut:"false"
Indique s’il faut modérer le contenu avant d’envoyer la tâche d’image.
true: vérifier les prompts et les images d’entrée avecomni-moderation-latestfalseou omis : ne pas envoyer de requête de modération, sans coût ni latence de modération supplémentaires (par défaut)
string
requis
Description textuelle de l’image à générer ou de la modification à appliquer aux images de référence.
string
défaut:"2MP"
Préréglage de résolution de sortie. Valeurs prises en charge :
1MP2MP(valeur par défaut)3MP4MP
1MP correspond à 1,048,576 pixels.Les anciens alias restent acceptés : 512 / 512P / 1M correspondent à 1MP, 1K / 1024 à 2MP, 2K / 2048 à 3MP et 4K à 4MP. Toute autre valeur fait échouer la tâche.Ce préréglage détermine les dimensions de sortie lorsque size est un rapport d’aspect.string
défaut:"1:1"
Rapport d’aspect ou dimensions en pixels de l’image de sortie.
size accepte également auto : lorsque image_urls est fourni, le rapport d’aspect de l’image de référence est repris tout en conservant le niveau resolution actuel ; sans image de référence, la valeur par défaut 1:1 est utilisée.Options de taille prises en charge :1:1(valeur par défaut)4:33:416:99:163:22:321:99:21auto- suivre le rapport d’aspect de l’image de référence
1024x1536. Les dimensions exactes en pixels sont soumises aux mêmes limites que width et height et sont prioritaires sur resolution et le rapport d’aspect.integer
Largeur de sortie exacte en pixels. Elle doit être fournie avec
height, et chaque dimension doit être d’au moins 64 pixels. Fournir une seule dimension fait échouer la tâche.Une paire complète width et height est prioritaire et remplace resolution et size.integer
Hauteur de sortie exacte en pixels. Elle doit être fournie avec
width, et chaque dimension doit être d’au moins 64 pixels. Fournir une seule dimension fait échouer la tâche.L’image de sortie ne doit pas dépasser 4 MP (width × height ≤ 4,194,304) et le total formé par l’image de sortie et toutes les images de référence ne doit pas dépasser 9 MP.array
Images de référence utilisées pour la génération à partir d’images. Les URL d’images accessibles publiquement et les entrées Base64 sont prises en charge.
- Maximum : 8 images
- Le total formé par l’image de sortie et toutes les images de référence ne doit pas dépasser 9 MP
string
défaut:"jpeg"
Format d’encodage de l’image de sortie. Valeurs prises en charge :
jpeg, png et webp.integer
défaut:"1"
Nombre d’images générées par tâche. La seule valeur prise en charge est
1 ; soumettez plusieurs tâches en parallèle si vous avez besoin de plusieurs images.integer
Graine aléatoire. Réutilisez la même graine et les mêmes paramètres pour obtenir un résultat reproductible ; omettez-la pour utiliser une graine aléatoire.
boolean
défaut:"false"
Indique s’il faut enrichir et reformuler le prompt avant la génération. La valeur par défaut est
false. Transmettez explicitement false pour désactiver la reformulation du prompt.integer
défaut:"2"
Tolérance de sécurité comprise entre
0 et 5. Une valeur élevée est plus permissive.integer
défaut:"50"
Nombre d’étapes d’échantillonnage, de
1 à 50. Une valeur élevée peut améliorer les détails, mais augmente le temps de traitement.Ce paramètre est uniquement pris en charge par flux-2-flex. Ne l’envoyez pas avec flux-2-pro ou flux-2-max.number
défaut:"5.0"
Niveau de guidage du prompt, de
1.5 à 10. Une valeur élevée suit plus fidèlement le prompt.Ce paramètre est uniquement pris en charge par flux-2-flex. Ne l’envoyez pas avec flux-2-pro ou flux-2-max.Tableau de référence des résolutions
| Rapport d’aspect | 1MP | 2MP (par défaut) | 3MP | 4MP |
|---|---|---|---|---|
1:1 | 1024×1024 | 1440×1440 | 1536×1536 | 2048×2048 |
4:3 | 1152×864 | 1664×1248 | 1824×1360 | 2336×1760 |
3:4 | 864×1152 | 1248×1664 | 1360×1824 | 1760×2336 |
16:9 | 1344×752 | 1920×1072 | 2048×1152 | 2720×1536 |
9:16 | 752×1344 | 1072×1920 | 1152×2048 | 1536×2720 |
3:2 | 1248×832 | 1728×1152 | 1872×1248 | 2496×1664 |
2:3 | 832×1248 | 1152×1728 | 1248×1872 | 1664×2496 |
21:9 | 1504×640 | 2176×928 | 2304×992 | 3072×1312 |
9:21 | 640×1504 | 928×2176 | 992×2304 | 1312×3072 |
width + height → size sous forme de dimensions en pixels → resolution + rapport d’aspect size → valeur par défaut 2MP + 1:1.
Exemples d’utilisation
Génération texte-vers-image
{
"model": "flux-2-pro",
"prompt": "A cinematic city at night with neon reflections on wet streets",
"resolution": "1MP",
"size": "16:9"
}
Génération à partir d’images de référence
{
"model": "flux-2-pro",
"prompt": "Place the person from the first image in the scene from the second image and match the lighting",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/scene.jpg"
],
"resolution": "2MP",
"output_format": "webp"
}
Dimensions de sortie exactes
{
"model": "flux-2-max",
"prompt": "A highly detailed botanical illustration",
"width": 1024,
"height": 1536
}
Réglages de FLUX.2 Flex
{
"model": "flux-2-flex",
"prompt": "A minimalist poster with the headline SUMMER SALE and the subheading 50% OFF",
"resolution": "3MP",
"size": "3:4",
"steps": 50,
"guidance": 6.5
}
Réponse
integer
Code d’état de la réponse.
array
Récupérer le résultat
InterrogezGET /v1/tasks/{task_id} jusqu’à ce que la tâche atteigne l’état completed ou failed. Consultez l’API d’état des tâches pour connaître le schéma complet de la réponse.
États de la tâche :
| État | Signification |
|---|---|
submitted / pending | Tâche acceptée ou en attente ; poursuivez l’interrogation. |
processing | Génération en cours ; poursuivez l’interrogation. |
completed | Génération réussie ; l’image se trouve dans result.images. |
failed | Échec de la génération ; consultez data.error.message. La tâche est intégralement remboursée. |
{
"code": 200,
"data": {
"id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2",
"status": "completed",
"progress": 100,
"result": {
"images": [
{
"url": ["https://upload.apimart.ai/f/image/xxxxxxxx-flux-2.jpeg"],
"expires_at": 1785220083
}
]
}
}
}
data.result.images[0].url[0]. Sa date d’expiration est définie par l’horodatage Unix data.result.images[0].expires_at ; téléchargez l’image avant cette échéance.
Paramètres non valides et tâches en échec
Les paramètres de modèle non valides ne produisent pas de réponse 4xx synchrone. La soumission renvoie tout de même HTTP 200 avec untask_id ; poursuivez l’interrogation jusqu’à l’état failed, puis consultez la raison précise dans data.error.message. Les tâches en échec sont intégralement remboursées.
{
"code": 200,
"data": {
"status": "failed",
"error": {
"type": "task_failed",
"code": "task_failed",
"message": "`steps` must be between 1 and 50 (got 0)"
}
}
}
error.code vaut toujours task_failed ; la raison précise se trouve dans error.message.
Remarques
- Les tâches sont traitées de manière asynchrone. La réponse à la soumission renvoie un
task_idpermettant d’interroger leur état. nvaut1par défaut et c’est la seule valeur prise en charge.- Les images de référence peuvent être fournies via des URL accessibles publiquement ou en Base64.
- Jusqu’à 8 images de référence sont prises en charge, dans la limite totale de 9 MP pour les images d’entrée et de sortie.
- Les dimensions de sortie exactes peuvent être définies avec un
sizeen pixels, ou avecwidthetheightfournis ensemble. Dans ce second cas, chaque dimension doit être d’au moins 64 pixels ; la sortie est limitée à 4 MP. - L’expiration de l’URL du résultat est déterminée par la valeur
expires_atrenvoyée dans la réponse de la tâche. - Les paramètres de modèle non valides sont renvoyés de manière asynchrone : interrogez la tâche jusqu’à
failed, puis consultezdata.error.message.