Mixes de produtos
Lista, cria, consulta, altera e exclui os mixes do seller: kits com componentes trocáveis e visibilidade por cliente ou grupo.
Um mix é um kit com regras, vindo do atacado: o seller define os componentes e um preço único, e decide quem pode ver (todos, só clientes escolhidos, ou grupos). Quando o cliente adiciona o mix ao carrinho, ele vira linhas comuns de produto e o preço do mix é rateado entre elas.
Listar
/api/v1/vendor/mix-productsSellerListar os mixes
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de consulta
pageintegerpadrão: 1per_pageintegerpadrão: 25statusstringADHsearchstringExemplo de requisição (listar)
curl "$BASE_URL/api/v1/vendor/mix-products" \
-H "Authorization: Bearer $TOKEN"Resposta (listar)
{
"mixes": [
{
"id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"name": "Mix Atacado Verão",
"description": "",
"sku": "MIX-001",
"status": "A",
"bundle_price_centavos": 19990,
"currency": "BRL",
"visibility": "customer-list",
"min_components": 1,
"max_components": 5,
"allow_customer_pick": true,
"image_url": "",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z"
}
],
"total": 1,
"page": 1,
"per_page": 25,
"total_pages": 1
}Campos da resposta
mixesarrayMixes, sem componentes nem atribuições (use a consulta).
idstring (uuid)vendor_idstring (uuid)namestringdescriptionstringskustringstatusstringADHA ativo, D desativado, H oculto.bundle_price_centavosintegercurrencystringBRL).visibilitystringpublicprivatecustomer-listmin_componentsinteger0 = sem regra).max_componentsinteger0 = sem limite).allow_customer_pickbooleanimage_urlstringcomponentsarrayproduct_id, quantity, sort_order, is_required, allow_swap, swap_group e dados do produto.assignmentsarraycustomer_id e/ou usergroup_id.totalintegerpageintegerper_pageintegertotal_pagesintegerErros (listar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_catalog"]} |
| 403 | O módulo mix-products está desligado na loja. | {"error":"module_disabled","module":"mix-products"} |
Criar
/api/v1/vendor/mix-productsSellerCriar um mix
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Corpo da requisição
namestringobrigatóriocomponentsarrayobrigatórioComponentes. Ao menos um na criação. Na alteração, se enviado, substitui todos.
product_idstring (uuid)obrigatórioquantityintegerpadrão: 1sort_orderintegeris_requiredbooleanallow_swapbooleanswap_group.swap_groupstringdescriptionstringskustringstatusstringpadrão: DADHD, para você revisar antes de publicar.bundle_price_centavosintegercurrencystringpadrão: BRLvisibilitystringpadrão: privatepublicprivatecustomer-listpublic: todos; customer-list: clientes ou grupos atribuídos; private: só clientes atribuídos diretamente (grupo não conta).min_componentsintegermax_componentsintegerallow_customer_pickbooleanimage_urlstringassignmentsarrayPara quem o mix vale. Se enviado, substitui a lista. Cada item precisa de customer_id ou usergroup_id.
customer_idstring (uuid)usergroup_idstring (uuid)Exemplo de requisição (criar)
curl -X POST "$BASE_URL/api/v1/vendor/mix-products" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Mix Atacado Verão",
"sku": "MIX-001",
"status": "A",
"bundle_price_centavos": 19990,
"visibility": "customer-list",
"allow_customer_pick": true,
"max_components": 5,
"components": [
{
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 2,
"is_required": true
}
],
"assignments": [
{
"customer_id": "f12f30a9-cbec-40ba-98f1-b7fa8f2e8e10"
}
]
}'Resposta (criar)
{
"id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"name": "Mix Atacado Verão",
"description": "",
"sku": "MIX-001",
"status": "A",
"bundle_price_centavos": 19990,
"currency": "BRL",
"visibility": "customer-list",
"min_components": 1,
"max_components": 5,
"allow_customer_pick": true,
"image_url": "",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z",
"components": [
{
"id": "d1d2d3d4-0001-4a1b-8c2d-111122223333",
"mix_id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 2,
"sort_order": 0,
"is_required": true,
"allow_swap": false,
"product_name": "Camiseta Básica Algodão Preta",
"product_sku": "CAM-001",
"product_price_centavos": 4990
}
],
"assignments": [
{
"id": "e1e2e3e4-0001-4a1b-8c2d-111122223333",
"mix_id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"customer_id": "f12f30a9-cbec-40ba-98f1-b7fa8f2e8e10",
"created_at": "2026-10-11T20:00:00Z",
"customer_email": "maria.souza@example.com"
}
],
"component_subtotal_centavos": 9980,
"savings_centavos": 0
}Campos da resposta
idstring (uuid)vendor_idstring (uuid)namestringdescriptionstringskustringstatusstringADHA ativo, D desativado, H oculto.bundle_price_centavosintegercurrencystringBRL).visibilitystringpublicprivatecustomer-listmin_componentsinteger0 = sem regra).max_componentsinteger0 = sem limite).allow_customer_pickbooleanimage_urlstringcomponentsarrayproduct_id, quantity, sort_order, is_required, allow_swap, swap_group e dados do produto.assignmentsarraycustomer_id e/ou usergroup_id.component_subtotal_centavosintegersavings_centavosintegercreated_atstringupdated_atstringErros (criar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_catalog"]} |
| 400 | Nome vazio, sem componentes, preço negativo, status/visibilidade inválidos, mínimo maior que máximo, componente sem produto, atribuição sem cliente nem grupo. | {"error":"invalid_input","message":"mix-products: invalid input: at least one component is required"} |
| 403 | O módulo mix-products está desligado na loja. | {"error":"module_disabled","module":"mix-products"} |
Consultar
/api/v1/vendor/mix-products/{id}SellerConsultar um mix
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
idstring (uuid)obrigatórioExemplo de requisição (consultar)
curl "$BASE_URL/api/v1/vendor/mix-products/$MIX_ID" \
-H "Authorization: Bearer $TOKEN"Resposta (consultar)
{
"id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"name": "Mix Atacado Verão",
"description": "",
"sku": "MIX-001",
"status": "A",
"bundle_price_centavos": 19990,
"currency": "BRL",
"visibility": "customer-list",
"min_components": 1,
"max_components": 5,
"allow_customer_pick": true,
"image_url": "",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z",
"components": [
{
"id": "d1d2d3d4-0001-4a1b-8c2d-111122223333",
"mix_id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 2,
"sort_order": 0,
"is_required": true,
"allow_swap": false,
"product_name": "Camiseta Básica Algodão Preta",
"product_sku": "CAM-001",
"product_price_centavos": 4990
}
],
"assignments": [
{
"id": "e1e2e3e4-0001-4a1b-8c2d-111122223333",
"mix_id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"customer_id": "f12f30a9-cbec-40ba-98f1-b7fa8f2e8e10",
"created_at": "2026-10-11T20:00:00Z",
"customer_email": "maria.souza@example.com"
}
],
"component_subtotal_centavos": 9980,
"savings_centavos": 0
}Campos da resposta
idstring (uuid)vendor_idstring (uuid)namestringdescriptionstringskustringstatusstringADHA ativo, D desativado, H oculto.bundle_price_centavosintegercurrencystringBRL).visibilitystringpublicprivatecustomer-listmin_componentsinteger0 = sem regra).max_componentsinteger0 = sem limite).allow_customer_pickbooleanimage_urlstringcomponentsarrayproduct_id, quantity, sort_order, is_required, allow_swap, swap_group e dados do produto.assignmentsarraycustomer_id e/ou usergroup_id.component_subtotal_centavosintegersavings_centavosintegercreated_atstringupdated_atstringErros (consultar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_catalog"]} |
| 404 | O mix não existe ou não é seu. | {"error":"not_found","message":"mix not found"} |
| 403 | O módulo mix-products está desligado na loja. | {"error":"module_disabled","module":"mix-products"} |
Alterar
/api/v1/vendor/mix-products/{id}SellerAlterar um mix
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
idstring (uuid)obrigatórioCorpo da requisição
namestringcomponentsarraydescriptionstringskustringstatusstringpadrão: DADHD, para você revisar antes de publicar.bundle_price_centavosintegercurrencystringpadrão: BRLvisibilitystringpadrão: privatepublicprivatecustomer-listpublic: todos; customer-list: clientes ou grupos atribuídos; private: só clientes atribuídos diretamente (grupo não conta).min_componentsintegermax_componentsintegerallow_customer_pickbooleanimage_urlstringassignmentsarrayPara quem o mix vale. Se enviado, substitui a lista. Cada item precisa de customer_id ou usergroup_id.
customer_idstring (uuid)usergroup_idstring (uuid)Exemplo de requisição (alterar)
curl -X PUT "$BASE_URL/api/v1/vendor/mix-products/$MIX_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"bundle_price_centavos": 18990,
"status": "A"
}'Resposta (alterar)
{
"id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"vendor_id": "94bd7e9a-fdad-4d01-8fc2-ba9d677d8b36",
"name": "Mix Atacado Verão",
"description": "",
"sku": "MIX-001",
"status": "A",
"bundle_price_centavos": 18990,
"currency": "BRL",
"visibility": "customer-list",
"min_components": 1,
"max_components": 5,
"allow_customer_pick": true,
"image_url": "",
"created_at": "2026-10-11T20:00:00Z",
"updated_at": "2026-10-11T20:00:00Z",
"components": [
{
"id": "d1d2d3d4-0001-4a1b-8c2d-111122223333",
"mix_id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"product_id": "7bc1d5e9-a9a4-457b-866f-bbb3879d258d",
"quantity": 2,
"sort_order": 0,
"is_required": true,
"allow_swap": false,
"product_name": "Camiseta Básica Algodão Preta",
"product_sku": "CAM-001",
"product_price_centavos": 4990
}
],
"assignments": [
{
"id": "e1e2e3e4-0001-4a1b-8c2d-111122223333",
"mix_id": "c4a76056-c671-4631-bbcb-65223ff3322b",
"customer_id": "f12f30a9-cbec-40ba-98f1-b7fa8f2e8e10",
"created_at": "2026-10-11T20:00:00Z",
"customer_email": "maria.souza@example.com"
}
],
"component_subtotal_centavos": 9980,
"savings_centavos": 0
}Campos da resposta
idstring (uuid)vendor_idstring (uuid)namestringdescriptionstringskustringstatusstringADHA ativo, D desativado, H oculto.bundle_price_centavosintegercurrencystringBRL).visibilitystringpublicprivatecustomer-listmin_componentsinteger0 = sem regra).max_componentsinteger0 = sem limite).allow_customer_pickbooleanimage_urlstringcomponentsarrayproduct_id, quantity, sort_order, is_required, allow_swap, swap_group e dados do produto.assignmentsarraycustomer_id e/ou usergroup_id.component_subtotal_centavosintegersavings_centavosintegercreated_atstringupdated_atstringErros (alterar)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_catalog"]} |
| 404 | O mix não existe ou não é seu. | {"error":"not_found","message":"mix not found"} |
| 403 | O módulo mix-products está desligado na loja. | {"error":"module_disabled","module":"mix-products"} |
| 400 | Campo inválido (status, visibilidade, preço, limites). | {"error":"invalid_input","message":"..."} |
Excluir
/api/v1/vendor/mix-products/{id}SellerExcluir um mix
Cabeçalhos
AuthorizationstringobrigatórioBearer $TOKEN. Token de acesso do usuário seller (veja Tokens).Parâmetros de caminho
idstring (uuid)obrigatórioExemplo de requisição (excluir)
curl -X DELETE "$BASE_URL/api/v1/vendor/mix-products/$MIX_ID" \
-H "Authorization: Bearer $TOKEN"Resposta (excluir)
(sem corpo / empty body)Erros (excluir)
| Status | Quando | Corpo |
|---|---|---|
| 401 | Token ausente, inválido ou expirado. | {"error":"missing authorization header"} |
| 403 | Token que não é de seller, ou usuário sem o privilégio exigido pela rota. | {"error":"insufficient vendor privileges","privilege_required_any":["vendor_catalog"]} |
| 404 | O mix não existe ou não é seu. | {"error":"not_found","message":"mix not found"} |
| 403 | O módulo mix-products está desligado na loja. | {"error":"module_disabled","module":"mix-products"} |