Páginas do app
Lista, cria, altera e apaga as páginas de conteúdo que o aplicativo mobile da loja exibe, como a página inicial do app.
O aplicativo mobile da loja não tem layout fixo: ele monta suas telas a partir de páginas do app. Cada página tem um slug (o nome na URL), um título, uma posição e a opção de aparecer na página inicial do app. Dentro da página ficam seções (listas de produtos, de categorias, carrossel de banners) que o app desenha de cima para baixo.
Estas quatro rotas administram a página em si. A leitura pública que o app faz fica na API da vitrine e devolve as seções já preenchidas com os produtos e categorias.
Todas as rotas exigem o módulo mobile-pages ligado (sem ele: 403 module_disabled). Ler exige view_content ou manage_content; criar, alterar e apagar exigem manage_content.
Listar páginas
/api/v1/admin/mobile-pagesAdminListar as páginas ativas do app
Devolve as páginas com status A (ativas), ordenadas por position e depois por data de criação, com as seções de cada uma. Páginas desativadas não aparecem na lista, mas continuam acessíveis pelo id. Sem paginação, sem filtros.
curl "$BASE_URL/api/v1/admin/mobile-pages" \
-H "Authorization: Bearer $TOKEN"{
"pages": [
{
"id": "6d1b4a7e-3c0f-4a52-9e6b-1f6a2f0b9c11",
"page_id": "6d1b4a7e-3c0f-4a52-9e6b-1f6a2f0b9c11",
"slug": "home",
"status": "A",
"position": 0,
"show_in_home": true,
"storefront_id": "",
"title": "Início",
"description": "Página inicial do app",
"sections": [
{
"id": "0f3c9d6a-2a2d-4f5c-8d5e-6d0a7c1b2e33",
"section_id": "0f3c9d6a-2a2d-4f5c-8d5e-6d0a7c1b2e33",
"type": "product_list",
"position": 0,
"status": "A",
"settings": {},
"content": { "source": "newest", "limit": 10, "items": [] }
}
]
}
]
}Campos da resposta
pages[].iduuidpages[].page_iduuidid, mantida por compatibilidade.pages[].slugstringpages[].statusstringA é ativa.pages[].positionintegerpages[].show_in_homebooleanpages[].storefront_idstringpages[].titlestringpages[].descriptionstringpages[].sectionsarrayposition. Sempre um vetor, vazio quando não há.pages[].sections[].typestringproduct_list, category_list e banner_carousel recebem content.items preenchido pela plataforma na leitura.pages[].sections[].contentobjectproduct_list: product_ids (lista), category_id ou source: "newest", e limit (1 a 50, padrão 10).pages[].sections[].settingsobject{}.Criar uma página
/api/v1/admin/mobile-pagesAdminCriar uma página do app
Cria a página e devolve o registro criado, com sections vazio.
Corpo da requisição
slugstringobrigatórioofertas).statusstringpadrão: AA.positionintegerpadrão: 0show_in_homebooleanpadrão: falsestorefront_idstringPUT não a altera.titlestringdescriptionstringcurl -X POST "$BASE_URL/api/v1/admin/mobile-pages" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"slug":"ofertas","title":"Ofertas da semana","position":1,"show_in_home":true}'{
"id": "b2f0c8d4-71a9-4e61-8c35-0a9e5d7f4c20",
"page_id": "b2f0c8d4-71a9-4e61-8c35-0a9e5d7f4c20",
"slug": "ofertas",
"status": "A",
"position": 1,
"show_in_home": true,
"storefront_id": "",
"title": "Ofertas da semana",
"description": "",
"sections": []
}Alterar uma página
/api/v1/admin/mobile-pages/{id}AdminAlterar uma página do app
Grava de uma vez slug, status, position, show_in_home, title e description. Não é parcial: o que você omitir é gravado como vazio, zero ou falso. Envie sempre a página completa (leia, mude o que precisa, reenvie).
Parâmetros de caminho
iduuidobrigatórioCorpo da requisição
slugstringobrigatóriostatusstringobrigatórioA ativa). Qualquer letra diferente de A (por exemplo D) tira a página da lista.positionintegerobrigatórioshow_in_homebooleanobrigatóriotitlestringobrigatóriodescriptionstringcurl -X PUT "$BASE_URL/api/v1/admin/mobile-pages/b2f0c8d4-71a9-4e61-8c35-0a9e5d7f4c20" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"slug":"ofertas","status":"A","position":2,"show_in_home":false,"title":"Ofertas","description":""}'A resposta é a página completa, no formato da criação, com as sections atuais. Se o id não existir, o corpo é null com status 200.
Apagar uma página
/api/v1/admin/mobile-pages/{id}AdminApagar uma página do app
Remove a página definitivamente. A operação é idempotente: apagar um id que não existe também responde 200.
Parâmetros de caminho
iduuidobrigatóriocurl -X DELETE "$BASE_URL/api/v1/admin/mobile-pages/b2f0c8d4-71a9-4e61-8c35-0a9e5d7f4c20" \
-H "Authorization: Bearer $TOKEN"{ "ok": true }Erros
| Status | Quando | Corpo de exemplo |
|---|---|---|
| 400 | Corpo inválido. | {"error":"invalid json","detail":"..."} |
| 400 | Criação sem slug. | {"error":"failed to create mobile page","detail":"slug required"} |
| 400 | Criação ou alteração rejeitada pelo banco (por exemplo slug repetido). | {"error":"failed to update mobile page","detail":"..."} |
| 401 | Sem token ou token expirado. | {"error":"invalid or expired token"} |
| 403 | Módulo mobile-pages desligado. | {"error":"module_disabled","module":"mobile-pages"} |
| 403 | Sem o privilégio de conteúdo. | {"error":"insufficient privileges","required":"manage_content"} |
| 500 | Falha ao listar ou apagar. | {"error":"failed to delete mobile page","detail":"..."} |
| 503 | Serviço de páginas indisponível. | {"error":"mobile pages unavailable"} |