curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-nano-banana-2.1",
"prompt": "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
"size": "16:9",
"resolution": "2K",
"n": 1
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/images/generations",
headers={"Authorization": "Bearer <token>"},
json={
"model": "gemini-nano-banana-2.1",
"prompt": "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
"size": "16:9",
"resolution": "2K",
"n": 1
}
)
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/images/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "gemini-nano-banana-2.1",
prompt: "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
size: "16:9",
resolution: "2K",
n: 1
})
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Nano banana 2.1
Nano banana 2.1 Génération d’images
Génération texte-image et retouche d’images de référence en 1K / 2K / 4K, avec 10 rapports d’aspect et des versions officielle et Ext.
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": "gemini-nano-banana-2.1",
"prompt": "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
"size": "16:9",
"resolution": "2K",
"n": 1
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/images/generations",
headers={"Authorization": "Bearer <token>"},
json={
"model": "gemini-nano-banana-2.1",
"prompt": "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
"size": "16:9",
"resolution": "2K",
"n": 1
}
)
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/images/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "gemini-nano-banana-2.1",
prompt: "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
size: "16:9",
resolution: "2K",
n: 1
})
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
Choix du modèle
| ID du modèle | Facturation | Images par requête | Taille des images de référence |
|---|---|---|---|
gemini-nano-banana-2.1 | Consommation réelle de tokens | 1–4 | 20MB maximum par image |
gemini-nano-banana-2.1-ext | Par image, selon le niveau de résolution | 1 uniquement | 20MB maximum par image, 50MB au total |
Cet endpoint est asynchrone. Une soumission réussie renvoie un
task_id. Utilisez la consultation des tâches pour récupérer l’état et les images. Interrogez toutes les 3–5 secondes et prévoyez un délai d’attente global d’au moins 3 minutes.curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "gemini-nano-banana-2.1",
"prompt": "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
"size": "16:9",
"resolution": "2K",
"n": 1
}'
import requests
response = requests.post(
"https://api.apimart.ai/v1/images/generations",
headers={"Authorization": "Bearer <token>"},
json={
"model": "gemini-nano-banana-2.1",
"prompt": "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
"size": "16:9",
"resolution": "2K",
"n": 1
}
)
print(response.json())
const response = await fetch("https://api.apimart.ai/v1/images/generations", {
method: "POST",
headers: {
Authorization: "Bearer <token>",
"Content-Type": "application/json"
},
body: JSON.stringify({
model: "gemini-nano-banana-2.1",
prompt: "Un chat roux sur une table en bois près d’une tasse de café, douce lumière matinale, photographie réaliste",
size: "16:9",
resolution: "2K",
n: 1
})
});
console.log(await response.json());
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01K..."
}
]
}
En-têtes de requête
string
requis
Authentification Bearer au format
Bearer <token>, où <token> est votre APIMart API Key.Paramètres de requête
string
requis
ID du modèle :
gemini-nano-banana-2.1 ou gemini-nano-banana-2.1-ext.string
requis
Description textuelle pour la génération ou la retouche d’images. Le chinois et l’anglais sont pris en charge.
string
défaut:"auto"
Rapport d’aspect de sortie. Valeurs prises en charge :
1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9 et 21:9. Le format 16x9 est également accepté.Si ce paramètre est omis ou défini sur auto, le modèle décide. En mode image-image, la sortie suit le rapport d’aspect de l’image de référence.Les autres rapports, notamment 1:4, 4:1, 1:8 et 8:1, ne sont pas pris en charge. Un rapport non pris en charge entraîne l’échec de la tâche et un remboursement.string
défaut:"1K"
Niveau de résolution :
1K, 2K ou 4K. Les minuscules sont acceptées. Ce paramètre influe aussi sur la facturation.0.5K et 512 ne sont pas pris en charge et renvoient HTTP 400 à la soumission. Les autres valeurs non reconnues, comme 3K, sont traitées et facturées en 1K. Utilisez uniquement les valeurs prises en charge ci-dessus.integer
défaut:"1"
Nombre d’images générées : 1–4 pour la version officielle, 1 uniquement pour Ext.Une valeur supérieure à 4 renvoie immédiatement HTTP 400. Une requête Ext avec 2–4 échoue pendant l’exécution et est intégralement remboursée. Pour plusieurs images, soumettez des tâches Ext séparées ou utilisez la version officielle.
string[]
Liste des images de référence. Omettez-la pour le texte-image ; renseignez-la pour l’image-image ou la retouche. Chaque élément accepte :
- Une URL d’image HTTP(S) accessible publiquement.
- Une Data URL Base64, par exemple
data:image/png;base64,....
boolean
défaut:"false"
S’applique uniquement à
gemini-nano-banana-2.1-ext. Si activé, tente de terminer la tâche avec la version officielle en cas d’échec d’Ext.Si la version officielle est effectivement utilisée, la facturation passe à sa consommation réelle de tokens, et non au tarif par image d’Ext.string
URL de rappel notifiée à la fin de la tâche. Voir les webhooks de tâches.
Dimensions de sortie indicatives
| Rapport d’aspect | 1K | 2K | 4K |
|---|---|---|---|
| 1:1 | 1024×1024 | 2048×2048 | 4096×4096 |
| 2:3 | 848×1264 | 1696×2528 | 3392×5056 |
| 3:2 | 1264×848 | 2528×1696 | 5056×3392 |
| 3:4 | 896×1200 | 1792×2400 | 3584×4800 |
| 4:3 | 1200×896 | 2400×1792 | 4800×3584 |
| 4:5 | 928×1152 | 1856×2304 | 3712×4608 |
| 5:4 | 1152×928 | 2304×1856 | 4608×3712 |
| 9:16 | 768×1376 | 1536×2752 | 3072×5504 |
| 16:9 | 1376×768 | 2752×1536 | 5504×3072 |
| 21:9 | 1584×672 | 3168×1344 | 6336×2688 |
Retoucher une image de référence
{
"model": "gemini-nano-banana-2.1-ext",
"prompt": "Ajoutez un bonnet rouge en maille au chat de l’image et ne changez rien d’autre",
"image_urls": ["https://example.com/cat.jpg"],
"resolution": "1K"
}
size est omis, la sortie suit le rapport d’aspect de l’image de référence.
Génération par lot (version officielle uniquement)
{
"model": "gemini-nano-banana-2.1",
"prompt": "Ville cyberpunk de nuit, néons, rues après la pluie",
"size": "16:9",
"resolution": "2K",
"n": 4
}
Réponse de soumission
integer
Code de statut de la réponse.
200 indique un succès.array
Résultat de la soumission.
status vaut submitted. task_id sert à consulter l’état et les résultats ; ce n’est pas l’URL de l’image finale.Consulter les résultats
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01K... \
--header 'Authorization: Bearer <token>'
{
"code": 200,
"data": {
"id": "task_01K...",
"status": "completed",
"progress": 100,
"result": {
"images": [
{
"url": ["https://example.com/generated-image.png"],
"expires_at": 1791417625
}
]
}
}
}
| État de la tâche | Signification |
|---|---|
pending | En attente |
processing | Génération en cours |
completed | Succès ; lire le tableau des URL dans data.result.images[0].url |
failed | Échec ; motif dans data.error.message. Remboursement intégral ; data.cost vaut 0 |
data.result.images[0].url. Pour 4 images générées, ce tableau contient 4 liens. Seules les images finales sont renvoyées ; n=1 correspond à 1 image finale.
Les liens expirent 24 heures après la fin de la tâche, selon expires_at. Téléchargez et sauvegardez les images rapidement. La sortie est en PNG ou JPEG ; le contenu réel du fichier fait foi. data.cost dans le résultat de consultation indique le montant final facturé en USD.
Facturation
- Version officielle : facturation selon les tokens d’entrée et de sortie réellement utilisés. Les prompts et images de référence comptent en entrée. Un montant est prélevé à la soumission selon la résolution et
n, puis ajusté à la consommation réelle par remboursement ou prélèvement complémentaire. - Version Ext : prix unitaire du niveau de résolution × nombre réel d’images générées. Le rapport d’aspect n’affecte pas le niveau. Si
official_fallbackest activé et que la version officielle est effectivement utilisée, sa facturation par tokens s’applique. - Consultez les tarifs des modèles pour les prix unitaires. Une requête rejetée à la soumission ne crée aucune tâche et n’est pas facturée. Les tâches échouées sont intégralement remboursées.
Erreurs courantes
| Situation | Action |
|---|---|
| HTTP 400 | Vérifier 0.5K / 512, n supérieur à 4 ou une image de référence dépassant la taille maximale par image |
| HTTP 401 | Vérifier l’API Key |
| HTTP 402 | Vérifier que le solde couvre le prélèvement initial |
| HTTP 429 | Limite de débit atteinte ; réessayer avec un délai croissant |
| Échec : rapport d’aspect non pris en charge | Utiliser l’un des 10 rapports size pris en charge ou auto |
| Échec : plusieurs images demandées avec Ext | Définir n sur 1 ou utiliser la version officielle |
| Échec : blocage de sécurité du contenu | Modifier le prompt ou les images de référence puis réessayer |
| Échec : téléchargement de l’image de référence impossible | Vérifier que l’URL d’image est accessible publiquement |
Nano banana 2.1 et Gemini 3.1 Flash Image sont des modèles différents ; leurs noms ne sont pas des alias interchangeables. Lors d’une migration depuis ce dernier, remplacez la résolution
0.5K et les quatre rapports extrêmes 1:4, 4:1, 1:8 et 8:1.