TokenLab

Images

Créer une image

Crée une image à partir d'une consigne (prompt)

POST
/v1/images/generations

Aperçu

Utilisez GET /v1/models?recommended_for=image pour obtenir les modèles d'image actuels, puis envoyez explicitement le model sélectionné.

gpt-image-2 est un modèle GPT Image facturé au jeton (token). TokenLab suit la répartition officielle d'OpenAI pour les jetons d'entrée de texte, d'entrée d'image, d'entrée mise en cache et de sortie d'image ; il n'est pas facturé comme un modèle à prix fixe par image.

Pour la génération d'images avec gpt-image-2, les paramètres publics pris en charge sont prompt, n, size, quality, response_format, async, background, output_format, output_compression ou compression, moderation et user. background accepte auto ou opaque ; transparent n'est pas pris en charge. Omettez size ou quality pour laisser TokenLab utiliser auto ; les valeurs de size personnalisées doivent utiliser le contrat flexible WIDTHxHEIGHT documenté ci-dessous.

input_fidelity ne fait pas partie des champs actuellement pris en charge par TokenLab pour gpt-image-2 ; omettez-le, sinon la requête renverra 400 unsupported_parameter.

Remarques sur le comportement des modèles

Les modèles de la famille d'images Google Gemini ne partagent pas le même contrat de sélection :

  • gemini-3.1-flash-image, gemini-nano-banana-2.1, gemini-3-pro-image, nano-banana-2.1 et nano-banana-pro prennent en charge aspect_ratio ainsi que resolution (1k, 2k, 4k) pour leurs opérations publiques de texte vers image, image vers image et modification d'image.
  • nano-banana-2 prend en charge aspect_ratio et resolution (1k, 2k, 4k) pour la génération de texte vers image et d'image vers image.
  • gemini-3.1-flash-lite-image et nano-banana-2-lite prennent en charge le texte vers image, l'image vers image et la modification d'image uniquement à une résolution 1k.
  • nano-banana prend en charge aspect_ratio mais n'expose pas de sélection de resolution publique.
  • Pour l'image vers image avec gemini-3.1-flash-image, gemini-nano-banana-2.1, gemini-3.1-flash-lite-image ou gemini-3-pro-image, utilisez ce point de terminaison avec operation: "image-to-image" et des images de référence. Envoyez les requêtes de modification d'image pour ces modèles vers /v1/images/edits.
  • Pour les requêtes d'image de référence Nano Banana, utilisez nano-banana-2, nano-banana-2.1, nano-banana-2-lite ou nano-banana-pro sur ce point de terminaison (/v1/images/generations) avec operation: "image-to-image" et image_urls. Les requêtes de modification d'image pour nano-banana-2, nano-banana-2.1, nano-banana-2-lite et nano-banana-pro utilisent également ce point de terminaison, avec operation: "image-edit". N'envoyez pas de requêtes d'image de référence Nano Banana vers /v1/images/edits.
  • Les images de référence sur ce point de terminaison peuvent être fournies sous forme de image_url / image_urls JSON, ou sous forme de fichier multipart image. images[] et file_id ne sont pas acceptés sur /v1/images/generations ; créez des références /v1/files uniquement pour les modèles /v1/images/edits qui documentent images[].file_id.

Pour les familles d'images Google, privilégiez aspect_ratio et n'envoyez resolution que lorsque le modèle le prend explicitement en charge.

Les modèles d'image xAI Grok Imagine (grok-imagine-image, grok-imagine-image-quality et l'ancien grok-imagine-image-pro) prennent en charge aspect_ratio ainsi que resolution (1k, 2k). grok-imagine-image-pro est conservé comme identifiant de compatibilité pour grok-imagine-image-quality.

Corps de la requête

Délai d'expiration de la requête synchrone : Certaines requêtes d'image renvoient l'image finale en ligne et attendent la fin de la génération. Les requêtes haute résolution ou haute qualité peuvent prendre près d'une minute ou plus, réglez donc le délai d'expiration de votre client HTTP sur au moins 120s. Si la réponse de création inclut status: "pending", task_id ou poll_url, suivez plutôt le poll_url renvoyé.

modelstringrequis

Modèle à utiliser (par exemple, gpt-image-2, flux-pro-1.1 ou nano-banana-pro). Interrogez GET /v1/models?recommended_for=image pour obtenir la liste recommandée actuelle.

