VenddorDocumentação API
API atualAPI legada
Guia rápidoReferência completa
Carregando índice…
API atual/Referência completa

Lote, importação e exportação

Como alterar, importar e exportar muitos produtos de uma vez, com simulação, desfazer e tarefas em segundo plano, e o mapa de todas as rotas.

Uma loja com milhares de produtos não se mantém com um PUT por vez. Esta seção reúne as rotas que agem sobre muitos produtos em uma só chamada: ações em lote (status, preço, categoria, exclusão, edição de campos), edição de células no estilo planilha, importação e exportação em CSV, XLSX e XML, e duas operações de manutenção.

Todas ficam em /api/v1/admin/products/.... Para o modelo do produto em si (ids, dinheiro, status, produto mestre x do seller), leia antes a seção Produtos.

Pontos principais
  • Toda ação em lote pode ser simulada antes ("simulate": true): nada é gravado e você vê o que mudaria.
  • Os lotes que devolvem um undo_id podem ser revertidos depois com POST /api/v1/admin/bulk-undo/{undo_id}. Excluir produtos e mudar preço, status ou categoria podem ser desfeitos. Zerar o estoque e trocar o seller não podem.
  • Em vez de listar ids você pode mandar um filter ("todos os produtos até R$ 100 da categoria X"). O lote por filtro exige simulação e um confirm_token.
  • Lotes grandes (50 registros ou mais) rodam em segundo plano: a chamada responde 202 com uma tarefa que você consulta.
  • O dinheiro é inteiro em centavos nos lotes em JSON (4990 = R$ 49,90) e número decimal nos arquivos CSV/XML (49.90). Percentuais ficam em pontos-base (500 = 5%).
  • Toda rota exige o privilégio manage_catalog.

Como funciona

O jeito seguro de rodar um lote

Simular→Conferir→Confirmar→(Consultar a tarefa)→Desfazer se precisar
  1. Simule

    Envie o lote com "simulate": true. Com filter você recebe o total, uma amostra de 10 registros com valores de antes e depois e um confirm_token. Com lista de ids você recebe uma linha de prévia por id. Nada é gravado.

  2. Confira

    Veja o total e a amostra. Se o total não é o que você esperava, corrija o filtro e simule de novo.

  3. Confirme

    Envie o mesmo corpo de novo, sem simulate, acrescentando o confirm_token. Menos de 50 registros: a resposta é imediata (200). 50 ou mais: 202 com uma tarefa.

  4. Desfaça se foi engano

    Guarde o undo_id da resposta. POST /api/v1/admin/bulk-undo/{undo_id} devolve os valores anteriores (e restaura da lixeira os produtos excluídos).

Qual operação para qual tarefa

Quero...Use
Mudar status, preço, categoria ou seller de uma lista ou de um filtroAções em lote (POST /products/bulk)
O mesmo, com uma rota dedicada por açãoRotas de lote dedicadas
Editar nomes, SKUs, preços, estoque, dimensões, textos de SEO, linha a linha ou por transformação ("acrescentar - PROMO ao nome")Edição estilo planilha
Carregar um arquivo CSV/XLSX em uma chamadaImportar um arquivo
Pré-visualizar, mapear colunas, rodar importações grandes em segundo planoAssistente de importação
Baixar o catálogoExportar
Preencher códigos HS, ou zerar o estoque da loja antes de uma carga completaManutenção

Conceitos-chave

Duas formas de escolher os produtos

Lista de ids (product_ids): o jeito clássico. Todos os ids precisam ser UUIDs de produto (o número curto exibido na tela não é aceito).

Filtro (filter): o servidor encontra os produtos. Chaves aceitas (uma chave fora desta lista é recusada com 400 invalid_filter, então um erro de digitação nunca amplia o lote):

ChaveSignificado
name_contains, name_starts_withParte do nome / começo do nome
sku, eanValor exato, ou lista
sku_containsParte do SKU
brandMarca, sem diferenciar maiúsculas
statusactive (A), disabled (D), hidden (H), pending (R), rejected (X), ou a letra
category_idUUID da categoria, ou lista
category_treeUUID da categoria e todas as subcategorias
vendor_idUUID do seller, ou lista
without_vendortrue: só produtos da própria loja
price_min, price_maxFaixa de preço em centavos
list_price_min, list_price_max, cost_min, cost_maxO mesmo, para preço de lista e custo
quantity_min, quantity_maxFaixa de estoque
out_of_stocktrue: estoque zero ou menor
has_image, has_description, has_eanfalse: só os produtos que não têm
is_variationtrue: só variações; false: só produtos principais
free_shippingtrue ou false
sales_min, sales_maxUnidades vendidas (sales_max: 0 quer dizer nunca vendeu)
created_after, created_before, updated_beforeDatas, AAAA-MM-DD
ids, exclude_idsIncluir ou excluir ids específicos
alltrue: o catálogo inteiro. É a única forma de mandar um filtro sem outra chave.

Várias chaves se combinam com E. Um filter vazio é recusado. Um filtro alcança no máximo 200.000 registros. Produtos excluídos nunca entram.

Simulação, token e desfazer

