bruxel.ai

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.

Lotes assíncronos — Bruxel