Documentação de Vitrines
Visão Geral
A vitrine é responsável por exibir produtos de forma estratégica dentro da loja 🛍️.
Ela permite destacar itens com base em regras específicas de filtragem, possibilitando criar seções como produtos mais vendidos, lançamentos, ofertas ou seleções personalizadas.
A configuração da vitrine é baseada em filtros armazenados no sistema, que determinam quais produtos devem ser retornados e exibidos. Esses filtros podem combinar diferentes critérios, como atributos do produto, categorias, ordenação e outras condições.
Internamente, o sistema utiliza a estrutura de listagem de produtos, aplicando os filtros configurados para montar automaticamente o conjunto de produtos exibidos na vitrine.
Essa abordagem permite criar desde vitrines simples até vitrines altamente segmentadas, adaptando a exibição de produtos conforme campanhas, estratégias comerciais ou necessidades específicas da loja.
Entidades Relacionadas
Produtos
Os produtos são a principal entidade relacionada às vitrines.
Cada vitrine retorna um conjunto de produtos que atendem aos critérios de filtragem configurados, permitindo organizar e destacar itens de maneira estratégica dentro da loja.
Essa relação é dinâmica, pois os produtos exibidos podem variar automaticamente conforme os filtros aplicados, mantendo a vitrine sempre atualizada.
Localização
A vitrine pode estar vinculada a uma localização específica.
As localizações são gerenciadas pelo frontend e permitem retornar um conjunto de entidades (incluindo vitrines) com base no local informado, determinando onde a vitrine deve ser exibida dentro da interface da loja.
Para mais informações sobre localizações, clique [aqui]({{ MAIN_URL }}/).
Listagem de vitrines
/template/showcases
Listagem de vitrines
Descrição
Este endpoint é responsável por listar todas as vitrines cadastradas 📋.
A resposta retorna também as condições de filtro definidas no corpo da requisição, permitindo visualizar exatamente quais regras estão configuradas em cada vitrine.
Com isso, é possível auditar, revisar e replicar configurações, garantindo maior controle sobre a estratégia de exibição dos produtos.
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization | Bearer {userToken} | Token de autenticação |
Campos Disponíveis (fields)
| Campo | Descrição |
|---|---|
| bannerGroups | carrega banners associados à vitrine |
Campos de Condição Disponíveis
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | identificador da vitrine |
| code | string | código de identificação da vitrine |
| name | string | nome definido para a vitrine |
| title | string | título da vitrine |
| salesChannelId | integer | identificador do canal de venda associado |
| locationId | string | identificador da localização associada |
| createdAt | string | data de cadastro da vitrine |
| updatedAt | string | data de última atualização da vitrine |
Campos de Ordenação Disponíveis
| Campo | Descrição |
|---|---|
| id | Identificador da vitrine |
| priority | Prioridade de exibição da vitrine |
Exemplo de Requisição
1curl --request GET \2 --url {{MAIN_URL}}/template/showcases \3 --header "Authorization: Bearer userToken" \✅ Resposta de Sucesso
1{2 {3 "id": 1,4 "salesChannelId": 1,5 "code": "Tênis",6 "locationId": null,7 "name": "Primeira vitrine",8 "title": "Vitrine básica",9 "description": "Subtítulo da vitrine",10 "bestSellers": true,11 "limit": 7,12 "bannerGroups": [],13 "order": [14 {15 "field": "id",16 "order": "ASC"17 }18 ],19 "condition": {20 "type": "AND",21 "conditions": [22 {23 "field": "category",24 "value": [25 226 ],27 "operator": "in"28 }29 ]30 },31 "createdAt": "2025-07-04 21:11:25",32 "updatedAt": "2025-09-23 11:31:47"33 },34 {35 "id": 2,36 "salesChannelId": 1,37 "code": "kit-promocionais-tenis",38 "locationId": null,39 "name": "Kit promocionais-tenis",40 "title": "Vitrine 1",41 "description": "",42 "bestSellers": true,43 "limit": 3,44 "bannerGroups": [],45 "order": [46 {47 "field": "id",48 "order": "ASC"49 }50 ],51 "condition": {52 "type": "AND",53 "conditions": [54 {55 "field": "id",56 "value": [57 2,58 359 ],60 "operator": "="61 }62 ]63 },64 "createdAt": "2025-07-04 21:11:25",65 "updatedAt": "2025-08-22 14:11:12"66 }67 }Busca detalhes de uma vitrine
/template/showcases/{showcaseId}
Busca informações detalhadas de uma vitrine da loja
Descrição
Este endpoint é responsável por retornar os detalhes das configurações de uma vitrine específica.
A vitrine desejada deve ser identificada pelo ID informado na URL do endpoint, garantindo que as informações retornadas correspondam ao registro correto.
A resposta permite consultar todas as configurações definidas para a exibição e funcionamento da vitrine.
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Authorization | Bearer {userToken} | Token de autenticação |
Parâmetros da URL
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| showcaseId | integer | Sim | Identificador da vitrine que deve ser consultada |
Exemplo de Requisição
1curl --request GET \2 --url {{MAIN_URL}}/template/showcases/{showcaseId} \3 --header "Authorization: Bearer userToken" \✅ Resposta de Sucesso
1{2 "id": 1,3 "salesChannelId": 1,4 "code": "Tênis",5 "locationId": null,6 "name": "Tênis",7 "title": "Vitrine 1",8 "description": "",9 "bestSellers": true,10 "limit": 3,11 "bannerGroups": [12 "home-triple-grid-banner"13 ],14 "order": [15 {16 "field": "id",17 "order": "ASC"18 }19 ],20 "condition": {21 "type": "AND",22 "conditions": [23 {24 "field": "sku",25 "value": [26 "SKUABC123",27 "SKUABC124",28 "SKUABC125",29 "SKUABC126"30 ],31 "operator": "in"32 }33 ]34 },35 "createdAt": "2025-07-04 21:11:25",36 "updatedAt": "2025-10-13 17:06:45"37}⚠️ Possíveis erros:
Atenção: a seguir estão destacados os principais erros que podem ocorrer neste endpoint.
Os cenários descritos representam os erros mais relevantes do contexto atual, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | Código Http | Descrição |
|---|---|---|
| UAPPI_STORE_SHOWCASE_NOT_FOUND | 404 | A vitrine solicitada não foi encontrada. |
| UAPPI_STORE_PROFILE_NOT_FOUND | 404 | O perfil do usuário solicitado não foi encontrado. |
| UAPPI_CORE_INVALID_TRADE_POLICY_ID | 400 | Os ids de política comercial solicitados não são permitidos. |
Cadastro de vitrine
/template/showcases
Cadastra vitrines para exibição de produtos na loja
Descrição
Endpoint responsável por permitir que o lojista crie vitrines e exiba produtos estratégicos na loja 🛍️.
A rota possibilita definir se devem ser exibidos produtos mais vendidos, limitar a quantidade de itens da vitrine e configurar a exibição com base em condições específicas.
Para que a configuração funcione corretamente, é necessário montar um filtro, que será armazenado no banco de dados junto aos demais dados da vitrine.
Internamente, o sistema realiza consultas na listagem de produtos e aplica o filtro configurado para retornar apenas os itens desejados. Na prática, o comportamento é semelhante a utilizar diretamente o endpoint de listagem de produtos com um filtro personalizado.
Para mais detalhes sobre a montagem de filtros, consulte nosso guia de listagens.
Essa estrutura permite criar vitrines simples ou altamente segmentadas, combinando múltiplas regras de filtragem e ordenação conforme a estratégia da loja 🚀.
Parâmetros
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | O body definirá a vitrine que será cadastrado |
Authorization | Bearer {userToken} | Token de autenticação |
Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
salesChannelId | integer | ✅ | Define o canal de venda onde a vitrine deve ser exibida |
code | boolean | ✅ | Codigo de identificação da vitrine (max 100) |
locationId | string | ❌ | Id da localização onde a vitrine será associada (max 50 caracteres) |
name | string | ✅ | Nome da vitrine que esta sendo criada (max 100) |
title | string | ✅ | Titulo da vitrine que está sendo criada (max 100) |
description | string | ✅ | Descrição da vitrine (max 255) |
bestsellers | boolean | ✅ | Define se deve exibir os produtos mais venditos |
limit | integer | ✅ | Limite de itens (max 100 min 1) |
order | array | ✅ | Lista de configurações de ordenação para a listagem |
order.*.field | string | ✅ | Determina o campo que a listagem utilizará para a ordenação |
order..order | string | ✅ | Ordem da ordenação entre asc e desc (do menor para o maior, em ordem alfabética, etc.) |
condition | array | ✅ | Grupo de condição que armazena e aplica diversos filtros simutâneos |
condition.type | string | ✅ | Determina abordagem de filtragem, onde usar "and" obriga a listagem a respeitar todos os filtros e "or" que retorna itens que atenda ao menos 1 dos filtros |
condition.conditions | array | ✅ | Lista de filtros que devem ser aplicados à listagem |
condition.conditions.field | string | ❌ | Campo pelo qual a listagem deve ser filtrada |
condition.conditions.operator | string | ❌ | Operador lógico para a condição como "igual a", "diferente de", "maior que", "menor que", "entre x,y, z" e outros |
condition.conditions.field | string | ❌ | Valor do filtro que a listagem deve atender |
Campos de Condição Disponíveis
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID do produto |
| parentProductId | integer | ID do produto pai |
| brandId | integer | ID da marca |
| active | boolean | Produto ativo (true/false) |
| type | string | Tipo do produto |
| sku | string | SKU do produto |
| url | string | URL do produto |
| showInSite | boolean | Exibir no site |
| saleWithoutStock | boolean | Permitir venda sem estoque |
| minimumStock | integer | Estoque mínimo |
| category | integer | ID da categoria |
| mainCategory | integer | ID da categoria principal |
| salePrice | decimal | Preço de venda |
| comparisonPrice | decimal | Preço de comparação |
| priceDifference | decimal | Diferença entre preços |
| filter | object | Filtro por atributos |
| stock | integer | Quantidade em estoque |
| stockInStorage | integer | Estoque em armazém específico |
| productStorageId | integer | ID do armazém |
| name | string | Nome do produto |
| shortDescription | string | Descrição curta |
| description | string | Descrição completa |
| searchDescription | string | Descrição de busca |
| seal | integer | ID do selo |
| tradePolicyId | integer | ID da política comercial |
| productAttributeId | integer | ID do atributo |
| productAttributeValueId | integer | ID do valor do atributo |
| customerWishListId | integer | ID da lista de desejos |
| exclusive | boolean | Produto exclusivo |
| ean | string | Código EAN/GTIN |
| averageRating | decimal | Avaliação média (2 casas decimais, ex.: 4.67). Prefira >=/<= ao = |
| quantityRating | integer | Quantidade de avaliações |
| childrenAmount | integer | Quantidade de variações filhas |
| giftCard | boolean | Filtrar por gift card |
| variationsQuantity | integer |
Campos de Ordenação Disponíveis
| Campo | Descrição |
|---|---|
| id | ID do produto |
| priority | Prioridade de exibição |
| type | Tipo do produto |
| sku | SKU do produto |
| relevance | Relevância em busca |
| stock | Quantidade em estoque |
| stockByStorage | Estoque em armazém |
| name | Nome do produto |
| price | Preço do produto |
| hasStock | Disponibilidade (produtos com estoque primeiro) |
Exemplo de Requisição
1curl --request POST \2 --url {{MAIN_URL}}/template/showcases \3 --header "Authorization: Bearer userToken" \4 --data '{5 "salesChannelId": 1,6 "code": "best-seller-showcase",7 "locationId":"HOME_PAGE_SHOWCASE",8 "name": "Vitrine de produtos mais vendidos",9 "title": "Celulares a partir de R$ 2699,00*",10 "description": "Samsung",11 "bestSellers": false,12 "limit": 100,13 "order": [14 {15 "field":"id",16 "order":"ASC"17 }18 ],19 "condition": {20 "type": "OR",21 "conditions": [22 {23 "field":"productId",24 "operator":"in",25 "value":[1, 2, 3, 4, 5]26 },27 {28 "field":"sku",29 "operator":"in",30 "value":["sku1", "sku2", "sku3", "sku4", "sku5"]31 }32 ]33 }34 }'✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "id": 1,3 "salesChannelId": 1,4 "code": "TECHNOLOGY",5 "locationId": "MENU_SHOWCAASEE",6 "name": "Vitrine de produtos tecnologicos",7 "title": "Celulares a partir de R$ 2699,00*",8 "description": "Monitores, tablets, celulares",9 "bestSellers": false,10 "limit": 100,11 "bannerGroups": [],12 "order": [13 {14 "field": "id",15 "order": "ASC"16 }17 ],18 "condition": {19 "type": "OR",20 "conditions": [21 {22 "field": "id",23 "value": [24 1,25 2,26 3,27 4,28 529 ],30 "operator": "in"31 },32 {33 "field": "sku",34 "value": [35 "sku1",36 "sku2",37 "sku3",38 "sku4",39 "sku5"40 ],41 "operator": "in"42 }43 ]44 },45 "createdAt": "",46 "updatedAt": ""47}⚠️ Possíveis erros:
Atenção: a seguir estão destacados os principais erros que podem ocorrer neste endpoint.
Os cenários descritos representam os erros mais relevantes do contexto atual, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | Código Http | Descrição |
|---|---|---|
| UAPPI_CORE_INVALID_SALES_CHANNEL_ID | 400 | Os ids de canal de venda solicitados não são permitidos. |
| UAPPI_STORE_SHOWCASE_NOT_FOUND | 404 | A vitrine solicitada não foi encontrada. |
| UAPPI_STORE_PROFILE_NOT_FOUND | 404 | O perfil do usuário solicitado não foi encontrado. |
| UAPPI_CORE_INVALID_TRADE_POLICY_ID | 400 | Os ids de política comercial solicitados não são permitidos. |
| UAPPI_STORE_DUPLICATED_SHOWCASE_CODE | 400 | O código da vitrine informada já está sendo utilizado. |
| UAPPI_STORE_TEMPLATE_LOCATION_NOT_FOUND | 404 | A localização solicitada não foi encontrada. |
Atualização de uma vitrine
/template/showcase/{showcaseId}
Possibilita o lojista a atualizar e configurar as vitrines da loja
Descrição
Este endpoint é responsável por atualizar uma vitrine existente ✏️, utilizando a mesma estrutura de corpo da requisição aplicada no cadastro.
A vitrine que será alterada deve ser identificada pelo ID informado na URL do endpoint, garantindo que a atualização seja aplicada corretamente ao registro desejado.
Essa abordagem permite reaproveitar o mesmo padrão de configuração, mantendo consistência entre criação e edição.
Com isso, é possível ajustar completamente os critérios de exibição da vitrine, incluindo filtros, ordenação e configurações gerais, conforme a estratégia da loja 🚀.
Parâmetros
Headers Obrigatórios
| Header | Valor | Descrição |
|---|---|---|
Content-Type | application/json | O body definirá a vitrine que será cadastrado |
Authorization | Bearer {userToken} | Token de autenticação |
Parâmetros do Corpo
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
salesChannelId | integer | ✅ | Define o canal de venda onde a vitrine deve ser exibida |
code | boolean | ✅ | Codigo de identificação da vitrine (max 100) |
locationId | string | ❌ | Id da localização onde a vitrine será associada (max 50 caracteres) |
name | string | ✅ | Nome da vitrine que esta sendo criada (max 100) |
title | string | ✅ | Titulo da vitrine que está sendo criada (max 100) |
description | string | ✅ | Descrição da vitrine (max 255) |
bestsellers | boolean | ✅ | Define se deve exibir os produtos mais venditos |
limit | integer | ✅ | Limite de itens (max 100 min 1) |
order | array | ✅ | Lista de configurações de ordenação para a listagem |
order.*.field | string | ✅ | Determina o campo que a listagem utilizará para a ordenação |
order..order | string | ✅ | Ordem da ordenação entre asc e desc (do menor para o maior, em ordem alfabética, etc.) |
condition | array | ✅ | Grupo de condição que armazena e aplica diversos filtros simutâneos |
condition.type | string | ✅ | Determina abordagem de filtragem, onde usar "and" obriga a listagem a respeitar todos os filtros e "or" que retorna itens que atenda ao menos 1 dos filtros |
condition.conditions | array | ✅ | Lista de filtros que devem ser aplicados à listagem |
condition.conditions.field | string | ❌ | Campo pelo qual a listagem deve ser filtrada |
condition.conditions.operator | string | ❌ | Operador lógico para a condição como "igual a", "diferente de", "maior que", "menor que", "entre x,y, z" e outros |
condition.conditions.field | string | ❌ | Valor do filtro que a listagem deve atender |
Campos de Condição Disponíveis
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID do produto |
| parentProductId | integer | ID do produto pai |
| brandId | integer | ID da marca |
| active | boolean | Produto ativo (true/false) |
| type | string | Tipo do produto |
| sku | string | SKU do produto |
| url | string | URL do produto |
| showInSite | boolean | Exibir no site |
| saleWithoutStock | boolean | Permitir venda sem estoque |
| minimumStock | integer | Estoque mínimo |
| category | integer | ID da categoria |
| mainCategory | integer | ID da categoria principal |
| salePrice | decimal | Preço de venda |
| comparisonPrice | decimal | Preço de comparação |
| priceDifference | decimal | Diferença entre preços |
| filter | object | Filtro por atributos |
| stock | integer | Quantidade em estoque |
| stockInStorage | integer | Estoque em armazém específico |
| productStorageId | integer | ID do armazém |
| name | string | Nome do produto |
| shortDescription | string | Descrição curta |
| description | string | Descrição completa |
| searchDescription | string | Descrição de busca |
| seal | integer | ID do selo |
| tradePolicyId | integer | ID da política comercial |
| productAttributeId | integer | ID do atributo |
| productAttributeValueId | integer | ID do valor do atributo |
| customerWishListId | integer | ID da lista de desejos |
| exclusive | boolean | Produto exclusivo |
| ean | string | Código EAN/GTIN |
| averageRating | decimal | Avaliação média (2 casas decimais, ex.: 4.67). Prefira >=/<= ao = |
| quantityRating | integer | Quantidade de avaliações |
| childrenAmount | integer | Quantidade de variações filhas |
| giftCard | boolean | Filtrar por gift card |
| variationsQuantity | integer |
Campos de Ordenação Disponíveis
| Campo | Descrição |
|---|---|
| id | ID do produto |
| priority | Prioridade de exibição |
| type | Tipo do produto |
| sku | SKU do produto |
| relevance | Relevância em busca |
| stock | Quantidade em estoque |
| stockByStorage | Estoque em armazém |
| name | Nome do produto |
| price | Preço do produto |
| hasStock | Disponibilidade (produtos com estoque primeiro) |
Exemplo de Requisição
1curl --request PUT \2 --url {{MAIN_URL}}/template/showcases/{showcaseId} \3 --header "Authorization: Bearer userToken" \4 --data '{5 "salesChannelId": 1,6 "code": "best-seller-showcase",7 "locationId":"HOME_PAGE_SHOWCASE",8 "name": "Vitrine de produtos mais vendidos",9 "title": "Celulares a partir de R$ 2699,00*",10 "description": "Samsung",11 "bestSellers": false,12 "limit": 100,13 "order": [14 {15 "field":"id",16 "order":"ASC"17 }18 ],19 "condition": {20 "type": "OR",21 "conditions": [22 {23 "field":"productId",24 "operator":"in",25 "value":[1, 2, 3, 4, 5]26 },27 {28 "field":"sku",29 "operator":"in",30 "value":["sku1", "sku2", "sku3", "sku4", "sku5"]31 }32 ]33 }34 }'✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "id": 1,3 "salesChannelId": 1,4 "code": "samsung-showcase",5 "locationId": null,6 "name": "Vitrine de produtos da samsung-Xiamoi",7 "title": "Celulares a partir de R$ 2699,00*",8 "description": "Samsung",9 "bestSellers": true,10 "limit": 100,11 "bannerGroups": [],12 "order": [13 {14 "field": "id",15 "order": "ASC"16 }17 ],18 "condition": {19 "type": "AND",20 "conditions": [21 {22 "field": "brandId",23 "value": 1,24 "operator": "="25 }26 ]27 },28 "createdAt": "2026-03-02 13:46:07",29 "updatedAt": "2026-03-02 13:46:07"30}⚠️ Possíveis erros:
Atenção: a seguir estão destacados os principais erros que podem ocorrer neste endpoint.
Os cenários descritos representam os erros mais relevantes do contexto atual, servindo como referência para entendimento e tratamento das falhas.
| Código Interno | Código Http | Descrição |
|---|---|---|
| UAPPI_CORE_INVALID_SALES_CHANNEL_ID | 400 | Os ids de canal de venda solicitados não são permitidos. |
| UAPPI_STORE_SHOWCASE_NOT_FOUND | 404 | A vitrine solicitada não foi encontrada. |
| UAPPI_STORE_PROFILE_NOT_FOUND | 404 | O perfil do usuário solicitado não foi encontrado. |
| UAPPI_CORE_INVALID_TRADE_POLICY_ID | 400 | Os ids de política comercial solicitados não são permitidos. |
| UAPPI_STORE_DUPLICATED_SHOWCASE_CODE | 400 | O código da vitrine informada já está sendo utilizado. |
| UAPPI_STORE_TEMPLATE_LOCATION_NOT_FOUND | 404 | A localização solicitada não foi encontrada. |
Excluir uma vitrine
Endpoint
/template/showcases/{showcaseId}
Rota que possibilita ao lojista a exclusão de uma vitrine.
Descrição
Este endpoint é responsável por excluir uma vitrine, identificado pelo ID informado na URL da API. Após a exclusão, a vitrine não ficará mais disponível para consultas ou associações na plataforma.
Parâmetros da URL
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
| showcaseId | integer | Sim | ID único de uma vitrine |
Exemplo de Requisição
1curl --request DELETE \2 --url {{MAIN_URL}}/template/showcases/{showcaseId} \3 --header "Authorization: Bearer userToken" \✅ Resposta de Sucesso
HTTP Status: 200 OK
1{2 "status": true,3 "data": true4}⚠️ Erro retornado:
1{2 "status": false,3 "data": {4 "code": 404,5 "errorCode": "UAPPI_STORE_SHOWCASE_NOT_FOUND",6 "message": "The requested showcase was not found."7 }8}