Lotes assíncronos
Gere centenas de descrições em uma única operação, a um preço menor que a geração síncrona.
O ciclo do lote
- Envie o lote com POST /v1/batches — os créditos do lote inteiro são RESERVADOS nesse momento.
- Faça poll de GET /v1/batches/:id — quando o provedor termina, esse GET ingere o resultado: cria as gerações, cobra os sucessos contra a reserva e reembolsa o resto.
- O lote fica em status "ended" — leia as descrições ou exporte o catálogo.
Enviar o lote
O header Idempotency-Key é OBRIGATÓRIO (sem ele, 428): uma nova tentativa de rede com a mesma chave devolve o mesmo lote em vez de reservar créditos duas vezes.
POST /v1/batches
Idempotency-Key: lote-otono-2026-v1
{ "product_ids": ["…", "…"] }
{ "id": "…", "status": "submitted", … }O poll ingere
É o seu GET que ingere o resultado assim que o provedor termina. Faça poll a cada 30–60 segundos até ver status "ended" (ou "failed" ou "cancelled").
GET /v1/batches/{id}
{ "id": "…", "status": "ended", "total": 50, "succeeded_count": 48, "failed_count": 2, … }Se você parar de consultar um lote, o Bruxel o ingere sozinho poucos minutos depois de terminar: nenhum crédito fica reservado. "failed" significa que os resultados já não existiam no provedor (ele os guarda por 29 dias) e a reserva foi reembolsada por completo.
Cancelar
POST /v1/batches/:id/cancel cancela um lote em andamento e reembolsa a reserva completa. Se o lote já terminou (ou está sendo ingerido), responde 409 — faça o poll final para fechar o ciclo.