Listar planos
/api/plansPlanos ativos e não ocultos da plataforma, pensada pra uma aplicação externa (site de vendas/onboarding) montar uma tela de preços sem acesso direto ao banco. Cacheável por 60s (Cache-Control: public, max-age=60, stale-while-revalidate=300) e liberada por CORS (Access-Control-Allow-Origin: *).
Um plano some da resposta se estiver desativado ou oculto (marcado como oculto só da API, continua atribuível dentro do painel). featured: true marca no máximo um plano por vez — é só um sinalizador visual pro consumidor da API.
Exemplos de uso
Rota pública — sem header de autenticação, liberada por CORS (Access-Control-Allow-Origin: *), pode ser chamada direto do navegador em qualquer site.
curl "https://primevisita.com.br/api/plans"
Exemplos de saída
200 — lista de planos
200"max": null em algum cargo/appointmentsPerWeek significa sem limite pra aquele item.
{
"plans": [
{
"id": "6a677be7d8639562ca43ddd1",
"name": "Padrão",
"slug": "starter",
"description": "Plano inicial de toda empresa nova — recursos básicos.",
"priceCents": 0,
"price": "R$ 0,00",
"billingPeriod": "MONTHLY",
"features": [
{ "key": "ANALYTICS", "label": "Dashboards de Gestão" }
],
"limits": {
"users": [
{ "role": "ADMIN", "label": "Administrador", "max": 2 },
{ "role": "ANALISTA", "label": "Analista", "max": 1 },
{ "role": "SUPORTE", "label": "Suporte", "max": 2 },
{ "role": "REPRESENTANTE", "label": "Representante", "max": 5 }
],
"appointmentsPerWeek": 1
},
"featured": false
}
]
}
Exemplos de erro
500 — erro interno
500Não tratado explicitamente pela rota (sem try/catch próprio) — cairia no handler de erro padrão do Next.js se a consulta ao banco falhar.
{ "error": "Internal Server Error" }