Conteúdo da vitrine
Os textos, imagens e formulários que o cliente vê na loja além do catálogo: banners, páginas, blog, FAQ, formulários e anúncios.
Além de produtos, uma loja tem conteúdo: o banner da campanha na home, a página "Sobre nós", os artigos do blog, o formulário de contato. Esta seção reúne as rotas públicas que um front-end usa para ler e, em alguns casos, enviar esse conteúdo. O conteúdo é cadastrado no painel do administrador (ou do seller); aqui você só consome.
Nenhuma rota desta seção exige login do cliente. Quase todas dependem de um módulo que a loja liga ou desliga; módulo desligado devolve 403 module_disabled.
Como funciona
| Quero... | Rota | Módulo |
|---|---|---|
| Montar o carrossel da home | Banners | banners |
| Mostrar "Sobre nós", políticas | Páginas | (sempre ligado) |
| Listar e ler artigos | Posts do blog | blog |
| Ler e enviar comentários | Comentários do blog | blog |
| Ajuda da plataforma | FAQ | (sempre ligado) |
| Receber um contato ou lead | Formulários | custom-forms |
| Telas do app mobile | Páginas do app | mobile-pages |
| Produtos patrocinados | Anúncios | (Venddor Ads) |
| "Esta avaliação foi útil" | Voto de utilidade | product-reviews |
Conceitos principais
Conteúdo da loja x do seller
Em um marketplace, cada seller (lojista) pode ter banners, páginas, posts e formulários próprios. Eles aparecem só na vitrine do seller. As rotas desta seção devolvem apenas o conteúdo da loja.
Idiomas
O texto de páginas, categorias e posts de blog é guardado por idioma. O idioma vem de ?lang= ou de Accept-Language (só o primeiro valor, por exemplo en-US). Veja o comportamento de cada rota nas páginas; a lista de posts é a mais sensível.
Cache
Banners e as rotas de lives saem com Cache-Control: no-store (cada visitante pode ver uma lista diferente). Páginas, blog e demais leituras saem com Cache-Control: public, max-age=300 (5 minutos), e o FAQ com max-age=60. Uma alteração feita no painel pode levar alguns minutos para aparecer em quem já abriu a página.
Endpoints
| Método | Rota | Para quê | Autenticação |
|---|---|---|---|
| GET | /api/v1/storefront/banners | Lista os banners ativos. | Pública (token opcional) |
| GET | /api/v1/storefront/pages | Lista as páginas ativas. | Pública |
| GET | /api/v1/storefront/pages/{slug} | Lê uma página pelo slug. | Pública |
| GET | /api/v1/storefront/blog/categories | Lista as categorias do blog. | Pública |
| GET | /api/v1/storefront/blog/posts | Lista os posts publicados. | Pública |
| GET | /api/v1/storefront/blog/posts/{slug} | Lê um post pelo slug. | Pública |
| GET | /api/v1/storefront/blog/posts/{postId}/comments | Lista os comentários aprovados. | Pública |
| POST | /api/v1/storefront/blog/posts/{postId}/comments | Envia um comentário. | Pública (token opcional) |
| GET | /api/v1/storefront/faq | Lista os artigos do FAQ da plataforma. | Pública |
| GET | /api/v1/storefront/faq/search | Busca no FAQ. | Pública |
| GET | /api/v1/storefront/forms/{slug} | Lê a definição de um formulário. | Pública |
| POST | /api/v1/storefront/forms/{slug}/submit | Envia as respostas. | Pública |
| GET | /api/v1/storefront/mobile-pages | Lista as páginas do app. | Pública |
| GET | /api/v1/storefront/mobile-pages/{id} | Lê uma página do app. | Pública |
| GET | /api/v1/storefront/ads/slots | Pede anúncios patrocinados. | Pública |
| POST | /api/v1/storefront/ads/events | Registra clique em anúncio. | Pública |
| POST | /api/v1/storefront/reviews/{id}/helpful | Vota que uma avaliação foi útil. | Pública (sessão ou token) |
Erros comuns
- Mandar
Accept-Language: en-USe receber a lista de posts vazia. Os posts só aparecem em idiomas que têm tradução cadastrada. Mande?lang=pt-BRou trate a lista vazia. - Procurar um comentário ou post pelo slug na URL de comentários.
{postId}nos comentários é o UUID do post, não o slug. - Esquecer o módulo.
403 module_disabledquer dizer que a loja desligou o módulo daquela rota, e não que falta permissão. - Exibir o corpo de página ou de e-mail sem sanitizar. Páginas e posts trazem HTML ou Markdown cadastrado no painel.
- Ler o
statuscomo palavra. Dependendo da rota, ele vem como letra (A). - Usar ids de tipo errado. Ids desta seção são UUID, e um texto não UUID costuma responder
500com mensagem em português, não400.