promptstringrequis

Description textuelle de l'image souhaitée.

image_urlstring

URL publique HTTPS de l'image de référence pour la génération d'image vers image. Pour les requêtes d'image de référence Nano Banana, définissez operation sur image-to-image ; nano-banana-pro peut inclure resolution.

image_urlsstring[]

URLs publiques HTTPS des images de référence. Utilisez ceci pour une ou plusieurs images de référence dans les requêtes JSON. file_id et images[] ne sont pas pris en charge sur ce point de terminaison.

reference_image_urlsstring[]

URLs d'images de référence supplémentaires pour les modèles qui distinguent les entrées principales des références.

imagefile

Fichier d'image de référence multipart pour la génération d'image vers image. Utilisez ceci lorsque l'image source est privée ou protégée par des en-têtes. Ceci est différent d'un file_id de /v1/files, qui n'est pas accepté sur ce point de terminaison.

nintegerpar défaut: 1

Nombre d'images à générer (1-10, selon le modèle).

sizestring

Taille de l'image. Utilisez ceci pour les familles d'images de style OpenAI et les autres modèles qui acceptent des tailles de pixels exactes.

Pour gpt-image-2, size accepte auto ou WIDTHxHEIGHT. Les dimensions personnalisées doivent toutes deux être des multiples de 16, le bord le plus long doit être au maximum de 3840px, le rapport long/court doit être au maximum de 3:1 et le nombre total de pixels doit être compris entre 655 360 et 8 294 400. aspect_ratio et resolution ne font pas partie des détails du modèle TokenLab actuel pour gpt-image-2.

Pour les modèles d'image Google avec des niveaux de résolution (gemini-3.1-flash-image, gemini-nano-banana-2.1, gemini-3-pro-image, gemini-3.1-flash-lite-image, nano-banana-2, nano-banana-2.1 et nano-banana-pro), size accepte une taille de sortie issue du tableau de tailles du modèle, telle que 1376x768 (16:9 à 1K), ou un niveau de résolution : 1K, 2K ou 4K. TokenLab envoie un niveau sous forme de resolution, donc la requête et son prix sont les mêmes qu'avec resolution. Un niveau que le modèle ne prend pas en charge (par exemple 2K sur gemini-3.1-flash-lite-image), ou un niveau différent de resolution, renvoie 400 avec le code invalid_image_size_contract et les allowed_resolutions du modèle. Pour ces modèles, la forme recommandée est aspect_ratio avec resolution.

aspect_ratiostring

Sélecteur de rapport d'aspect dépendant du modèle.

Les valeurs courantes de la famille d'images Google incluent 1:1, 16:9, 9:16, 3:2 et 2:3.

resolutionstring

Résolution de sortie dépendante du modèle. gemini-3.1-flash-image, gemini-nano-banana-2.1, gemini-3-pro-image, nano-banana-2, nano-banana-2.1 et nano-banana-pro prennent en charge 1k, 2k et 4k ; les modèles Grok Imagine image prennent en charge 1k et 2k. Omettez ce champ à moins que le modèle et l'opération sélectionnés ne le prennent explicitement en charge.

qualitystring

Qualité de l'image. Les modèles GPT Image tels que gpt-image-2 utilisent auto, low, medium ou high. D'autres modèles peuvent utiliser des valeurs différentes ; vérifiez les détails du modèle avant d'envoyer une valeur non par défaut.

response_formatstring

Comment les images sont renvoyées : url ou b64_json.

  • Omis : lorsque le modèle renvoie des octets d'image, chaque image est dans data[].b64_json, et également dans data[].url lorsque TokenLab l'a stockée. Lorsque le modèle renvoie un lien, chaque image est dans data[].url.
  • url : chaque image est uniquement dans data[].url.
  • b64_json : chaque image est uniquement dans data[].b64_json sous forme de données Base64.

Les liens sont des URLs de résultats multimédias TokenLab. Ils restent valides pendant 30 jours. Voir Conservation des données.

asyncbooleanpar défaut: false

Définissez sur true avec gpt-image-2 ou les modèles d'image officiels FLUX/BFL pour créer d'abord une tâche. Les tâches d'image asynchrones terminées renvoient des URLs indépendamment du response_format demandé ; utilisez des requêtes synchrones lorsque vous avez besoin de b64_json.

