input_image vs image_url : les deux syntaxes
Mis à jour le 30 juillet 2026
Deux API, deux syntaxes
L’API xAI propose deux endpoints pour interagir avec Grok, et chacun utilise une syntaxe différente pour envoyer des images. Comprendre ces différences est essentiel pour écrire du code correct et éviter des erreurs frustrantes.
API Responses : input_image (recommandée)
L’API Responses est le nouvel endpoint principal de xAI. Les nouvelles fonctionnalités y sont ajoutées en priorité. C’est l’API à privilégier pour tout nouveau projet.
Syntaxe
{
"model": "grok-4.5",
"store": false,
"input": [
{
"type": "input_image",
"image_url": "https://exemple.com/photo.jpg",
"detail": "high"
},
{
"type": "input_text",
"text": "Décris cette image."
}
]
}
Caractéristiques
- Le type est
input_image(pasimage_url) - L’URL ou le Data URI est directement dans
image_url(pas d’objet imbriqué) - Le
detailest au même niveau queimage_url - Le texte utilise le type
input_text - Le tableau
inputremplace le tableaumessagesde Chat Completions
Python SDK
response = client.responses.create(
model="grok-4.5",
input=[
{
"type": "input_image",
"image_url": "https://exemple.com/photo.jpg",
"detail": "high"
},
{
"type": "input_text",
"text": "Décris cette image."
}
],
store=False
)
print(response.output_text)
API Chat Completions : image_url (legacy)
L’API Chat Completions est l’endpoint legacy, maintenu pour la compatibilité avec les SDKs OpenAI existants. Si vous migrez du code écrit pour OpenAI, cette API facilite la transition.
Syntaxe
{
"model": "grok-4.5",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://exemple.com/photo.jpg",
"detail": "high"
}
},
{
"type": "text",
"text": "Décris cette image."
}
]
}
]
}
Caractéristiques
- Le type est
image_url(pasinput_image) - L’URL est dans un objet imbriqué
image_url.url(double imbrication) - Le
detailest à l’intérieur de l’objetimage_url - Le texte utilise le type
text(pasinput_text) - Les messages ont un
role(system, user, assistant)
Python avec SDK OpenAI
from openai import OpenAI
client = OpenAI(
api_key="votre-clé-xai",
base_url="https://api.x.ai/v1"
)
response = client.chat.completions.create(
model="grok-4.5",
messages=[{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://exemple.com/photo.jpg",
"detail": "high"
}
},
{
"type": "text",
"text": "Décris cette image."
}
]
}]
)
print(response.choices[0].message.content)
Tableau comparatif
| Aspect | API Responses | Chat Completions |
|---|---|---|
| Statut | Principal (recommandé) | Legacy (compatibilité) |
| Type image | input_image | image_url |
| Type texte | input_text | text |
| URL de l'image | image_url: "..." | image_url.url: "..." |
| Gestion d'état | Stateful (previous_response_id) | Stateless (tout renvoyer) |
| Stockage | store: true/false | Non (stateless) |
| Outils serveur | web_search, x_search, code_interpreter | Limité |
Erreurs courantes de syntaxe
Erreur 1 : mélanger les formats
# FAUX — syntaxe Chat Completions dans l'API Responses
input=[
{"type": "image_url", "image_url": {"url": "..."}} # Non !
]
# CORRECT — syntaxe API Responses
input=[
{"type": "input_image", "image_url": "..."} # Oui !
]
Erreur 2 : oublier la double imbrication en Chat Completions
# FAUX — URL directe dans Chat Completions
{"type": "image_url", "image_url": "https://..."} # Non !
# CORRECT — objet imbriqué
{"type": "image_url", "image_url": {"url": "https://..."}} # Oui !
Erreur 3 : utiliser “text” au lieu de “input_text”
# FAUX — type "text" dans l'API Responses
input=[
{"type": "text", "text": "Décris."} # Non !
]
# CORRECT
input=[
{"type": "input_text", "text": "Décris."} # Oui !
]
Quand utiliser quelle API
- Nouveau projet : utilisez l’API Responses. Elle donne accès aux dernières fonctionnalités et au stockage des conversations
- Migration depuis OpenAI : commencez avec Chat Completions pour minimiser les changements de code, puis migrez vers l’API Responses progressivement
- Images sensibles : l’API Responses avec
store: falseou l’API Chat Completions (stateless par nature)
Points clés à retenir
- L’API Responses utilise
input_image+input_text, l’API Chat Completions utiliseimage_url+text - La structure de l’URL diffère : directe dans Responses, imbriquée dans Chat Completions
- L’API Responses est le choix recommandé pour tout nouveau développement
- Ne mélangez jamais les syntaxes des deux API dans une même requête
- Vérifiez toujours le type d’objet (
input_imagevsimage_url) pour éviter les erreurs silencieuses
Testez vos connaissances
La vision par l’API xAI : formats, tokens, syntaxes — tout est en place ?
1. Comment envoie-t-on une image à l'API ?
Réponse : Par URL ou en Base64, dans un message au contenu mixte — en respectant les contraintes de formats et de taille documentées.
2. Que règle le paramètre de détail (auto, low, high) ?
Réponse : La finesse d’analyse et son coût : low économise les tokens pour les usages grossiers, high maximise la précision (OCR, détails fins), auto laisse l’API arbitrer.
3. Comment se calcule le coût d'une image ?
Réponse : En tokens image — de 256 à 1792 selon la résolution et le détail : dimensionner ses images et son niveau de détail est le premier levier d’optimisation.
4. Que permet la comparaison multi-images ?
Réponse : Envoyer plusieurs images dans une même requête et raisonner dessus — différences, évolutions, cohérence — le nombre d’images par requête n’étant pas limité.
5. input_image ou image_url : que choisir ?
Réponse : input_image est la syntaxe moderne de la Responses API ; image_url subsiste en héritage Chat Completions — pour le nouveau code, la syntaxe moderne s’impose.
Bon format, bon détail, bonne syntaxe : la vision se pilote comme le texte — au token près.