Importar outros cadastros
Importa categorias, características, marcas, usuários e preços por quantidade a partir de planilha, com o resumo de criados, atualizados e erros.
Além de produtos, a plataforma importa os cadastros que o catálogo e a base de clientes usam. Todas as rotas desta página recebem multipart/form-data com a planilha no campo file (.csv, .txt, .xml, .xlsx ou .xlsm), detectam o separador e respondem com o mesmo resumo de importação (ImportResult). A exceção é a de preços por quantidade, que sempre roda em segundo plano.
O resumo tem este formato, e os campos errors e warnings estão sempre presentes (vazios quando não há problema):
{
"total": 3,
"created": 2,
"imported": 2,
"updated": 1,
"skipped": 0,
"errors": [],
"warnings": []
}Campos do resumo
totalintegercreatedintegerimported repete o mesmo valor (nome antigo).updatedintegerskippedintegererrorsarrayrow (a linha da planilha, o cabeçalho é a 1), field (opcional) e message.warningsarray/api/v1/admin/import/categoriesAdminImporta categorias
Privilégio manage_categories. A importação é um upsert pelo slug: slug novo cria a categoria, slug existente atualiza. As colunas são lidas por posição, e o cabeçalho é descartado: mantenha a ordem do modelo.
Colunas, na ordem
idstringnamestringobrigatórioparent_idstringslug de outra categoria ou - para mover para a raiz. O pai precisa existir antes da linha do filho: coloque os pais primeiro no arquivo.slugstringobrigatóriodescriptionstringstatusstringAHDpositionintegermeta_titlestringmeta_keywordsstring/api/v1/admin/import/featuresAdminImporta características
Privilégio manage_features. Característica (feature) é um atributo de produto, como Cor ou Voltagem. As colunas são lidas pelo nome do cabeçalho.
Campos do formulário
filefileobrigatórioupdate_existingbooleanpadrão: truefalse, características que já existem não são alteradas.skip_errorsbooleanpadrão: truefalse, a importação para na primeira linha com erro.Colunas
namestringobrigatóriofeature_typestringobrigatóriotextnumberselectmulti_selectdateboolgroupbrandauthorcolorgroup_namestringdescriptionstringstatusstringAHDpositionintegervariantsstring|. Só tem efeito nos tipos de lista (select, multi_select, brand, author, color).categoriesstring/api/v1/admin/import/brandsAdminImporta marcas
Privilégio manage_features. Marca é um valor de uma característica do tipo marca. Colunas do modelo: brand_id, feature_id, name, code, description, position, image_url, slug_url, page_title, meta_description, meta_keywords.
Campos do formulário
filefileobrigatórioname é obrigatória.update_existingbooleanpadrão: truefalse, marcas que já existem não são alteradas.skip_errorsbooleanpadrão: truefalse, a importação para na primeira linha com erro.A coluna feature_id aponta a característica do tipo marca. Se ela não existir, ou se a característica indicada não for do tipo marca, a linha é recusada com uma mensagem no campo feature_id.
/api/v1/admin/import/usersAdminImporta usuários
Privilégio manage_users. Cria usuários, não atualiza: um e-mail que já existe é pulado em silêncio (conta em skipped, sem mensagem). Os usuários criados ficam sem senha utilizável e com e-mail não verificado: eles entram pelo fluxo "esqueci a senha".
Campos do formulário
filefileobrigatórioskip_errorsbooleanpadrão: truefalse, a importação para na primeira linha com erro de gravação.Colunas
emailstringobrigatóriofirst_namestringfirstname).last_namestringlastname).user_typestringpadrão: customercustomervendoradminroot_adminc, v e a também valem.statusstringpadrão: activeactivedisabledunapprovedA, D e U também valem.cpfstringcnpjstringperson_typestringFJlegal_namestringtrade_namestringstate_regstringresponsible_namestring/api/v1/admin/import/qty-discountsAdminImporta preços por quantidade (assíncrono)
Privilégio manage_catalog. Preço por quantidade é a faixa de preço que vale a partir de um número de unidades. Esta importação sempre roda em segundo plano: um arquivo válido recebe 202 e um job_id, e você acompanha em Jobs de importação. Problemas de estrutura (arquivo vazio, falta de colunas) falham logo, com 400.
Campos do formulário
filefileobrigatóriomodestringpadrão: mergemergereplacemerge atualiza cada faixa pela chave produto + quantidade mínima + grupo de usuários e mantém as demais faixas do produto. replace troca todas as faixas de cada produto listado pelas do arquivo.Colunas (aceitam nomes em português e em inglês)
Product codestringobrigatórioproduct_code, sku.Lower limitintegerobrigatórioPricestring39,90 ou 39.00).Percentage discountstringUser groupstringValue per Kgstring0 ou vazio guarda "não definido".Value per UnitstringExemplo de requisição
# categorias
curl "$BASE_URL/api/v1/admin/import/categories" \
-H "Authorization: Bearer $TOKEN" -F "file=@categorias.csv"
# usuários, parando no primeiro erro
curl "$BASE_URL/api/v1/admin/import/users" \
-H "Authorization: Bearer $TOKEN" -F "file=@clientes.csv" -F "skip_errors=false"
# preços por quantidade, substituindo as faixas
curl "$BASE_URL/api/v1/admin/import/qty-discounts?mode=replace" \
-H "Authorization: Bearer $TOKEN" -F "file=@faixas.csv"Resposta
{
"job_id": "3f2b8c0e-7d41-4a5e-9a0c-1b6f2d9e4a77",
"status": "processing",
"status_url": "/admin/import/jobs/3f2b8c0e-7d41-4a5e-9a0c-1b6f2d9e4a77",
"total_rows": 48
}status_url vem sem o prefixo /api/v1; use /api/v1 + status_url.
Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Campo file ausente | {"error":"missing file field in form","detail":"http: no such file"} |
| 400 | Arquivo vazio | {"error":"csv_empty","detail":"uploaded file is empty"} |
| 400 | Falta uma coluna obrigatória (características: name, feature_type) | {"error":"missing_required_column","detail":"missing required column: feature_type"} |
| 401 | Token ausente ou expirado | {"error":"invalid or expired token"} |
| 403 | Falta o privilégio da rota | {"error":"insufficient privileges","required":"manage_features"} |
| 415 | Extensão não aceita | {"error":"unsupported file type","detail":"only CSV, XLSX and XML files are accepted (got \".pdf\")"} |
| 500 | Falha ao importar | {"error":"import categories failed","detail":"..."} |
Erros por linha (slug is required, invalid feature type "x", invalid user_type, product not found: "SKU-9"...) vêm dentro do resumo ou do job, não como status HTTP.