stylestring

Sélecteur de style optionnel. Envoyez ceci uniquement lorsque le modèle sélectionné le documente explicitement ; omettez-le pour gpt-image-2 à moins que les métadonnées du modèle n'indiquent le contraire.

userstring

Un identifiant unique pour l'utilisateur final.

Réponse

Réponse en ligne

createdinteger

Horodatage Unix de la création.

dataarray

Tableau des images générées.

Chaque objet contient :

  • url (string) : URL de résultat multimédia TokenLab de l'image, valide pendant 30 jours. Non présent lorsque response_format est b64_json. Lorsque response_format est omis, il est absent si TokenLab n'a pas pu stocker l'image.
  • b64_json (string) : Données d'image Base64. Présent lorsque response_format est b64_json, ou lorsqu'il est omis et que le modèle renvoie des octets d'image.
  • revised_prompt (string) : Révision optionnelle de la consigne, lorsque le modèle sélectionné en renvoie une.

Réponse de tâche asynchrone

Définissez async: true avec gpt-image-2 ou les modèles d'image officiels FLUX/BFL pour créer une tâche au lieu d'attendre l'image finale dans la requête de création. La réponse inclut status: "pending", task_id et poll_url. Interrogez /v1/tasks/{task_id} jusqu'à ce que la tâche atteigne completed ou failed.

Les tâches d'image asynchrones renvoient uniquement les URLs des images finales. Si vous avez besoin de données d'image brutes b64_json, utilisez une requête synchrone.

La facturation peut réserver le montant estimé lors de la création de la tâche. Les tâches terminées sont facturées selon l'utilisation réelle, et les tâches ayant échoué ou ayant expiré sont libérées ou remboursées.

createdinteger

Horodatage Unix de la création.

task_idstring

Identifiant de tâche unique pour l'interrogation.

statusstring

Statut initial : pending.

poll_urlstring

URL relative à interroger pour obtenir les résultats, par exemple /v1/tasks/{id}.

dataarray

Vide tant que la tâche est en attente. Les tâches d'image terminées renvoient les URLs des images générées dans data[].url.

Lorsque vous recevez status: "pending", utilisez poll_url ou GET /v1/tasks/{task_id} pour récupérer le résultat.

Requête

cURL
curl -X POST "https://api.tokenlab.sh/v1/images/generations" \
  -H "Authorization: Bearer sk-your-api-key" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gemini-3-pro-image",
    "prompt": "A cinematic portrait of a white cat sitting on a rainy windowsill",
    "aspect_ratio": "16:9",
    "resolution": "2k"
  }'
Python
from openai import OpenAI

client = OpenAI(
    api_key="sk-your-api-key",
    base_url="https://api.tokenlab.sh/v1"
)

response = client.images.generate(
    model="gemini-3-pro-image",
    prompt="A cinematic portrait of a white cat sitting on a rainy windowsill",
    extra_body={"aspect_ratio": "16:9", "resolution": "2k"}
)

print(response.data[0].url)
JavaScript
import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: 'sk-your-api-key',
  baseURL: 'https://api.tokenlab.sh/v1'
});

const response = await client.images.generate({
  model: 'gemini-3-pro-image',
  prompt: 'A cinematic portrait of a white cat sitting on a rainy windowsill',
  aspect_ratio: '16:9',
  resolution: '2k'
});

console.log(response.data[0].url);
PHP
<?php
$ch = curl_init('https://api.tokenlab.sh/v1/images/generations');

curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Content-Type: application/json',
        'Authorization: Bearer sk-your-api-key'
    ],
    CURLOPT_POSTFIELDS => json_encode([
        'model' => 'gemini-3-pro-image',
        'prompt' => 'A cinematic portrait of a white cat sitting on a rainy windowsill',
        'aspect_ratio' => '16:9',
        'resolution' => '2k'
    ])
]);

$response = curl_exec($ch);
curl_close($ch);

$data = json_decode($response, true);
echo $data['data'][0]['url'];

Exemple de famille d'images avec rapport uniquement : pour nano-banana, envoyez aspect_ratio mais omettez resolution :

{
  "model": "nano-banana",
  "prompt": "A clean editorial product shot of a citrus soda can",
  "aspect_ratio": "16:9"
}

