Exportar
Baixa produtos em arquivo CSV, XLSX ou XML, com filtros, escolha de colunas e formato próprio de números e datas.
Três rotas baixam o catálogo. Escolha pelo que você precisa:
| Rota | Melhor para | Saída |
|---|---|---|
GET /products/export | Um arquivo de ida e volta: as mesmas colunas que o importador lê, com filtros simples | CSV, XLSX ou XLS |
POST /products/export | Só algumas colunas, separador ou sinal decimal à escolha, lista de ids | CSV |
POST /products/export-xml | Alimentar outro sistema que quer XML | XML |
As três exigem o privilégio manage_catalog, devolvem um arquivo (não JSON) e só incluem produtos não excluídos. O dinheiro nesses arquivos é número decimal em reais (52.90), não centavos.
Baixar em CSV, XLSX ou XLS
/api/v1/admin/products/exportAdminExportar produtos para CSV, XLSX ou XLS
O padrão é um CSV com ; como separador, UTF-8 com BOM, uma linha de cabeçalho e uma linha por produto. Estas 25 colunas, nesta ordem, são exatamente o que Importar um arquivo lê de volta:
sku, name, slug, price, list_price, cost_price, quantity, min_quantity, max_quantity, quantity_step, status, category_id, vendor_id, description, short_description, promo_text, weight, length, width, height, free_shipping (Y ou N), shipping_freight, meta_title, meta_description, meta_keywords.
Os preços usam ponto (52.90). Preço de lista, custo e frete vazios ficam em branco.
Parâmetros de consulta
statusstringADHvendor_iduuidcategory_iduuiddate_fromstringAAAA-MM-DD).date_tostringdate_from depois de date_to devolve 400.idsstringformatstringpadrão: csvcsvxlsxxlsxlsx é uma pasta de trabalho Excel de verdade; xls é o formato XML antigo do Excel 2003.countstring1trueyes{"count": N} em JSON em vez do arquivo, com os mesmos filtros. Use para saber o tamanho antes.curl "$BASE_URL/api/v1/admin/products/export?status=A&format=xlsx" \
-H "Authorization: Bearer $TOKEN" -o produtos.xlsxsku;name;slug;price;list_price;cost_price;quantity;min_quantity;max_quantity;quantity_step;status;category_id;vendor_id;description;short_description;promo_text;weight;length;width;height;free_shipping;shipping_freight;meta_title;meta_description;meta_keywords
CAM-001;Camiseta Azul;camiseta-azul;52.90;;;12;0;0;1;A;345ac33e-4dcd-4d60-bedf-a2c2d47897d9;9d9d9d56-eb43-4719-889d-055632f7c7da;;;;;;;;N;;;;{ "count": 2 }Os cabeçalhos da resposta trazem Content-Disposition: attachment; filename="produtos.csv" (.xlsx ou .xls nesses formatos) e, em xlsx e xls, X-Export-Returned com o número de linhas.
Exportar colunas escolhidas
/api/v1/admin/products/exportAdminExportar colunas selecionadas para CSV
Devolve produtos_export.csv. Sem format, vale o estilo brasileiro: separador ;, vírgula decimal (52,90), datas dd/mm/yyyy, UTF-8 com BOM. A linha de cabeçalho usa as chaves de campo que você pediu.
Corpo da requisição
fieldsarraysku, name, slug, status, vendor_id, brand, category_id, category_name, category_path, price, list_price, cost_price, quantity, min_quantity, max_quantity, weight, length, width, height, free_shipping, shipping_freight, description, short_description, meta_title, meta_description, ncm_code, main_image, additional_images, created_at, updated_at. A lista completa com rótulos é GET /api/v1/admin/import-export/fields/products.filtersobjectRestringe os produtos.
statusstringA, D, H ou active, disabled, hidden.vendor_iduuidcategory_iduuiddate_fromstringAAAA-MM-DD).date_tostringAAAA-MM-DD, meia-noite).product_idsarrayformatobjectEstilo de números e datas. Se delimiter vier vazio, o objeto inteiro é substituído pelo padrão brasileiro.
delimiterstringpadrão: ;; ou ,.decimal_sepstringpadrão: ,, ou ..date_formatstringpadrão: dd/mm/yyyydd/mm/yyyyyyyy-mm-ddinclude_bombooleanpadrão: truecurrency_prefixstringR$ .curl -X POST "$BASE_URL/api/v1/admin/products/export" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"fields":["sku","name","price","quantity"],"filters":{"status":"active"},
"format":{"delimiter":",","decimal_sep":".","date_format":"yyyy-mm-dd","include_bom":false}}' \
-o produtos_export.csvsku;name;price;quantity
CAM-001;Camiseta Azul;52,90;12
CAN-002;Caneca Branca;49,90;20Exportar em XML
/api/v1/admin/products/export-xmlAdminExportar produtos em XML
Devolve produtos_export.xml, um elemento por produto e um filho por campo. Os preços têm ponto decimal (89.90), a menos que format.decimal_sep diga outra coisa.
Corpo da requisição
fieldsarrayfiltersobjectAs mesmas chaves do export CSV: status, vendor_id, category_id, date_from, date_to. São a única forma de restringir um export XML.
formatobjectdecimal_sep, currency_prefix, date_format).xml_configobjectFormato do documento.
root_elementstringpadrão: productsitem_elementstringpadrão: productindentbooleanpadrão: falsecurl -X POST "$BASE_URL/api/v1/admin/products/export-xml" \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"fields":["sku","name","price"],"filters":{"vendor_id":"9d9d9d56-eb43-4719-889d-055632f7c7da"},
"xml_config":{"root_element":"produtos","item_element":"produto","indent":true}}' \
-o produtos_export.xml<?xml version="1.0" encoding="UTF-8"?>
<produtos>
<produto>
<sku>CAM-001</sku>
<name>Camiseta Azul</name>
<price>52.90</price>
</produto>
</produtos>Erros
| Status | Quando | Exemplo de corpo |
|---|---|---|
| 400 | date_from depois de date_to (GET) | {"error":"invalid_date_range","detail":"date_from must be on or before date_to"} |
| 400 | Corpo não é JSON válido (rotas POST) | {"error":"invalid request body","detail":"..."} |
| 401 / 403 | Sem token / sem manage_catalog | {"error":"missing authorization header"} / {"error":"insufficient privileges","required":"manage_catalog"} |
| 500 | Falha ao montar uma planilha xlsx ou xls | {"error":"export products failed","detail":"..."} |