Lots asynchrones
Générez des centaines de descriptions en une seule opération, à un prix inférieur à la génération synchrone.
Le cycle du lot
- Envoyez le lot avec POST /v1/batches — les crédits de tout le lot sont RÉSERVÉS à ce moment-là.
- Interrogez GET /v1/batches/:id — quand le fournisseur termine, ce GET ingère le résultat : il crée les générations, facture les succès sur la réservation et rembourse le reste.
- Le lot passe en status "ended" — lisez les descriptions ou exportez le catalogue.
Envoyer le lot
L'en-tête Idempotency-Key est OBLIGATOIRE (sans lui, 428) : une relance réseau avec la même clé renvoie le même lot au lieu de réserver les crédits deux fois.
POST /v1/batches
Idempotency-Key: lote-otono-2026-v1
{ "product_ids": ["…", "…"] }
{ "id": "…", "status": "submitted", … }Le polling ingère
C'est votre GET qui ingère le résultat dès que le fournisseur a terminé. Interrogez toutes les 30–60 secondes jusqu'à voir status "ended" (ou "failed" ou "cancelled").
GET /v1/batches/{id}
{ "id": "…", "status": "ended", "total": 50, "succeeded_count": 48, "failed_count": 2, … }Si vous cessez de consulter un lot, Bruxel l'ingère de lui-même quelques minutes après sa fin : aucun crédit ne reste réservé. "failed" signifie que les résultats n'existaient plus chez le fournisseur (il les conserve 29 jours) et que la réservation a été intégralement remboursée.
Annuler
POST /v1/batches/:id/cancel annule un lot en cours et rembourse la totalité de la réservation. Si le lot est déjà terminé (ou en cours d'ingestion), la réponse est 409 — faites le polling final pour clore le cycle.