Como funciona
A API do FarMapp é pública na maioria das rotas (pesquisa de farmácias, detalhe, stock visível e avaliações). As rotas de reservas, perfil de farmácia e administração exigem um token Bearer enviado no header Authorization: Bearer <token>.
Exemplo
curl -H "Authorization: Bearer fm_xxxxx" \
https://farmaperto.onrender.com/api/reservas/minhas
Tipos de sessão
| Tipo | Endpoint | O que permite |
|---|---|---|
| Utilizador | POST /api/auth/login | Reservar medicamentos, cancelar e concluir as próprias reservas. |
| Farmácia | POST /api/auth/farmacia | Gerir perfil e stock, ver e responder a reservas. |
POST /api/auth/google | Iniciar sessão de utilizador com ID token do Google. | |
| Admin | POST /api/auth/login | Estatísticas e gestão global de farmácias. |
Login de utilizador
Credenciais: email e palavra-passe. Resposta: token, user e detalhes.
curl -X POST https://farmaperto.onrender.com/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"voce@exemplo.com","senha":"a-sua-palavra-passe"}'
Acesso de farmácia
Cada farmácia tem um ID de acesso de 10 dígitos entregue no registo. Troca-o por um token:
curl -X POST https://farmaperto.onrender.com/api/auth/farmacia \
-H "Content-Type: application/json" \
-d '{"id_acesso":"1234567890"}'
Sessão Google
curl -X POST https://farmaperto.onrender.com/api/auth/google \
-H "Content-Type: application/json" \
-d '{"credential":"<Google ID token>"}'
Verificar a sessão
GET /api/auth/me devolve os dados do utilizador autenticado; GET /api/perfil/me devolve o perfil completo da farmácia autenticada (com stock e quantidades reservadas).
Erros comuns
401— token ausente ou inválido ({"erro":true,"mensagem":"..."}).- Tokens vencem; o FarMapp devolve sessão (re)validada nos fluxos de login. Se receberes 401, renova o token.
Dica CLI/MCP: o CLI oficial guarda o token em ~/.config/farmapp/token (permissões 0600) — o servidor MCP lê o mesmo ficheiro. Usa npx farmapp-cli login ou npx farmapp-cli login-farmacia e as ferramentas autenticadas passam a funcionar sem configuração extra.