Lotes de enriquecimento
Cria, lista e consulta lotes que geram com IA textos, características e SEO para muitos produtos de uma vez.
Um lote é uma fila de trabalho: você descreve com um filtro quais produtos quer enriquecer e quais campos quer gerar, e a plataforma passa a gerar uma proposta para cada produto, em segundo plano (até 4 produtos em paralelo). A criação responde na hora; o andamento você acompanha consultando o lote (done_items, failed_items, status).
Cada produto vira um item com sua proposta. Nada é gravado no produto até você aprovar o item (Itens do lote), com uma exceção que você escolhe: os campos de auto_apply_fields, gravados assim que são gerados.
Quando usar: catálogos recém-importados com descrições vazias, melhoria de SEO em massa, preenchimento de características que faltam.
/api/v1/admin/ai-product-fill/batchesAdminCria um lote e inicia a geração
Privilégio exigido: manage_ai_tools ou manage_catalog. Resposta 201 com o lote criado; a geração começa em segundo plano.
Corpo da requisição
filterobjectQuais produtos entram. Sem filter (ou com {}), entram todos os produtos ativos do catálogo, até o limite de 10.000. Produtos excluídos nunca entram. Os critérios se combinam com "e".
category_idsarrayvendor_iduuidempty_descriptionbooleanpadrão: falsetrue seleciona produtos sem descrição ou com menos de 200 caracteres de texto (as marcações HTML não contam).no_featuresbooleanpadrão: falsetrue seleciona produtos que não têm nenhuma característica preenchida.include_disabledbooleanpadrão: falsetrue os inclui.fieldsarrayobrigatóriodescriptionshort_descriptionseo_titleseo_descriptionimage_alt_textfeaturesfields required. image_alt_text gera um texto alternativo por foto (só funciona em produto com fotos); features propõe pares nome/valor de características.auto_apply_fieldsarrayimage_alt_textseo_descriptionExemplo de requisição (criar)
curl -X POST "$BASE_URL/api/v1/admin/ai-product-fill/batches" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"filter": { "empty_description": true, "include_disabled": false },
"fields": ["description", "features"],
"auto_apply_fields": []
}'Resposta (criar)
{
"id": "7d87db3d-2682-42f5-9c40-a91d94e7bf98",
"filter": {
"category_ids": [],
"vendor_id": null,
"empty_description": true,
"no_features": false,
"include_disabled": false
},
"fields": ["description", "features"],
"auto_apply_fields": [],
"status": "queued",
"total_items": 1873,
"done_items": 0,
"failed_items": 0,
"score_before": null,
"score_after": null,
"created_at": "2026-07-13T03:11:04.869808Z"
}Campos da resposta
iduuidfilterobjectfieldsarrayauto_apply_fieldsarraytotal_itemsintegerdone_itemsintegerfailed_itemsintegerscore_beforenumbernull logo após a criação.score_afternumbernull ou igual ao valor inicial; não use como medida de resultado.created_atstringErros (criar)
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo não é JSON válido. | {"error":"invalid_request_body"} |
| 400 | fields vazio ou só com nomes inválidos. | {"error":"fields required"} |
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Sem manage_ai_tools nem manage_catalog. | {"error":"insufficient privileges","privilege_required_any":["manage_ai_tools","manage_catalog"]} |
| 422 | O filtro não encontrou nenhum produto. Nada é criado. | {"error":"nenhum produto corresponde ao filtro"} |
/api/v1/admin/ai-product-fill/batchesAdminLista os lotes recentes
Privilégio exigido: manage_ai_tools ou manage_catalog. Devolve até os 200 lotes mais novos, sem paginação e sem filtros.
Exemplo de requisição (listar)
curl "$BASE_URL/api/v1/admin/ai-product-fill/batches" \
-H "Authorization: Bearer $TOKEN"Resposta (listar)
{
"batches": [
{
"id": "82ae9416-ec09-43bf-9c56-16daa9598e3f",
"filter": { "category_ids": [], "vendor_id": null, "empty_description": true, "no_features": false, "include_disabled": false },
"fields": ["description", "features"],
"auto_apply_fields": [],
"status": "cancelled",
"total_items": 1575,
"done_items": 156,
"failed_items": 0,
"score_before": 65.4,
"score_after": null,
"created_at": "2026-07-20T00:36:58.359926Z"
}
],
"total": 1
}Campos da resposta
batchesarraytotalintegerErros (listar)
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Sem o privilégio necessário. | {"error":"insufficient privileges","privilege_required_any":["manage_ai_tools","manage_catalog"]} |
| 500 | Falha ao consultar. | {"error":"..."} |
/api/v1/admin/ai-product-fill/batches/{id}AdminConsulta um lote
Privilégio exigido: manage_ai_tools ou manage_catalog. Use para acompanhar o progresso: repita a consulta a cada poucos segundos até status ser completed.
Parâmetros de caminho
iduuidobrigatórioExemplo de requisição (consultar)
curl "$BASE_URL/api/v1/admin/ai-product-fill/batches/7d87db3d-2682-42f5-9c40-a91d94e7bf98" \
-H "Authorization: Bearer $TOKEN"Resposta (consultar)
{
"id": "7d87db3d-2682-42f5-9c40-a91d94e7bf98",
"filter": { "category_ids": [], "vendor_id": null, "empty_description": true, "no_features": false, "include_disabled": false },
"fields": ["description", "features"],
"auto_apply_fields": [],
"status": "completed",
"total_items": 1873,
"done_items": 1870,
"failed_items": 3,
"score_before": 53.4,
"score_after": 53.4,
"created_at": "2026-07-13T03:11:04.869808Z"
}Os campos são os mesmos da criação.
Erros (consultar)
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"invalid or expired token"} |
| 403 | Sem o privilégio necessário. | {"error":"insufficient privileges","privilege_required_any":["manage_ai_tools","manage_catalog"]} |
| 404 | Lote inexistente (ou id que não é UUID válido). | {"error":"sql: no rows in result set"} |
Veja também
- Controlar o lote: pausar, retomar e cancelar.
- Itens do lote: revisar as propostas.
- Aplicar em massa