Batch API (traitement asynchrone)
IA / LLM 🟡 MidDéfinition
Endpoint qui accepte un lot de requêtes traitées en différé avec 50 % de remise sur entrée et sortie. Anthropic : jusqu'à 100 000 requêtes par lot, la plupart terminés en moins d'une heure, résultats dans n'importe quel ordre (clé custom_id). OpenAI : fichier JSONL, 50 000 requêtes et 200 Mo max, fenêtre de 24 h. Pas de streaming, pas de fast mode.
Analogie
Le tarif de nuit de l'électricité : moitié prix si l'on accepte d'attendre.
Exemple de code
const batch = await client.messages.batches.create({
requests: articles.map(a => ({
custom_id: `article-${a.id}`, // clé de rapprochement
params: {
model: 'claude-haiku-4-5', max_tokens: 200,
messages: [{ role: 'user', content: `Résume en 2 phrases : ${a.body}` }],
},
})),
});
let status = batch;
while (status.processing_status !== 'ended') {
await new Promise(r => setTimeout(r, 30_000));
status = await client.messages.batches.retrieve(batch.id);
}
for await (const r of await client.messages.batches.results(batch.id))
if (r.result.type === 'succeeded') save(r.custom_id, r.result.message);
Cas d'usage
Résumés, classification, embeddings ou évaluations en masse ; jobs nocturnes sans exigence de latence.
Anti-pattern
Rapprocher les résultats par position au lieu de custom_id : l'ordre de retour n'est pas garanti.
Termes liés
Sources
Fiche mise à jour le 2026-09-27