Kits, mestres e caixas
Os conjuntos de venda da vitrine (kits, produtos mestres com ofertas de sellers, mixes por cliente e caixas de grade) e o mapa de suas rotas.
Além do produto simples, a vitrine vende conjuntos: vários produtos vendidos juntos, o mesmo produto oferecido por vários sellers (lojistas), uma lista montada para um cliente específico ou uma caixa fechada com várias unidades. Esta seção reúne as rotas de leitura desses conjuntos, todas usadas pelas páginas de produto, listagens e carrinho.
Como funciona
Os conjuntos e quando usar cada um
| Recurso | O que é | Quem monta | Login |
|---|---|---|---|
Kit (bundle) | Lista fixa de produtos com preço calculado, preço fixo ou desconto. | Administrador | não |
| Produto mestre | Ficha de catálogo que agrupa as ofertas de vários sellers para o mesmo produto. | Administrador | não |
| Modo catálogo | Marca de seller que vende só por orçamento ou link externo, sem carrinho. | Seller | não |
| Mix | Conjunto com preço fechado, componentes obrigatórios e trocas, liberado para clientes ou grupos específicos. | Administrador ou seller | sim |
Caixa (product box) | Embalagem de grade (vários tamanhos) ou fechada, com variantes por produto. | Administrador | não |
- Montar a vitrine
Liste os kits em Kits, as caixas em Caixas de produto e, para clientes logados, os mixes em Mixes.
- Na página do produto
Consulte as ofertas dos sellers em Produtos mestres, as variantes de caixa do produto e o modo catálogo em Modo catálogo para decidir qual botão de compra mostrar.
- Adicionar ao carrinho
Estas rotas só leem; a escrita no carrinho é de outra seção. No caso do mix, Resolver mix calcula como o preço fechado se distribui entre as linhas.
Conceitos-chave
Dinheiro e nomes enganosos
Todo valor monetário é inteiro em centavos. Atenção: nos kits, o campo price_bps (e o espelho price_override) não é basis points, é um preço fixo em centavos; já discount_bps é basis points (1000 = 10%) quando discount_type é percentage, e centavos quando é fixed. Veja Kits.
Quem pode ver o quê
Visitantes e clientes veem somente conjuntos ativos e da loja (sem dono seller). Preços de ofertas de produtos mestres e de variantes de caixa são zerados ou omitidos para visitante quando a loja esconde preço para quem não está logado (veja o campo price_redacted). A listagem de kits não aplica essa regra.
Cache
As leituras públicas voltam com Cache-Control: public, max-age=300, stale-while-revalidate=1800 (5 minutos, com revalidação em segundo plano). A lista de variantes de caixa de um cliente logado e as ofertas filtradas pela região do comprador voltam private, no-store. Mixes e demais respostas autenticadas dependem do cliente: não as guarde em cache compartilhado.
Ids
Todos os ids são UUID em string. Kits também têm slug (texto) usado no detalhe.
Endpoints
| Método | Caminho | Para que serve | Auth |
|---|---|---|---|
| GET | /api/v1/storefront/bundles | Listar kits | nenhuma |
| GET | /api/v1/storefront/bundles/{slug} | Detalhe de um kit | nenhuma |
| GET | /api/v1/storefront/master-products | Listar produtos mestres (sempre vazio) | nenhuma |
| GET | /api/v1/storefront/master-products/{id} | Detalhe de produto mestre (sempre 404) | nenhuma |
| GET | /api/v1/storefront/master-products/{id}/offers | Ofertas dos sellers | nenhuma |
| GET | /api/v1/storefront/catalog-store/products/{id} | Modo catálogo de um produto | nenhuma |
| GET | /api/v1/storefront/catalog-store/vendors | Sellers em modo catálogo | nenhuma |
| GET | /api/v1/storefront/mix-products | Listar mixes do cliente | cliente |
| GET | /api/v1/storefront/mix-products/{id} | Detalhe de um mix | cliente |
| POST | /api/v1/storefront/mix-products/{id}/resolve | Resolver mix em linhas de carrinho | cliente |
| GET | /api/v1/storefront/product-boxes | Listar caixas | nenhuma |
| GET | /api/v1/storefront/product-boxes/{id} | Detalhe de uma caixa | nenhuma |
| GET | /api/v1/storefront/products/{productID}/boxes | Variantes de caixa de um produto | nenhuma |
Erros comuns
- Esperar o produto mestre na vitrine. A lista de mestres é sempre vazia e o detalhe é sempre
404. Use/master-products/{id}/offerspara comparar sellers. - Tratar
price_bpscomo basis points. É preço fixo em centavos;0significa "usar o preço calculado". - Mandar um id que não é UUID. Várias destas rotas devolvem
500em vez de400quando o id é malformado (veja cada página). Valide o formato antes de chamar. - Chamar mixes sem login. Resposta
401 {"error":"missing authorization header"}. - Ignorar a região do comprador nas ofertas. Dependendo da configuração da loja, ofertas de sellers que não entregam na região do cliente não aparecem.
- Usar
per_pageacima do permitido. O servidor não limita ao máximo: volta ao valor padrão da rota.