ChamadaO que você recebe
Ids + simulate: true nas rotas dedicadas e nas ações update_status, update_category, update_price, deleteUma prévia, uma linha por id, sem token.
filter + simulate: true (qualquer ação)Total, amostra de 10 registros, confirm_token, expires_at, async.
filter + confirm_tokenExecuta o lote.
Ids, sem simulate e sem tokenExecuta na hora (é o que as telas do painel fazem).

O confirm_token vale 70 minutos, é preso ao seu usuário, à rota e ao corpo exato (ação, parâmetros, filtro): mudou qualquer um, vem 409 confirm_token_invalid. Ele também falha se o filtro agora alcança mais registros do que a simulação aprovou.

Tarefas em segundo plano

Quando o lote alcança 50 registros ou mais (ou outro lote seu ainda está rodando) a chamada devolve 202 com uma tarefa (job). A tarefa tem status queued, running, done, failed ou interrupted, além de total, processed, affected, failed (uma contagem), percent e uma lista de até 50 falhas {id, error}. Consulte com GET /api/v1/admin/bulk-jobs/{id} a cada 2 segundos, ou acompanhe GET /api/v1/admin/bulk-jobs/{id}/stream (eventos do servidor: progress, depois done). O undo_id fica dentro de job.result.

Dinheiro e arquivos

  • Lotes em JSON: preços em centavos, percentuais em pontos-base.
  • Arquivos CSV/XLSX/XML: números decimais em reais (49.90 ou 49,90). Na importação, um preço sem separador decimal é lido como centavos: 4990 é R$ 49,90, mas 50 é R$ 0,50. Escreva sempre duas casas (50.00).
  • Os CSV usam ; como separador e UTF-8 com BOM, para o Excel abrir direito.

Endpoints

Todas as rotas exigem o token Bearer de um usuário com o privilégio manage_catalog.

MétodoRotaO que fazPágina
POST/api/v1/admin/products/bulkLote unificado: status, exclusão, clone, categoria, preço, seller, edição de camposAções em lote
POST/api/v1/admin/products/bulk/statusMudança de status em loteRotas de lote dedicadas
POST/api/v1/admin/products/bulk/deleteExclusão em lote (lixeira)Rotas de lote dedicadas
POST/api/v1/admin/products/bulk/pricesMudança de preço em loteRotas de lote dedicadas
POST/api/v1/admin/products/bulk/move-categoryMudança de categoria em loteRotas de lote dedicadas
POST/api/v1/admin/products/bulk/cellsEdição estilo planilha, até 200 linhasEdição estilo planilha
POST/api/v1/admin/products/importImporta um arquivo CSV/XLSX em uma chamadaImportar um arquivo
GET/api/v1/admin/products/import/templateBaixa o modelo CSVImportar um arquivo
POST/api/v1/admin/products/import/previewSimulação de uma importaçãoAssistente de importação
POST/api/v1/admin/products/import/validateRecebe o arquivo e valida o mapeamento de colunasAssistente de importação
POST/api/v1/admin/products/import/executeExecuta a importação (segundo plano acima de 1000 linhas)Assistente de importação
GET/api/v1/admin/products/import/status/{id}Progresso e resultado de uma importaçãoAssistente de importação
GET/api/v1/admin/products/exportBaixa produtos em CSV, XLSX ou XLSExportar
POST/api/v1/admin/products/exportExporta colunas escolhidas com formato próprioExportar
POST/api/v1/admin/products/export-xmlExporta produtos em XMLExportar
POST/api/v1/admin/products/derive-hs-codesPreenche códigos HS a partir do NCMManutenção
POST/api/v1/admin/products/zero-quantitiesZera o estoque de todos os produtosManutenção

Erros comuns

  • Mandar simulate: true em clone ou update_vendor com lista de ids. Essas duas ações ignoram simulate no caminho por ids e executam de verdade. Para simulá-las, mande os ids como filtro: "filter": {"ids": ["..."]}.
  • Mandar um filtro e esquecer a simulação. Vem 428 simulate_required. Simule e repita com o confirm_token.
  • Mudar qualquer coisa entre a simulação e a confirmação. O token é preso ao corpo exato: 409 confirm_token_invalid.
  • Percentual como 5 em vez de 500. Percentuais são pontos-base. 5 significa 0,05%.
  • Ler total_affected: 0 numa simulação como "nada vai mudar". Nas simulações por ids ele é sempre 0: conte as linhas de preview.
  • Preço 50 num arquivo de importação. É R$ 0,50. Escreva 50.00.
  • Esperar que o export-xml respeite product_ids. Não respeita: ele exporta todo produto que casa com os filtros. Veja Exportar.
  • Tratar 200 como "tudo mudou". Confira affected e failed em toda resposta.

Próximos passos

Ações em lote
Status, preço, categoria, exclusão e edição de campos em uma rota.
Importar um arquivo
Colunas CSV e XLSX, modelo e limites.
Exportar
Downloads em CSV, XLSX e XML.
Produtos
O modelo do produto: ids, dinheiro, status.
Anterior
Propostas: aprovar e aplicar
Próxima
Ações em lote
Nesta página
  • Como funciona
  • O jeito seguro de rodar um lote
  • Qual operação para qual tarefa
  • Conceitos-chave
  • Duas formas de escolher os produtos
  • Simulação, token e desfazer
  • Tarefas em segundo plano
  • Dinheiro e arquivos
  • Endpoints
  • Erros comuns
  • Próximos passos