Devolve o que o space `storefront` mostra a quem pergunta. Segue as mesmas regras de acesso do space (public / members / plan / private com concessões, seção e space em AND): quem não pode abrir o space recebe 403, com o mesmo `data` do `GET /api/spaces/{id}` (`reason`, `actions` e, com cadeado, `lockReason` e `space`). Só itens `ACTIVE` e não excluídos da comunidade do header; nunca traz custo de provedor. `allowedPaymentMethods` vem como array. `soldOut` indica estoque esgotado sem revelar a quantidade.
A resposta vem em três grupos. `products`: só `ONE_TIME` e `INSTALLMENT` sem pré-requisito; um produto avulso listado aqui pode ser comprado em `POST /api/checkout` por quem enxerga este space, mesmo com `directLinkEnabled` desligado. `plans`: cada plano uma vez, `{ id, name, slug, description, fromPrice, currency, options[] }`, com `fromPrice` o menor preço entre as opções à venda e `options` as opções de cobrança (mesmos campos de produto, mais `optionKey` e `savingsPercentage`, o "Economize X%" com a mesma regra de `GET /api/checkout/subscription-groups`, contado sobre todas as opções à venda do plano). Nunca traz plano `link_only`, inativo, excluído ou sem opção à venda, nem opção de cobrança solta. Para quem administra a Loja, cada plano traz também `visibility`. O plano leva ao fluxo do plano (`/pricing/<slug>`). Desde 2026-10-30, cada plano traz `unlocks`: os spaces que assinar o plano (qualquer opção de cobrança dele) abre, `{ id, title, icon, module, slug }`: liberados ao plano, a uma opção dele ou a uma seção inteira (aí contam os spaces da seção que não pedem liberação própria), e que um membro sem o plano não abre. Só os que quem lê enxerga no menu (aberto ou com cadeado; para o visitante deslogado, o menu público), na ordem do menu (seção, posição). Nunca space oculto, só da administração, excluído ou de outra comunidade. Lista vazia quando nada aparece. `addOns`: cada adicional com `availability` calculada para quem pergunta: `owned` (já tem; `subscriptionId` é a assinatura do adicional), `add` (o plano que a pessoa assina, ativo ou em teste, aceita o adicional; `subscriptionId` é essa assinatura, para `POST /api/subscriptions/{id}/add-ons`), `upgrade` (tem plano, mas outro: troca de plano para um de `plans`) ou `subscribe` (sem plano, ou visitante: assinar um de `plans`). `plans` lista `{ id, name, slug }` dos planos que aceitam o adicional, só os públicos ou o que a pessoa assina. Um adicional que não teria plano para indicar não aparece, exceto para quem administra. Cada adicional traz `prerequisiteGroupIds`. `notices` só vem para quem administra (`canManageSpace`): `optionsDropped` (`count` opções de cobrança fora de plano deixaram de aparecer) e `planLinkOnly` (`planId`, `planName`: plano escolhido que está Somente com link), cada um com `message` traduzida. Em `all`, todo avulso, plano público e adicional ativo da comunidade; em `selected`, só os escolhidos, na ordem escolhida. Uma opção de cobrança escolhida antes da fase 3 aparece como o plano dela.