{"openapi":"3.0.1","info":{"title":"FinGuide API","version":"v1"},"servers":[{"url":"http://66.42.121.18/finguide-api","description":"Generated server url"}],"paths":{"/api/v1/plans/{planId}/incomes":{"get":{"tags":["financial-item-controller"],"operationId":"incomes","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["financial-item-controller"],"operationId":"createIncome","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncomeRequest"}}},"required":true},"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/goals":{"get":{"tags":["financial-item-controller"],"operationId":"goals","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["financial-item-controller"],"operationId":"createGoal","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalRequest"}}},"required":true},"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/goals/reorder":{"post":{"tags":["financial-item-controller"],"operationId":"reorderGoals","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalReorderRequest"}}},"required":true},"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/expenses":{"get":{"tags":["financial-item-controller"],"operationId":"expenses","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}}},"security":[{"bearerAuth":[]}]},"post":{"tags":["financial-item-controller"],"operationId":"createExpense","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpenseRequest"}}},"required":true},"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/incomes/{id}":{"get":{"tags":["financial-item-controller"],"operationId":"income","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["financial-item-controller"],"operationId":"deleteIncome","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found"},"400":{"description":"Validation failed"}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["financial-item-controller"],"operationId":"updateIncome","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IncomeRequest"}}},"required":true},"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/goals/{id}":{"get":{"tags":["financial-item-controller"],"operationId":"goal","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["financial-item-controller"],"operationId":"deleteGoal","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found"},"400":{"description":"Validation failed"}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["financial-item-controller"],"operationId":"updateGoal","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoalRequest"}}},"required":true},"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/expenses/{id}":{"get":{"tags":["financial-item-controller"],"operationId":"expense","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]},"delete":{"tags":["financial-item-controller"],"operationId":"deleteExpense","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"404":{"description":"Resource was not found"},"400":{"description":"Validation failed"}},"security":[{"bearerAuth":[]}]},"patch":{"tags":["financial-item-controller"],"operationId":"updateExpense","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}},{"name":"id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpenseRequest"}}},"required":true},"responses":{"404":{"description":"Resource was not found","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}},"400":{"description":"Validation failed","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/scenarios":{"get":{"tags":["plan-read-controller"],"operationId":"scenarios","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/dashboard":{"get":{"tags":["plan-read-controller"],"operationId":"dashboard","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/analytics/health":{"get":{"tags":["plan-read-controller"],"operationId":"health","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/{planId}/analytics/cashflow":{"get":{"tags":["plan-read-controller"],"operationId":"cashflow","parameters":[{"name":"planId","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/plans/current":{"get":{"tags":["plan-read-controller"],"operationId":"currentPlan","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/me":{"get":{"tags":["user-profile-controller"],"operationId":"me","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1/":{"get":{"tags":["plan-read-controller"],"operationId":"apiRoot","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}},"/api/v1":{"get":{"tags":["plan-read-controller"],"operationId":"apiRoot_1","responses":{"200":{"description":"OK","content":{"*/*":{"schema":{"$ref":"#/components/schemas/ApiEnvelopeMapStringObject"}}}}},"security":[{"bearerAuth":[]}]}}},"components":{"schemas":{"IncomeRequest":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"frequency":{"type":"string"},"growthType":{"type":"string"},"growthPct":{"type":"number"},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"}},"description":"Income create/patch request. For PATCH, omitted fields keep current values; nullable fields set to null are treated as unchanged in the current H2 implementation."},"ApiEnvelopeMapStringObject":{"type":"object","properties":{"data":{"type":"object","additionalProperties":{"type":"object"}}}},"GoalRequest":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"icon":{"type":"string"},"currentCost":{"type":"number"},"savedAmount":{"type":"number"},"currency":{"type":"string"},"targetYear":{"minimum":2024,"type":"integer","description":"Target year, aligned with the public OpenAPI contract minimum.","format":"int32"},"type":{"type":"string"},"growthType":{"type":"string"},"growthPct":{"type":"number"},"indexLabel":{"type":"string"},"priority":{"type":"integer","format":"int32"}},"description":"Goal create/patch request. For PATCH, omitted fields keep current values; nullable fields set to null are treated as unchanged in the current H2 implementation."},"GoalReorderRequest":{"type":"object","properties":{"goalIds":{"type":"array","items":{"type":"string","format":"uuid"}}}},"ApiEnvelopeObject":{"type":"object","properties":{"data":{"type":"object"}}},"ExpenseRequest":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"amount":{"type":"number"},"currency":{"type":"string"},"frequency":{"type":"string"},"growthType":{"type":"string"},"growthPct":{"type":"number"},"growthLabel":{"type":"string"},"budgetClass":{"type":"string"},"startDate":{"type":"string","format":"date"},"endDate":{"type":"string","format":"date"}},"description":"Expense create/patch request. For PATCH, omitted fields keep current values; nullable fields set to null are treated as unchanged in the current H2 implementation."}},"securitySchemes":{"bearerAuth":{"type":"http","description":"Keycloak OIDC access token","scheme":"bearer","bearerFormat":"JWT"}}}}