Exemple d'image de référence Nano Banana Pro : envoyez la requête vers /v1/images/generations, pas /v1/images/edits. resolution est optionnel et peut être défini sur 1k, 2k ou 4k :

{
  "model": "nano-banana-pro",
  "prompt": "Create a clean cinematic character image based on the reference images",
  "operation": "image-to-image",
  "image_urls": ["https://example.com/reference-1.png"],
  "aspect_ratio": "1:1",
  "resolution": "2k"
}

Exemple de téléchargement multipart direct pour des images sources privées ou locales. Ne passez pas de file_id à /v1/images/generations :

curl -X POST "https://api.tokenlab.sh/v1/images/generations" \
  -H "Authorization: Bearer sk-your-api-key" \
  -F "model=nano-banana-pro" \
  -F "prompt=Create a clean cinematic character image based on this reference" \
  -F "operation=image-to-image" \
  -F "image=@reference.png" \
  -F "aspect_ratio=1:1" \
  -F "resolution=2k"

Réponse

{
  "created": 1706000000,
  "data": [
    {
      "url": "https://...",
      "revised_prompt": "A fluffy white cat with bright eyes sitting peacefully on a wooden windowsill, watching raindrops stream down the glass window..."
    }
  ]
}

Choisir un modèle

Interrogez GET /v1/models?recommended_for=image ou utilisez la page Modèles pour connaître la disponibilité, les capacités et les prix actuels.

Ne codez pas en dur un modèle comme étant toujours synchrone ou toujours asynchrone. Si la réponse de création renvoie status: "pending", suivez poll_url et interrogez jusqu'à la fin.

Gestion des réponses basées sur des tâches

Pour les modèles d'image, vérifiez toujours si la réponse contient status: "pending" / status: "processing" :

import requests
import time

def generate_image(prompt, model="gpt-image-2"):
    # Créer une requête d'image
    response = requests.post(
        "https://api.tokenlab.sh/v1/images/generations",
        headers={"Authorization": "Bearer sk-your-api-key"},
        json={"model": model, "prompt": prompt, "async": True},
        timeout=120
    )
    response.raise_for_status()
    data = response.json()

    # Vérifier si c'est basé sur une tâche
    if data.get("status") in ("pending", "processing"):
        task_id = data["task_id"]
        poll_url = data.get("poll_url")
        print(f"Image task started: {task_id}")

        # Interroger pour le résultat
        while True:
            status_resp = requests.get(
                f"https://api.tokenlab.sh{poll_url}" if poll_url else f"https://api.tokenlab.sh/v1/tasks/{task_id}",
                headers={"Authorization": "Bearer sk-your-api-key"},
                timeout=30
            )
            status_resp.raise_for_status()
            status_data = status_resp.json()

            if status_data["status"] == "completed":
                return status_data["data"][0]["url"]
            elif status_data["status"] == "failed":
                raise Exception(status_data.get("error", "Generation failed"))

            time.sleep(3)
    else:
        # Réponse en ligne
        return data["data"][0]["url"]

# Utilisation
url = generate_image("a beautiful sunset over mountains", model="gpt-image-2")
print(f"Generated image: {url}")

Hy Image 3.5 Preview crée des images carrées de 1024 pixels à partir de texte et modifie des images de référence en utilisant des instructions écrites. Il est utile pour esquisser des visuels et affiner une composition.

{
  "model": "hy-image-v3.5-preview",
  "prompt": "A yellow lemon on a white table",
  "size": "1024x1024",
  "n": 1,
  "response_format": "url"
}

Autorisation

BearerAuth
AuthorizationBearer <token>

Authentification par clé API. Créez ou gérez vos clés API dans Dashboard > API > API Keys.

Emplacement: header

En-têtes

X-TokenLab-Delivery-Policy?string

Politique de livraison par requête. Remplace les valeurs par défaut de la clé API et de l'espace de travail. Tente automatiquement TokenLab Verified en premier et peut basculer une fois vers Official uniquement avant la sortie, l'acceptation de la requête ou la création de ressource persistante.

Valeurs possibles

  • "auto"
  • "verified"
  • "official"

Corps de la requête

Réponse

application/json

application/json

application/json

application/json

application/json

application/json

application/json