Clonar mestres
Cria produtos do seller a partir de produtos mestre, um a um ou em lote por lista de ids ou por filtro.
Clonar um mestre
Cria um produto do seu seller a partir do mestre, copiando nome, descrição, fotos, características e EAN. Você informa só o que é seu. O produto nasce ligado ao mestre e passa pela moderação da loja como um produto novo do seller.
/api/v1/vendor/master-catalog/{id}/cloneSellerClonar um mestre
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário do painel do seller (lojista), obtido no login (veja Tokens).Content-Typestringobrigatórioapplication/json.Parâmetros de caminho
iduuidobrigatórioId do mestre.
Corpo da requisição
priceintegerPreço do seu produto, em centavos. Omitido, usa o
base_price do mestre.quantityintegerEstoque inicial. Omitido,
0.skustringSeu SKU para o produto.
statusstringSituação do produto. Omitido,
active.Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/vendor/master-catalog/$MASTER_ID/clone" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"price": 79900,
"quantity": 20,
"sku": "CAF-001"
}'Resposta
201Produto criado
json
{
"id": "0c5a7e14-3b2d-4c19-8f66-7a1d2e3f4b50",
"vendor_id": "7c1f0b52-3a64-4d1e-9a40-5f0c2b6a91d3",
"name": "Cafeteira Moderno Branco 01426",
"slug": "cafeteira-moderno-branco-01426",
"sku": "CAF-001",
"price": 79900,
"quantity": 20,
"status": "A",
"master_product_id": "6b5806fe-4370-4f12-bc95-a7dbba04918b"
}Campos da resposta
iduuidId do novo produto.
vendor_iduuidSeu seller (sempre forçado pelo token).
namestringNome copiado do mestre.
slugstringEndereço curto gerado.
skustringSeu SKU.
priceintegerPreço em centavos.
quantitynumberEstoque.
statusstringLetra da situação:
A ativo, H oculto, D desativado. Se a moderação da loja exigir aprovação, o produto nasce em espera.master_product_iduuidMestre de origem.
Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} / {"error":"invalid or expired token"} |
| 403 | O token não é de um usuário seller (por exemplo, é de um administrador da loja). | {"error":"insufficient permissions"} |
| 403 | O cadastro do seller ainda está em análise (só a tela de cadastro funciona até a aprovação). | {"error":"vendor_pending_review","message":"..."} |
| 403 | O usuário tem papel de seller, mas não está ligado a nenhum seller. | {"error":"no vendor account associated with this user"} |
| 403 | O usuário da equipe do seller não tem nenhum dos privilégios exigidos: vendor_catalog, vendor_view_catalog, vendor_manage_products, vendor_manage_master, vendor_manage_mix, vendor_manage_quotes, vendor_manage_features, vendor_import_products. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_catalog","vendor_view_catalog","vendor_manage_products","vendor_manage_master","vendor_manage_mix","vendor_manage_quotes","vendor_manage_features","vendor_import_products"]} |
| 404 | O recurso de produtos mestre está desligado nesta loja. | {"error":"feature not enabled","detail":"enable master_products via admin settings"} |
| 400 | Corpo que não é JSON. | {"error":"invalid request body","detail":"..."} |
| 404 | Mestre inexistente. | {"error":"master product not found"} |
| 500 | Você já clonou este mestre; o módulo de produtos mestre está desligado; ou a loja exige código de barras e o mestre não tem. O motivo vai em detail. | {"error":"failed to clone master product","detail":"clone master product: ..."} |
Clonar em lote
Clona vários mestres de uma vez, com os padrões (preço do mestre, estoque 0). Quem já foi clonado, ou não está disponível, é contado em skipped, sem derrubar o lote. Há três jeitos de chamar: lista de ids (resposta imediata), filter com simulação, ou lista de ids com simulate/confirm_token.
/api/v1/vendor/master-catalog/bulk-cloneSellerClonar vários mestres
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso de um usuário do painel do seller (lojista), obtido no login (veja Tokens).Content-Typestringobrigatórioapplication/json.Corpo da requisição
filterobjectRecorte resolvido no servidor. Chaves:
ids (lista de ids de mestre), exclude_ids, name_contains, brand, category_id, status (active, pending, hidden), price_min e price_max (centavos), created_after e created_before (AAAA-MM-DD), all (true para a tabela inteira). Uma chave desconhecida é recusada com a lista das aceitas. Mestres que o seller já clonou ficam de fora.master_product_idsarrayModo simples: lista de ids de mestre. Cada um é clonado com os padrões (preço do mestre, estoque
0).simulatebooleantrue só conta e devolve amostra e confirm_token; não clona nada.confirm_tokenstringToken da simulação com o mesmo corpo. Obrigatório para executar por filtro. Vale 70 minutos e só serve para o mesmo seller, usuário e corpo.
Exemplo de requisição
bash
curl -X POST "$BASE_URL/api/v1/vendor/master-catalog/bulk-clone" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"master_product_ids": [
"6b5806fe-4370-4f12-bc95-a7dbba04918b",
"0d2f9a4b-7c61-4e3a-9b85-2a6c1d0e8f33"
]
}'Resposta
200Lista de ids: resultado
json
{
"created": 1,
"skipped": 1,
"partial_failure": true,
"message": "1 de 2 produtos não foram clonados (já existiam, ou o mestre não está disponível para este seller)"
}200Simulação por filtro
json
{
"simulate": true,
"action": "clone",
"description": "Clonar produtos do catálogo mestre para a loja do seller",
"total": 87,
"sample": [
{
"id": "6b5806fe-4370-4f12-bc95-a7dbba04918b",
"name": "Cafeteira Moderno Branco 01426",
"before": "no catálogo mestre",
"after": "na sua loja"
}
],
"confirm_token": "eyJ...",
"expires_at": "2026-10-11T23:10:00Z",
"async": true,
"by": "filter"
}202Execução por filtro (tarefa em andamento)
json
{
"action": "clone",
"by": "filter",
"total_requested": 87,
"status": "queued",
"async": true,
"job": {
"id": "4636fe0a-063a-4b19-8f62-11512ebcc416",
"route": "POST /vendor/master-catalog/bulk-clone",
"action": "clone",
"status": "queued",
"total": 87,
"processed": 0,
"affected": 0,
"failed": 0,
"percent": 0,
"created_at": "2026-10-11T22:05:00Z"
}
}Campos da resposta
createdintegerLista de ids: produtos criados.
skippedintegerIds já clonados ou indisponíveis.
partial_failurebooleantrue quando skipped > 0.messagestringResumo em português, quando há
skipped.simulatebooleanSimulação: sempre
true.totalintegerSimulação: quantos mestres o filtro alcança.
samplearraySimulação: até 10 exemplos (
id, name, before, after).confirm_tokenstringSimulação: token para a execução.
expires_atstringSimulação: RFC 3339. Validade do token.
asyncbooleantrue quando a execução vira tarefa (50 registros ou mais).jobobjectExecução assíncrona (
202): a tarefa; acompanhe em Tarefas em lote.total_requestedintegerExecução por filtro: registros alcançados.
affectedintegerExecução síncrona por filtro: clonados.
failedarrayExecução síncrona por filtro: falhas por registro (
id, error).Erros
| Status | Quando | Corpo |
|---|---|---|
| 401 | Sem token ou token inválido/expirado. | {"error":"missing authorization header"} / {"error":"invalid or expired token"} |
| 403 | O token não é de um usuário seller (por exemplo, é de um administrador da loja). | {"error":"insufficient permissions"} |
| 403 | O cadastro do seller ainda está em análise (só a tela de cadastro funciona até a aprovação). | {"error":"vendor_pending_review","message":"..."} |
| 403 | O usuário tem papel de seller, mas não está ligado a nenhum seller. | {"error":"no vendor account associated with this user"} |
| 403 | O usuário da equipe do seller não tem nenhum dos privilégios exigidos: vendor_catalog, vendor_view_catalog, vendor_manage_products, vendor_manage_master, vendor_manage_mix, vendor_manage_quotes, vendor_manage_features, vendor_import_products. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_catalog","vendor_view_catalog","vendor_manage_products","vendor_manage_master","vendor_manage_mix","vendor_manage_quotes","vendor_manage_features","vendor_import_products"]} |
| 404 | O recurso de produtos mestre está desligado nesta loja. | {"error":"feature not enabled","detail":"enable master_products via admin settings"} |
| 400 | Lista de ids vazia, corpo inválido ou filtro inválido (chave desconhecida, sem recorte). | {"error":"master_product_ids is required"} / {"error":"invalid_filter","detail":"..."} |
| 409 | confirm_token de outro pedido, expirado, ou o recorte cresceu desde a simulação. | {"error":"confirm_token_invalid","detail":"..."} |
| 428 | Execução por filtro sem confirm_token. | {"error":"simulate_required","detail":"lote por filtro exige simulação: ..."} |
| 500 | Falha geral do lote. | {"error":"failed to bulk-clone master products"} |