Importação de produtos por IA
Lê um arquivo de produtos (CSV, XLSX ou DOCX), simula e executa a criação e atualização em massa, e lista o histórico.
A importação tem dois passos separados. parse manda o arquivo e a VI interpreta as colunas, mesmo desorganizadas, devolvendo linhas de produto no formato da plataforma. run recebe essas linhas (que você pode corrigir antes) e cria ou atualiza os produtos. Entre um e outro, a interface mostra a tabela para o administrador conferir. O recurso é a chave enable_ai_bulk_product_import.
Regras da importação
- A linha sem nome e sem SKU é ignorada (
skipped). - Um SKU que já existe atualiza o produto: nome, descrição, preço e estoque são substituídos pelo que a linha traz, mesmo vazio ou zero. Categoria só muda se a linha informar uma.
- Sem SKU existente, a linha cria um produto ativo; o nome é obrigatório. Sem categoria informada, o produto vai para uma categoria padrão.
- Cada linha tem seu próprio resultado: uma linha com erro não impede as outras.
- Com
dry_run: true, nada é gravado nos produtos, mas a simulação fica registrada no histórico.
Ler o arquivo
Interpreta o arquivo e devolve as linhas de produto. Não grava nada na loja. Aceita .csv, .xlsx e .docx, até 10 MB.
/api/v1/admin/intelligence/import/parseAdminLer um arquivo de produtos
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador (veja Tokens).Corpo da requisição
filefileobrigatóriomultipart/form-data.Exemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/intelligence/import/parse" \
-H "Authorization: Bearer $TOKEN" \
-F "file=@produtos.xlsx"Resposta
{
"format": "xlsx",
"filename": "produtos.xlsx",
"rows": [
{ "name": "Mouse Gamer Titan", "sku": "MG-01", "price_centavos": 12990, "stock": 40, "description": "Sensor óptico 16.000 DPI", "category_hint": "Periféricos" }
]
}Campos da resposta
formatstringcsvxlsxdocxfilenamestringrowsarrayrows[].namestringrows[].skustringrows[].price_centavosintegerrows[].stockintegerrows[].descriptionstringrows[].category_hintstringrows[].category_iduuidcategory_hint.rows[].image_url_hintstringErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O administrador não tem nenhum dos privilégios exigidos. | {"error":"insufficient privileges","privilege_required_any":["manage_catalog","intelligence_use_bulk_import"]} |
| 400 | Não é multipart, falta file, formato não suportado ou arquivo vazio. | {"error":"file field missing"} ou {"error":"intelligence import: unsupported format (expected .csv, .xlsx, .docx)"} |
| 403 | Importação por IA desligada. | {"error":"AI bulk product import is disabled ..."} |
| 413 | Arquivo acima de 10 MB. | {"error":"intelligence import: file exceeds 10 MB cap"} |
| 503 | Sem provedor de IA configurado. | {"error":"no AI provider configured"} |
Importar ou simular
Cria ou atualiza os produtos das linhas enviadas. A chamada é síncrona e só volta quando todas as linhas foram processadas.
/api/v1/admin/intelligence/import/runAdminImportar ou simular
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
rowsarrayobrigatórioparse (campos abaixo). Não pode estar vazio.dry_runbooleanpadrão: falsetrue simula: cada linha informa o que aconteceria, sem gravar produtos.filenamestringformatstringrows[].namestringrows[].skustringrows[].price_centavosintegerrows[].stockintegerrows[].descriptionstringrows[].category_hintstringrows[].category_iduuidcategory_hint.rows[].image_url_hintstringExemplo de requisição
curl -X POST "$BASE_URL/api/v1/admin/intelligence/import/run" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"dry_run": true,
"filename": "produtos.xlsx",
"format": "xlsx",
"rows": [
{
"name": "Mouse Gamer Titan",
"sku": "MG-01",
"price_centavos": 12990,
"stock": 40,
"description": "Sensor óptico 16.000 DPI",
"category_hint": "Periféricos"
}
]
}'Resposta
{
"run_id": "bcf4c219-1811-4402-8c3c-a8564ca50361",
"dry_run": true,
"total_rows": 1,
"created_count": 1,
"updated_count": 0,
"skipped_count": 0,
"errored_count": 0,
"rows": [
{
"row": { "name": "Produto Teste", "sku": "DOCS-PROBE-1", "price_centavos": 1990, "stock": 3, "description": "" },
"status": "created",
"message": "dry-run: would create"
}
]
}Campos da resposta
run_iduuiddry_runbooleantotal_rowsintegercreated_countintegerupdated_countintegerskipped_countintegererrored_countintegerrows[].rowobjectrows[].statusstringcreatedupdatedskippederroredrows[].product_iduuidrows[].messagestringmissing both name and SKU, dry-run: would update). Em inglês.Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O administrador não tem nenhum dos privilégios exigidos. | {"error":"insufficient privileges","privilege_required_any":["manage_catalog","intelligence_use_bulk_import"]} |
| 400 | Corpo ilegível ou rows vazio. | {"error":"rows array is empty"} |
| 403 | Importação por IA desligada. | {"error":"AI bulk product import is disabled ..."} |
| 503 | Catálogo indisponível para a importação. | {"error":"catalog adapter not configured"} |
Histórico
Lista as importações e simulações feitas por quem chama, da mais recente para a mais antiga, com o resultado de cada linha.
/api/v1/admin/intelligence/import/runsAdminHistórico de importações
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um administrador (veja Tokens).Parâmetros de consulta
limitintegerpadrão: 20Exemplo de requisição
curl "$BASE_URL/api/v1/admin/intelligence/import/runs?limit=10" \
-H "Authorization: Bearer $TOKEN"Resposta
{
"runs": [
{
"id": "bcf4c219-1811-4402-8c3c-a8564ca50361",
"user_id": "d4613dde-ac7a-431c-9232-50d8cd6ad5fc",
"filename": "produtos.xlsx",
"format": "xlsx",
"total_rows": 1,
"created_count": 1,
"updated_count": 0,
"skipped_count": 0,
"errored_count": 0,
"rows": [],
"created_at": "2026-10-11T21:30:00Z"
}
],
"total": 1
}Campos da resposta
runs[].iduuidruns[].filenamestringruns[].formatstringruns[].total_rowsintegerruns[].created_countintegerruns[].updated_countintegerruns[].skipped_countintegerruns[].errored_countintegerruns[].rowsarrayrun.runs[].created_atstringtotalintegerErros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} ou {"error":"invalid or expired token"} |
| 403 | O administrador não tem nenhum dos privilégios exigidos. | {"error":"insufficient privileges","privilege_required_any":["manage_catalog","intelligence_use_bulk_import"]} |