Listar planos

GET/api/plans

Planos 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

500

Nã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" }