{"openapi":"3.0.0","info":{"title":"Caderno Milion\u00e1rio API","description":"API REST do Caderno Milion\u00e1rio - Sistema SaaS para gest\u00e3o pessoal e de neg\u00f3cio","version":"1.0.0","contact":{"name":"Caderno Milion\u00e1rio","email":"suporte@cadernomilionario.pt"}},"servers":[{"url":"https:\/\/cadernomilionario.online\/api\/v1","description":"Servidor Ativo (Produ\u00e7\u00e3o)"},{"url":"https:\/\/cadernomilionario.online\/api\/v1","description":"Produ\u00e7\u00e3o (cadernomilionario.online)"},{"url":"http:\/\/localhost:8000\/api\/v1","description":"Servidor Local (localhost:8000)"}],"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT","description":"Autentica\u00e7\u00e3o via Bearer Token (Sanctum)"}},"schemas":{"User":{"type":"object","properties":{"id":{"type":"integer","example":1},"name":{"type":"string","example":"Jo\u00e3o Silva"},"email":{"type":"string","format":"email","example":"joao@example.pt"},"role":{"type":"string","example":"user"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Transacao":{"type":"object","properties":{"id":{"type":"integer","example":1},"descricao":{"type":"string","example":"Venda de produtos"},"tipo":{"type":"string","enum":["receita","despesa"],"example":"receita"},"valor":{"type":"number","format":"float","example":150.5},"categoria_id":{"type":"integer","example":1},"data":{"type":"string","format":"date","example":"2024-06-06"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Produto":{"type":"object","properties":{"id":{"type":"integer","example":1},"nome":{"type":"string","example":"Laptop"},"descricao":{"type":"string","example":"Laptop high-end"},"preco":{"type":"number","format":"float","example":999.99},"stock":{"type":"integer","example":10},"categoria_id":{"type":"integer","example":1},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Categoria":{"type":"object","properties":{"id":{"type":"integer","example":1},"nome":{"type":"string","example":"Eletr\u00f3nica"},"descricao":{"type":"string","example":"Produtos eletr\u00f3nicos"},"created_at":{"type":"string","format":"date-time"},"updated_at":{"type":"string","format":"date-time"}}},"Error":{"type":"object","properties":{"message":{"type":"string","example":"N\u00e3o autorizado"},"errors":{"type":"object","example":{"campo":"Mensagem de erro"}},"status_code":{"type":"integer","example":400}}}}},"paths":{"\/auth\/register":{"post":{"tags":["Autentica\u00e7\u00e3o"],"summary":"Registar novo utilizador","description":"Cria uma nova conta de utilizador","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["name","email","password","password_confirmation"],"properties":{"name":{"type":"string","example":"Jo\u00e3o Silva"},"email":{"type":"string","format":"email","example":"joao@example.pt"},"password":{"type":"string","format":"password","example":"Senha123!"},"password_confirmation":{"type":"string","format":"password","example":"Senha123!"}}}}}},"responses":{"201":{"description":"Utilizador registado com sucesso","content":{"application\/json":{"schema":{"type":"object","properties":{"user":{"$ref":"#\/components\/schemas\/User"},"token":{"type":"string","example":"1|abcd1234efgh5678ijkl9012mnopqrst"}}}}}},"400":{"description":"Dados de registo inv\u00e1lidos"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}}},"\/auth\/login":{"post":{"tags":["Autentica\u00e7\u00e3o"],"summary":"Autenticar utilizador","description":"Faz login de um utilizador existente","requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email","example":"joao@example.pt"},"password":{"type":"string","format":"password","example":"Senha123!"}}}}}},"responses":{"200":{"description":"Login efetuado com sucesso","content":{"application\/json":{"schema":{"type":"object","properties":{"user":{"$ref":"#\/components\/schemas\/User"},"token":{"type":"string","example":"1|abcd1234efgh5678ijkl9012mnopqrst"}}}}}},"401":{"description":"Credenciais inv\u00e1lidas"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}}},"\/auth\/me":{"get":{"tags":["Autentica\u00e7\u00e3o"],"summary":"Obter dados do utilizador autenticado","description":"Retorna informa\u00e7\u00f5es do utilizador autenticado","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Dados do utilizador","content":{"application\/json":{"schema":{"type":"object","properties":{"user":{"$ref":"#\/components\/schemas\/User"}}}}}},"401":{"description":"N\u00e3o autenticado"}}}},"\/auth\/logout":{"post":{"tags":["Autentica\u00e7\u00e3o"],"summary":"Fazer logout","description":"Termina a sess\u00e3o do utilizador autenticado","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Logout efetuado","content":{"application\/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Sess\u00e3o terminada."}}}}}},"401":{"description":"N\u00e3o autenticado"}}}},"\/configuracoes":{"get":{"tags":["Configura\u00e7\u00f5es"],"summary":"Obter configura\u00e7\u00f5es do perfil","description":"Retorna as configura\u00e7\u00f5es e dados do perfil do utilizador","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Configura\u00e7\u00f5es do perfil","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/User"}}}},"401":{"description":"N\u00e3o autenticado"}}}},"\/configuracoes\/perfil":{"put":{"tags":["Configura\u00e7\u00f5es"],"summary":"Atualizar dados do perfil","description":"Atualiza as informa\u00e7\u00f5es do perfil do utilizador","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"name":{"type":"string","example":"Jo\u00e3o Silva"},"email":{"type":"string","format":"email","example":"joao@example.pt"},"phone":{"type":"string","example":"+351912345678"},"company":{"type":"string","example":"Minha Empresa"}}}}}},"responses":{"200":{"description":"Perfil atualizado","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/User"}}}},"401":{"description":"N\u00e3o autenticado"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}}},"\/transacoes":{"get":{"tags":["Transa\u00e7\u00f5es"],"summary":"Listar transa\u00e7\u00f5es","description":"Lista todas as transa\u00e7\u00f5es do contexto (pessoal ou neg\u00f3cio)","security":[{"bearerAuth":[]}],"parameters":[{"name":"periodo","in":"query","description":"Per\u00edodo (ex: 2024-01 ou 2024)","schema":{"type":"string","example":"2024-06"}},{"name":"tipo","in":"query","description":"Tipo de transa\u00e7\u00e3o","schema":{"type":"string","enum":["receita","despesa"]}}],"responses":{"200":{"description":"Lista de transa\u00e7\u00f5es","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/Transacao"}}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"}}},"post":{"tags":["Transa\u00e7\u00f5es"],"summary":"Criar nova transa\u00e7\u00e3o","description":"Cria uma nova transa\u00e7\u00e3o no contexto","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["descricao","tipo","valor","data"],"properties":{"descricao":{"type":"string","example":"Venda de produtos"},"tipo":{"type":"string","enum":["receita","despesa"],"example":"receita"},"valor":{"type":"number","format":"float","example":150.5},"categoria_id":{"type":"integer","example":1},"data":{"type":"string","format":"date","example":"2024-06-06"}}}}}},"responses":{"201":{"description":"Transa\u00e7\u00e3o criada","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Transacao"}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}}},"\/transacoes\/{id}":{"get":{"tags":["Transa\u00e7\u00f5es"],"summary":"Obter transa\u00e7\u00e3o","description":"Retorna os detalhes de uma transa\u00e7\u00e3o espec\u00edfica","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","description":"ID da transa\u00e7\u00e3o","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Detalhes da transa\u00e7\u00e3o","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Transacao"}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"},"404":{"description":"Transa\u00e7\u00e3o n\u00e3o encontrada"}}},"put":{"tags":["Transa\u00e7\u00f5es"],"summary":"Atualizar transa\u00e7\u00e3o","description":"Atualiza uma transa\u00e7\u00e3o existente","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","description":"ID da transa\u00e7\u00e3o","required":true,"schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","properties":{"descricao":{"type":"string"},"tipo":{"type":"string","enum":["receita","despesa"]},"valor":{"type":"number","format":"float"},"categoria_id":{"type":"integer"},"data":{"type":"string","format":"date"}}}}}},"responses":{"200":{"description":"Transa\u00e7\u00e3o atualizada","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Transacao"}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"},"404":{"description":"Transa\u00e7\u00e3o n\u00e3o encontrada"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}},"delete":{"tags":["Transa\u00e7\u00f5es"],"summary":"Eliminar transa\u00e7\u00e3o","description":"Remove uma transa\u00e7\u00e3o existente","security":[{"bearerAuth":[]}],"parameters":[{"name":"id","in":"path","description":"ID da transa\u00e7\u00e3o","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Transa\u00e7\u00e3o eliminada"},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"},"404":{"description":"Transa\u00e7\u00e3o n\u00e3o encontrada"}}}},"\/produtos":{"get":{"tags":["Produtos"],"summary":"Listar produtos","description":"Lista todos os produtos do contexto","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Lista de produtos","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/Produto"}}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"}}},"post":{"tags":["Produtos"],"summary":"Criar novo produto","description":"Cria um novo produto no contexto","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["nome","preco","stock"],"properties":{"nome":{"type":"string","example":"Laptop"},"descricao":{"type":"string","example":"Laptop high-end"},"preco":{"type":"number","format":"float","example":999.99},"stock":{"type":"integer","example":10},"categoria_id":{"type":"integer","example":1}}}}}},"responses":{"201":{"description":"Produto criado","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Produto"}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}}},"\/categorias":{"get":{"tags":["Categorias"],"summary":"Listar categorias","description":"Lista todas as categorias do contexto","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"Lista de categorias","content":{"application\/json":{"schema":{"type":"array","items":{"$ref":"#\/components\/schemas\/Categoria"}}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"}}},"post":{"tags":["Categorias"],"summary":"Criar nova categoria","description":"Cria uma nova categoria no contexto","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["nome"],"properties":{"nome":{"type":"string","example":"Eletr\u00f3nica"},"descricao":{"type":"string","example":"Produtos eletr\u00f3nicos"}}}}}},"responses":{"201":{"description":"Categoria criada","content":{"application\/json":{"schema":{"$ref":"#\/components\/schemas\/Categoria"}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}}},"\/pessoal\/resumo":{"get":{"tags":["Pain\u00e9is"],"summary":"Obter resumo pessoal","description":"Retorna um resumo r\u00e1pido das finan\u00e7as pessoais para o dashboard","security":[{"bearerAuth":[]}],"parameters":[{"name":"periodo","in":"query","description":"Per\u00edodo para o resumo","schema":{"type":"string","enum":["semana","mes","ano"],"default":"mes"}}],"responses":{"200":{"description":"Resumo pessoal","content":{"application\/json":{"schema":{"type":"object","properties":{"receita_total":{"type":"number","format":"float"},"despesa_total":{"type":"number","format":"float"},"saldo":{"type":"number","format":"float"}}}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"}}}},"\/negocio\/resumo":{"get":{"tags":["Pain\u00e9is"],"summary":"Obter resumo do neg\u00f3cio","description":"Retorna um resumo r\u00e1pido das m\u00e9tricas do neg\u00f3cio para o dashboard","security":[{"bearerAuth":[]}],"parameters":[{"name":"periodo","in":"query","description":"Per\u00edodo para o resumo","schema":{"type":"string","enum":["semana","mes","ano"],"default":"mes"}}],"responses":{"200":{"description":"Resumo do neg\u00f3cio","content":{"application\/json":{"schema":{"type":"object","properties":{"receita_vendas":{"type":"number","format":"float"},"despesas_operacionais":{"type":"number","format":"float"},"lucro_liquido":{"type":"number","format":"float"},"margem_lucro":{"type":"number","format":"float"}}}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem subscri\u00e7\u00e3o"}}}},"\/pagamentos\/digital":{"post":{"tags":["Pagamentos"],"summary":"Processar pagamento digital","description":"Processa um pagamento atrav\u00e9s de Multicaixa Express ou Refer\u00eancia","security":[{"bearerAuth":[]}],"requestBody":{"required":true,"content":{"application\/json":{"schema":{"type":"object","required":["metodo","valor"],"properties":{"metodo":{"type":"string","enum":["multicaixa","referencia"],"example":"multicaixa"},"valor":{"type":"number","format":"float","example":49.99},"plano_id":{"type":"integer","example":1}}}}}},"responses":{"201":{"description":"Pagamento processado","content":{"application\/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"status":{"type":"string","enum":["pendente","confirmado","rejeitado"]},"valor":{"type":"number","format":"float"},"metodo":{"type":"string"}}}}}},"401":{"description":"N\u00e3o autenticado"},"422":{"description":"Erros de valida\u00e7\u00e3o"}}}},"\/admin\/kpis":{"get":{"tags":["Admin"],"summary":"Obter KPIs da plataforma","description":"Retorna m\u00e9tricas em tempo real do painel administrativo","security":[{"bearerAuth":[]}],"responses":{"200":{"description":"KPIs da plataforma","content":{"application\/json":{"schema":{"type":"object","properties":{"utilizadores_total":{"type":"integer"},"utilizadores_ativos":{"type":"integer"},"subscricoes_ativas":{"type":"integer"},"faturacao_mes":{"type":"number","format":"float"},"taxa_retencao":{"type":"number","format":"float"}}}}}},"401":{"description":"N\u00e3o autenticado"},"403":{"description":"Sem permiss\u00e3o de admin"}}}}}}