{ "openapi": "3.0.3", "info": { "title": "Poveroh API", "version": "1.0.0", "description": "OpenAPI definition for the Poveroh v1 API" }, "servers": [ { "url": "http://localhost:3001/v1", "description": "API Poveroh Localhost v1" }, { "url": "http://api.poveroh.local/v1", "description": "API Poveroh Localhost proxy v1" }, { "url": "http://api.poveroh.com/v1", "description": "API Poveroh Production v1" } ], "tags": [ { "name": "Default", "description": "Default endpoints that are included with Better Auth by default. These endpoints are not part of any plugin." } ], "components": { "schemas": { "User": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "name": { "type": "string", "minLength": 1 }, "surname": { "type": "string", "minLength": 1 }, "email": { "type": "string", "format": "email" }, "emailVerified": { "type": "boolean" }, "onBoardingStep": { "$ref": "#/components/schemas/OnBoardingStepEnum" }, "onBoardingAt": { "type": "string", "nullable": true }, "image": { "type": "string", "nullable": true, "format": "uri" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "preferences": { "$ref": "#/components/schemas/UserPreferences" } }, "required": [ "id", "name", "surname", "email", "emailVerified", "onBoardingStep", "onBoardingAt", "image", "createdAt", "updatedAt", "preferences" ] }, "Session": { "type": "object", "properties": { "id": { "type": "string", "readOnly": true }, "expiresAt": { "type": "string", "format": "date-time" }, "token": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "ipAddress": { "type": "string" }, "userAgent": { "type": "string" }, "userId": { "type": "string" } }, "required": [ "id", "expiresAt", "token", "createdAt", "updatedAt", "userId" ] }, "Account": { "type": "object", "properties": { "id": { "type": "string", "readOnly": true }, "accountId": { "type": "string" }, "providerId": { "type": "string" }, "userId": { "type": "string" }, "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "idToken": { "type": "string" }, "accessTokenExpiresAt": { "type": "string", "format": "date-time" }, "refreshTokenExpiresAt": { "type": "string", "format": "date-time" }, "scope": { "type": "string" }, "password": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "accountId", "providerId", "userId", "createdAt", "updatedAt" ] }, "Verification": { "type": "object", "properties": { "id": { "type": "string", "readOnly": true }, "identifier": { "type": "string" }, "value": { "type": "string" }, "expiresAt": { "type": "string", "format": "date-time" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "identifier", "value", "expiresAt", "createdAt", "updatedAt" ] }, "AssetTransaction": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "type": { "$ref": "#/components/schemas/AssetTransactionTypeEnum" }, "date": { "type": "string" }, "settlementDate": { "type": "string", "nullable": true }, "quantityChange": { "type": "number", "nullable": true }, "unitPrice": { "type": "number", "nullable": true }, "totalAmount": { "type": "number", "nullable": true }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "fxRate": { "type": "number", "nullable": true }, "fees": { "type": "number", "nullable": true }, "taxAmount": { "type": "number", "nullable": true }, "financialAccountId": { "type": "string", "nullable": true, "format": "uuid" }, "note": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "type", "date", "settlementDate", "quantityChange", "unitPrice", "totalAmount", "currency", "fxRate", "fees", "taxAmount", "financialAccountId", "note", "createdAt", "updatedAt", "deletedAt" ] }, "AssetTransactionTypeEnum": { "type": "string", "enum": [ "BUY", "SELL", "DIVIDEND", "INTEREST", "FEE", "DEPOSIT", "WITHDRAWAL", "VALUATION_ADJUSTMENT", "CAPITAL_CALL", "DISTRIBUTION" ] }, "CurrencyEnum": { "type": "string", "enum": [ "USD", "EUR", "GBP", "JPY", "CNY", "INR", "AUD", "CAD", "CHF", "SEK", "NZD", "MXN", "SGD", "HKD", "NOK", "KRW", "TRY", "UNKNOWN" ] }, "AssetTransactionData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "type": { "$ref": "#/components/schemas/AssetTransactionTypeEnum" }, "date": { "type": "string" }, "settlementDate": { "type": "string", "nullable": true }, "quantityChange": { "type": "number", "nullable": true }, "unitPrice": { "type": "number", "nullable": true }, "totalAmount": { "type": "number", "nullable": true }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "fxRate": { "type": "number", "nullable": true }, "fees": { "type": "number", "nullable": true }, "taxAmount": { "type": "number", "nullable": true }, "financialAccountId": { "type": "string", "nullable": true, "format": "uuid" }, "note": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" } }, "required": [ "id", "assetId", "type", "date", "settlementDate", "quantityChange", "unitPrice", "totalAmount", "currency", "fxRate", "fees", "taxAmount", "financialAccountId", "note", "createdAt", "updatedAt" ] }, "GetAssetTransactionListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/AssetTransactionData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetAssetTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/AssetTransactionData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "AssetTransactionForm": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid" }, "type": { "$ref": "#/components/schemas/AssetTransactionTypeEnum" }, "date": { "type": "string" }, "settlementDate": { "type": "string", "nullable": true }, "quantityChange": { "type": "number", "nullable": true }, "unitPrice": { "type": "number", "nullable": true }, "totalAmount": { "type": "number", "nullable": true }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "fxRate": { "type": "number", "nullable": true }, "fees": { "type": "number", "nullable": true }, "taxAmount": { "type": "number", "nullable": true }, "financialAccountId": { "type": "string", "nullable": true, "format": "uuid" }, "note": { "type": "string", "nullable": true } }, "required": [ "assetId", "type", "date", "settlementDate", "quantityChange", "unitPrice", "totalAmount", "currency", "fxRate", "fees", "taxAmount", "financialAccountId", "note" ] }, "CreateAssetTransactionRequest": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid" }, "type": { "$ref": "#/components/schemas/AssetTransactionTypeEnum" }, "date": { "type": "string" }, "settlementDate": { "type": "string", "nullable": true }, "quantityChange": { "type": "number", "nullable": true }, "unitPrice": { "type": "number", "nullable": true }, "totalAmount": { "type": "number", "nullable": true }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "fxRate": { "type": "number", "nullable": true }, "fees": { "type": "number", "nullable": true }, "taxAmount": { "type": "number", "nullable": true }, "financialAccountId": { "type": "string", "nullable": true, "format": "uuid" }, "note": { "type": "string", "nullable": true } }, "required": [ "assetId", "type", "date", "settlementDate", "quantityChange", "unitPrice", "totalAmount", "currency", "fxRate", "fees", "taxAmount", "financialAccountId", "note" ] }, "UpdateAssetTransactionRequest": { "type": "object", "properties": { "assetId": { "type": "string", "format": "uuid" }, "type": { "$ref": "#/components/schemas/AssetTransactionTypeEnum" }, "date": { "type": "string" }, "settlementDate": { "type": "string", "nullable": true }, "quantityChange": { "type": "number", "nullable": true }, "unitPrice": { "type": "number", "nullable": true }, "totalAmount": { "type": "number", "nullable": true }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "fxRate": { "type": "number", "nullable": true }, "fees": { "type": "number", "nullable": true }, "taxAmount": { "type": "number", "nullable": true }, "financialAccountId": { "type": "string", "nullable": true, "format": "uuid" }, "note": { "type": "string", "nullable": true } } }, "CreateAssetTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/AssetTransactionData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateAssetTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "DeleteAssetTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "AssetTransactionParamsId": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "required": [ "id" ] }, "AssetTransactionFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/AssetTransactionParamsId" }, "assetId": { "type": "string", "format": "uuid" }, "type": { "$ref": "#/components/schemas/AssetTransactionTypeEnum" }, "date": { "$ref": "#/components/schemas/DateFilter" }, "financialAccountId": { "type": "string", "format": "uuid" }, "note": { "$ref": "#/components/schemas/StringFilter" } } }, "DateFilter": { "type": "object", "properties": { "gte": { "type": "string", "format": "date-time" }, "lte": { "type": "string", "format": "date-time" } } }, "StringFilter": { "type": "object", "properties": { "equals": { "type": "string" }, "contains": { "type": "string" } } }, "QueryAssetTransactionFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/AssetTransactionFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "FilterOptions": { "type": "object", "properties": { "skip": { "type": "integer", "minimum": 0, "default": 0 }, "take": { "type": "integer", "minimum": 0, "exclusiveMinimum": true, "default": 20 }, "sortBy": { "type": "string", "default": "createdAt" }, "sortOrder": { "type": "string", "enum": [ "asc", "desc" ], "default": "desc" } } }, "CreateUpdateAssetTransactionRequest": { "anyOf": [ { "$ref": "#/components/schemas/CreateAssetTransactionRequest" }, { "$ref": "#/components/schemas/UpdateAssetTransactionRequest" } ] }, "Asset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/AssetTypeEnum" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "currentValue": { "type": "number" }, "currentValueAsOf": { "type": "string" }, "quantity": { "type": "number", "minimum": 0 }, "totalInvested": { "type": "number", "minimum": 0 }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true }, "marketable": { "$ref": "#/components/schemas/MarketableAsset" }, "realEstate": { "$ref": "#/components/schemas/RealEstateAsset" }, "collectible": { "$ref": "#/components/schemas/CollectibleAsset" }, "privateDeal": { "$ref": "#/components/schemas/PrivateDealAsset" }, "vehicle": { "$ref": "#/components/schemas/VehicleAsset" }, "insurance": { "$ref": "#/components/schemas/InsuranceAsset" }, "other": { "$ref": "#/components/schemas/OtherAsset" }, "transactions": { "type": "array", "items": { "$ref": "#/components/schemas/AssetTransactionData" } }, "autoDepreciations": { "type": "array", "items": { "$ref": "#/components/schemas/AutoDepreciationData" } } }, "required": [ "id", "userId", "title", "type", "currency", "currentValue", "currentValueAsOf", "quantity", "totalInvested", "createdAt", "updatedAt", "deletedAt", "transactions", "autoDepreciations" ] }, "AssetTypeEnum": { "type": "string", "enum": [ "STOCK", "BOND", "ETF", "MUTUAL_FUND", "CRYPTO", "REAL_ESTATE", "COLLECTIBLE", "VEHICLE", "PRIVATE_EQUITY", "VENTURE_CAPITAL", "PRIVATE_DEBT", "P2P_LENDING", "INSURANCE_POLICY", "OTHER" ] }, "MarketableAsset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "symbol": { "type": "string" }, "isin": { "type": "string", "nullable": true }, "exchange": { "type": "string", "nullable": true }, "assetClass": { "$ref": "#/components/schemas/MarketableAssetClassEnum" }, "sector": { "type": "string", "nullable": true }, "region": { "type": "string", "nullable": true }, "lastPriceSync": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "symbol", "isin", "exchange", "assetClass", "sector", "region", "lastPriceSync", "createdAt", "updatedAt", "deletedAt" ] }, "MarketableAssetClassEnum": { "type": "string", "nullable": true, "enum": [ "EQUITY", "BOND", "ETF", "STOCK", "CRYPTO", "COMMODITY", "REIT", "MIXED", null ] }, "RealEstateAsset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "address": { "type": "string" }, "type": { "$ref": "#/components/schemas/RealEstateTypeEnum" }, "purchasePrice": { "type": "number" }, "purchaseDate": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "address", "type", "purchasePrice", "purchaseDate", "createdAt", "updatedAt", "deletedAt" ] }, "RealEstateTypeEnum": { "type": "string", "enum": [ "PRIMARY_HOUSE", "SECONDARY_HOUSE", "RENTAL_PROPERTY" ] }, "CollectibleAsset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "acquisitionCost": { "type": "number", "nullable": true }, "acquisitionDate": { "type": "string", "nullable": true }, "appraisalValue": { "type": "number", "nullable": true }, "appraisalDate": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "acquisitionCost", "acquisitionDate", "appraisalValue", "appraisalDate", "createdAt", "updatedAt", "deletedAt" ] }, "PrivateDealAsset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "committedAmount": { "type": "number", "nullable": true }, "calledAmount": { "type": "number", "nullable": true }, "latestNav": { "type": "number", "nullable": true }, "navDate": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "committedAmount", "calledAmount", "latestNav", "navDate", "createdAt", "updatedAt", "deletedAt" ] }, "VehicleAsset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "brand": { "type": "string" }, "model": { "type": "string" }, "type": { "$ref": "#/components/schemas/VehicleTypeEnum" }, "year": { "type": "integer" }, "purchasePrice": { "type": "number" }, "purchaseDate": { "type": "string", "nullable": true }, "plateNumber": { "type": "string" }, "vin": { "type": "string", "nullable": true }, "mileage": { "type": "integer", "nullable": true }, "condition": { "$ref": "#/components/schemas/AssetConditionEnum" }, "logoIcon": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "brand", "model", "type", "year", "purchasePrice", "purchaseDate", "plateNumber", "vin", "mileage", "condition", "logoIcon", "createdAt", "updatedAt", "deletedAt" ] }, "VehicleTypeEnum": { "type": "string", "enum": [ "CAR", "BOAT", "MOTORCYCLE", "SNOWMOBILE", "BIKE", "OTHER" ] }, "AssetConditionEnum": { "type": "string", "nullable": true, "enum": [ "NEW", "EXCELLENT", "GOOD", "FAIR", "POOR", null ] }, "InsuranceAsset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "insurer": { "type": "string" }, "policyType": { "$ref": "#/components/schemas/InsurancePolicyTypeEnum" }, "policyNumber": { "type": "string" }, "startDate": { "type": "string", "nullable": true }, "endDate": { "type": "string", "nullable": true }, "beneficiary": { "type": "string" }, "premiumPaid": { "type": "number" }, "premiumFrequency": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "surrenderValue": { "type": "number" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "insurer", "policyType", "policyNumber", "startDate", "endDate", "beneficiary", "premiumPaid", "premiumFrequency", "surrenderValue", "createdAt", "updatedAt", "deletedAt" ] }, "InsurancePolicyTypeEnum": { "type": "string", "enum": [ "LIFE", "UNIT_LINKED", "INDEX_LINKED", "PURE_RISK" ] }, "CyclePeriodEnum": { "type": "string", "enum": [ "DAY", "WEEK", "MONTH", "YEAR" ] }, "OtherAsset": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "description": { "type": "string", "nullable": true }, "purchasePrice": { "type": "number", "nullable": true }, "purchaseDate": { "type": "string", "nullable": true }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "description", "purchasePrice", "purchaseDate", "createdAt", "updatedAt", "deletedAt" ] }, "AutoDepreciationData": { "type": "object", "properties": { "startDate": { "type": "string" }, "endDate": { "type": "string", "nullable": true }, "depreciationBase": { "$ref": "#/components/schemas/DepreciationBaseEnum" }, "depreciationType": { "$ref": "#/components/schemas/DepreciationValueTypeEnum" }, "depreciationValue": { "type": "number" }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "cycleNumber": { "type": "integer" } }, "required": [ "startDate", "endDate", "depreciationBase", "depreciationType", "depreciationValue", "cyclePeriod", "cycleNumber" ] }, "DepreciationBaseEnum": { "type": "string", "enum": [ "PURCHASE_PRICE", "CURRENT_VALUE", "LAST_SNAPSHOT" ] }, "DepreciationValueTypeEnum": { "type": "string", "enum": [ "AMOUNT", "PERCENTAGE" ] }, "AssetData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/AssetTypeEnum" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "currentValue": { "type": "number" }, "currentValueAsOf": { "type": "string" }, "quantity": { "type": "number", "minimum": 0 }, "totalInvested": { "type": "number", "minimum": 0 }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "marketable": { "$ref": "#/components/schemas/MarketableAsset" }, "realEstate": { "$ref": "#/components/schemas/RealEstateAsset" }, "collectible": { "$ref": "#/components/schemas/CollectibleAsset" }, "privateDeal": { "$ref": "#/components/schemas/PrivateDealAsset" }, "vehicle": { "$ref": "#/components/schemas/VehicleAsset" }, "insurance": { "$ref": "#/components/schemas/InsuranceAsset" }, "other": { "$ref": "#/components/schemas/OtherAsset" }, "transactions": { "type": "array", "items": { "$ref": "#/components/schemas/AssetTransactionData" } }, "autoDepreciations": { "type": "array", "items": { "$ref": "#/components/schemas/AutoDepreciationData" } } }, "required": [ "id", "title", "type", "currency", "currentValue", "currentValueAsOf", "quantity", "totalInvested", "createdAt", "updatedAt", "transactions", "autoDepreciations" ] }, "GetAssetListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/AssetData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetAssetResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/AssetData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "DeleteAssetResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "AssetParamsId": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "required": [ "id" ] }, "AssetFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/AssetParamsId" }, "title": { "$ref": "#/components/schemas/StringFilter" }, "type": { "$ref": "#/components/schemas/AssetTypeEnum" }, "symbol": { "$ref": "#/components/schemas/StringFilter" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "currentValueAsOf": { "$ref": "#/components/schemas/DateFilter" } } }, "QueryAssetFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/AssetFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "AutoDepreciation": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "startDate": { "type": "string" }, "endDate": { "type": "string", "nullable": true }, "depreciationBase": { "$ref": "#/components/schemas/DepreciationBaseEnum" }, "depreciationType": { "$ref": "#/components/schemas/DepreciationValueTypeEnum" }, "depreciationValue": { "type": "number" }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "cycleNumber": { "type": "integer" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "deletedAt": { "type": "string", "nullable": true } }, "required": [ "id", "assetId", "startDate", "endDate", "depreciationBase", "depreciationType", "depreciationValue", "cyclePeriod", "cycleNumber", "createdAt", "updatedAt", "deletedAt" ] }, "AutoDepreciationInput": { "type": "object", "properties": { "percentage": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "cycleNumber": { "type": "integer", "minimum": 0, "exclusiveMinimum": true } }, "required": [ "percentage", "cyclePeriod", "cycleNumber" ] }, "Category": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "for": { "$ref": "#/components/schemas/TransactionActionEnum" }, "icon": { "type": "string", "minLength": 1 }, "color": { "type": "string", "minLength": 1, "default": "#8B5CF6" }, "subcategories": { "type": "array", "items": { "$ref": "#/components/schemas/Subcategory" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "userId", "title", "for", "icon", "createdAt", "updatedAt" ] }, "TransactionActionEnum": { "type": "string", "enum": [ "EXPENSES", "INCOME", "TRANSFER" ] }, "Subcategory": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "categoryId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "icon": { "type": "string", "minLength": 1 }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "categoryId", "title", "icon", "createdAt", "updatedAt" ] }, "CategoryData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "for": { "$ref": "#/components/schemas/TransactionActionEnum" }, "icon": { "type": "string", "minLength": 1 }, "color": { "type": "string", "minLength": 1, "default": "#8B5CF6" }, "subcategories": { "type": "array", "items": { "$ref": "#/components/schemas/Subcategory" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "title", "for", "icon", "createdAt", "updatedAt" ] }, "GetCategoryListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/CategoryData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetCategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/CategoryData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "CreateCategoryRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "for": { "$ref": "#/components/schemas/TransactionActionEnum" }, "icon": { "type": "string", "minLength": 1 }, "color": { "type": "string", "minLength": 1, "default": "#8B5CF6" } }, "required": [ "title", "for", "icon" ] }, "CreateCategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/CategoryData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "CreateCategoryTemplateRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "for": { "$ref": "#/components/schemas/TransactionActionEnum" }, "icon": { "type": "string", "minLength": 1 }, "color": { "type": "string", "minLength": 1, "default": "#8B5CF6" }, "subcategories": { "type": "array", "items": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "icon": { "type": "string", "minLength": 1 } }, "required": [ "title", "icon" ] } } }, "required": [ "title", "for", "icon" ] }, "UpdateCategoryRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "for": { "$ref": "#/components/schemas/TransactionActionEnum" }, "icon": { "type": "string", "minLength": 1 }, "color": { "type": "string", "minLength": 1, "default": "#8B5CF6" } } }, "UpdateCategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "DeleteCategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "CategoryParamsId": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "required": [ "id" ] }, "CategoryFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/CategoryParamsId" }, "title": { "$ref": "#/components/schemas/StringFilter" }, "for": { "$ref": "#/components/schemas/TransactionActionEnum" } } }, "QueryCategoryFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/CategoryFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "CategoryForm": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "for": { "$ref": "#/components/schemas/TransactionActionEnum" }, "icon": { "type": "string", "minLength": 1 }, "color": { "type": "string", "minLength": 1, "default": "#8B5CF6" } }, "required": [ "title", "for", "icon" ] }, "CreateUpdateCategoryRequest": { "anyOf": [ { "$ref": "#/components/schemas/CreateCategoryRequest" }, { "$ref": "#/components/schemas/UpdateCategoryRequest" } ] }, "CollectibleAssetData": { "type": "object", "properties": { "acquisitionCost": { "type": "number", "nullable": true }, "acquisitionDate": { "type": "string", "nullable": true }, "appraisalValue": { "type": "number", "nullable": true }, "appraisalDate": { "type": "string", "nullable": true } }, "required": [ "acquisitionCost", "acquisitionDate", "appraisalValue", "appraisalDate" ] }, "CreateCollectibleAssetRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "acquisitionDate": { "type": "string" }, "appraisalValue": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "appraisalDate": { "type": "string" } }, "required": [ "title", "value" ] }, "UpdateCollectibleAssetRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "acquisitionDate": { "type": "string" }, "appraisalValue": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "appraisalDate": { "type": "string" } } }, "CollectibleAssetForm": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "acquisitionDate": { "type": "string" }, "appraisalValue": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "appraisalDate": { "type": "string" } }, "required": [ "title", "value" ] }, "DashboardLayoutItem": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/DashboardWidgetEnum" }, "colSpan": { "$ref": "#/components/schemas/ColSpanEnum" }, "minHeight": { "type": "number" }, "visible": { "type": "boolean", "default": true } }, "required": [ "id", "colSpan", "minHeight" ] }, "DashboardWidgetEnum": { "type": "string", "enum": [ "net-worth-evolution", "kpi-row", "liquidity-evolution", "income-expense-month", "month-comparison", "category-trend", "account-balances", "expense-macro-distribution", "recent-transactions" ] }, "ColSpanEnum": { "type": "string", "enum": [ "3", "4", "6", "12" ] }, "DashboardLayout": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "version": { "type": "number" }, "layout": { "type": "array", "items": { "$ref": "#/components/schemas/DashboardLayoutItem" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "userId", "version", "layout", "createdAt", "updatedAt" ] }, "GetDashboardLayout": { "type": "object", "properties": { "layout": { "type": "array", "items": { "$ref": "#/components/schemas/DashboardLayoutItem" } }, "version": { "type": "number" } }, "required": [ "layout", "version" ] }, "GetDashboardLayoutResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/GetDashboardLayout" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateDashboardLayoutRequest": { "type": "object", "properties": { "version": { "type": "number" }, "layout": { "type": "array", "items": { "$ref": "#/components/schemas/DashboardLayoutItem" } } }, "required": [ "version", "layout" ] }, "UpdateDashboardLayoutResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "TimezoneEnum": { "type": "string", "enum": [ "AFRICA_ALGIERS", "AFRICA_CAIRO", "AFRICA_CASABLANCA", "AFRICA_HARARE", "AFRICA_JOHANNESBURG", "AFRICA_MONROVIA", "AFRICA_NAIROBI", "AFRICA_WEST_CENTRAL", "AMERICA_ARGENTINA_BUENOS_AIRES", "AMERICA_BOGOTA", "AMERICA_CARACAS", "AMERICA_CHICAGO", "AMERICA_CHIHUAHUA", "AMERICA_DENVER", "AMERICA_GUATEMALA", "AMERICA_GUYANA", "AMERICA_HALIFAX", "AMERICA_INDIANA_INDIANAPOLIS", "AMERICA_JUNEAU", "AMERICA_LA_PAZ", "AMERICA_LIMA", "AMERICA_QUITO", "AMERICA_LOS_ANGELES", "AMERICA_MAZATLAN", "AMERICA_MEXICO_CITY", "AMERICA_GUADALAJARA", "AMERICA_MONTERREY", "AMERICA_MONTEVIDEO", "AMERICA_NEW_YORK", "AMERICA_PHOENIX", "AMERICA_PUERTO_RICO", "AMERICA_REGINA", "AMERICA_SANTIAGO", "AMERICA_SAO_PAULO", "AMERICA_ST_JOHNS", "AMERICA_TIJUANA", "ASIA_ALMATY", "ASIA_ASTANA", "ASIA_BAGHDAD", "ASIA_BAKU", "ASIA_BANGKOK", "ASIA_CHENNAI", "ASIA_HANOI", "ASIA_CHONGQING", "ASIA_COLOMBO", "ASIA_DHAKA", "ASIA_HONG_KONG", "ASIA_IRKUTSK", "ASIA_JAKARTA", "ASIA_JERUSALEM", "ASIA_KABUL", "ASIA_KAMCHATKA", "ASIA_KARACHI", "ASIA_ISLAMABAD", "ASIA_KATHMANDU", "ASIA_KOLKATA", "ASIA_MUMBAI", "ASIA_NEW_DELHI", "ASIA_KRASNOYARSK", "ASIA_KUALA_LUMPUR", "ASIA_KUWAIT", "ASIA_MAGADAN", "ASIA_MUSCAT", "ASIA_ABU_DHABI", "ASIA_NOVOSIBIRSK", "ASIA_RIYADH", "ASIA_SEOUL", "ASIA_SHANGHAI", "ASIA_SINGAPORE", "ASIA_SREDNEKOLYMSK", "ASIA_TAIPEI", "ASIA_TASHKENT", "ASIA_TBILISI", "ASIA_TEHRAN", "ASIA_TOKYO", "ASIA_OSAKA", "ASIA_SAPPORO", "ASIA_ULAANBAATAR", "ASIA_URUMQI", "ASIA_VLADIVOSTOK", "ASIA_YAKUTSK", "ASIA_YEKATERINBURG", "ASIA_YEREVAN", "ATLANTIC_AZORES", "ATLANTIC_CAPE_VERDE", "ATLANTIC_SOUTH_GEORGIA", "AUSTRALIA_ADELAIDE", "AUSTRALIA_BRISBANE", "AUSTRALIA_CANBERRA", "AUSTRALIA_DARWIN", "AUSTRALIA_HOBART", "AUSTRALIA_MELBOURNE", "AUSTRALIA_PERTH", "AUSTRALIA_SYDNEY", "ETC_GMT_PLUS_12", "ETC_UTC", "EUROPE_AMSTERDAM", "EUROPE_ATHENS", "EUROPE_BELGRADE", "EUROPE_BERN", "EUROPE_BERLIN", "EUROPE_BRATISLAVA", "EUROPE_BRUSSELS", "EUROPE_BUCHAREST", "EUROPE_BUDAPEST", "EUROPE_COPENHAGEN", "EUROPE_DUBLIN", "EUROPE_HELSINKI", "EUROPE_ISTANBUL", "EUROPE_KALININGRAD", "EUROPE_LISBON", "EUROPE_LJUBLJANA", "EUROPE_LONDON", "EUROPE_EDINBURGH", "EUROPE_MADRID", "EUROPE_MINSK", "EUROPE_MOSCOW", "EUROPE_ST_PETERSBURG", "EUROPE_PARIS", "EUROPE_PRAGUE", "EUROPE_RIGA", "EUROPE_ROME", "EUROPE_SAMARA", "EUROPE_SARAJEVO", "EUROPE_SKOPJE", "EUROPE_SOFIA", "EUROPE_STOCKHOLM", "EUROPE_TALLINN", "EUROPE_VIENNA", "EUROPE_VILNIUS", "EUROPE_VOLGOGRAD", "EUROPE_WARSAW", "EUROPE_ZAGREB", "EUROPE_ZURICH", "PACIFIC_APIA", "PACIFIC_AUCKLAND", "PACIFIC_WELLINGTON", "PACIFIC_CHATHAM", "PACIFIC_FAKAOFO", "PACIFIC_FIJI", "PACIFIC_GUADALCANAL", "PACIFIC_GUAM", "PACIFIC_HONOLULU", "PACIFIC_MAJURO", "PACIFIC_MIDWAY", "PACIFIC_NOUMEA", "PACIFIC_PAGO_PAGO", "PACIFIC_PORT_MORESBY", "PACIFIC_TONGATAPU" ] }, "SnapshotFrequencyEnum": { "type": "string", "enum": [ "NONE", "DAILY", "WEEKLY", "MONTHLY", "QUARTERLY", "SEMIANNUAL", "ANNUAL" ] }, "AssetMarketDataTypeEnum": { "type": "string", "enum": [ "BUY", "SELL" ] }, "ValueSourceEnum": { "type": "string", "enum": [ "MANUAL", "MARKET", "APPRAISAL", "DEPRECIATION", "IMPORT", "CALCULATED" ] }, "MarketDataTransportEnum": { "type": "string", "enum": [ "HTTP", "WS", "HYBRID" ] }, "MarketStateEnum": { "type": "string", "enum": [ "OPEN", "CLOSED", "PRE_MARKET", "POST_MARKET", "UNKNOWN" ] }, "FinancialAccountTypeEnum": { "type": "string", "enum": [ "ONLINE_BANK", "BANK_ACCOUNT", "CIRCUIT", "DEPOSIT_BANK", "BROKER", "WALLET", "CASH", "CREDIT_CARD", "OTHER" ] }, "TransactionStatusEnum": { "type": "string", "enum": [ "APPROVED", "REJECTED", "IMPORT_PENDING", "IMPORT_REJECTED", "IMPORT_APPROVED" ] }, "ImportTransactionStatusEnum": { "type": "string", "enum": [ "IMPORT_APPROVED", "IMPORT_REJECTED" ] }, "RememberPeriodEnum": { "type": "string", "enum": [ "SAME_DAY", "THREE_DAYS", "SEVEN_DAYS", "FOURTEEN_DAYS", "THIRTY_DAYS", "NINETY_DAYS" ] }, "AppearanceModeEnum": { "type": "string", "enum": [ "LOGO", "ICON" ] }, "FileTypeEnum": { "type": "string", "enum": [ "CSV", "PDF" ] }, "LanguageEnum": { "type": "string", "enum": [ "EN", "ES", "FR", "DE", "IT", "PT", "NL", "RU", "ZH", "JA", "KO", "AR", "HI", "TH", "VI", "TR", "PL", "CS", "HU", "RO", "BG", "HR", "SK", "SL", "ET", "LV", "LT", "MT", "FI", "SV", "DA", "NO", "IS", "EL", "HE", "FA", "UR", "BN", "TA", "TE", "ML", "KN", "GU", "MR", "PA", "OR", "AS", "NE", "SI", "MY", "KH", "LO", "KA", "AM", "TI", "SW", "ZU", "AF", "XH", "ST", "TN", "SS", "VE", "TS", "NR", "IG", "YO", "HA", "FF", "WO", "BM", "DY", "SN" ] }, "DateFormatEnum": { "type": "string", "enum": [ "DD_MM_YYYY", "MM_DD_YYYY", "YYYY_MM_DD", "DD_MM_YY", "MM_DD_YY", "YY_MM_DD", "DD_MMMM_YYYY", "MMMM_DD_YYYY", "YYYY_MMMM_DD" ] }, "OnBoardingStepEnum": { "type": "string", "enum": [ "EMAIL", "GENERALITES", "PREFERENCES", "COMPLETED" ] }, "UserActivityEntityEnum": { "type": "string", "enum": [ "USER", "USER_PREFERENCES", "CATEGORY", "SUBCATEGORY", "TRANSACTION", "TRANSFER", "SUBSCRIPTION", "FINANCIAL_ACCOUNT", "ASSET", "ASSET_TRANSACTION", "LIABILITY", "IMPORT", "SNAPSHOT", "DASHBOARD_LAYOUT", "MARKET_DATA_CREDENTIAL", "OTHER" ] }, "UserActivityActionEnum": { "type": "string", "enum": [ "CREATED", "UPDATED", "DELETED", "GENERATED", "SIGNED_UP", "SIGNED_IN", "SIGNED_OUT", "PASSWORD_CHANGED", "EMAIL_VERIFIED", "ONBOARDING_COMPLETED", "SYNCED", "OTHER" ] }, "CountriesEnum": { "type": "string", "enum": [ "AFGHANISTAN", "ALBANIA", "ALGERIA", "ANDORRA", "ANGOLA", "ANTIGUA_AND_BARBUDA", "ARGENTINA", "ARMENIA", "AUSTRALIA", "AUSTRIA", "AZERBAIJAN", "BAHAMAS", "BAHRAIN", "BANGLADESH", "BARBADOS", "BELARUS", "BELGIUM", "BELIZE", "BENIN", "BHUTAN", "BOLIVIA", "BOSNIA_AND_HERZEGOVINA", "BOTSWANA", "BRAZIL", "BRUNEI", "BULGARIA", "BURKINA_FASO", "BURUNDI", "CABO_VERDE", "CAMBODIA", "CAMEROON", "CANADA", "CENTRAL_AFRICAN_REPUBLIC", "CHAD", "CHILE", "CHINA", "COLOMBIA", "COMOROS", "CONGO_DEMOCRATIC_REPUBLIC", "CONGO_REPUBLIC", "COSTA_RICA", "CROATIA", "CUBA", "CYPRUS", "CZECH_REPUBLIC", "DENMARK", "DJIBOUTI", "DOMINICA", "DOMINICAN_REPUBLIC", "ECUADOR", "EGYPT", "EL_SALVADOR", "EQUATORIAL_GUINEA", "ERITREA", "ESTONIA", "ESWATINI", "ETHIOPIA", "FIJI", "FINLAND", "FRANCE", "GABON", "GAMBIA", "GEORGIA", "GERMANY", "GHANA", "GREECE", "GRENADA", "GUATEMALA", "GUINEA", "GUINEA_BISSAU", "GUYANA", "HAITI", "HONDURAS", "HUNGARY", "ICELAND", "INDIA", "INDONESIA", "IRAN", "IRAQ", "IRELAND", "ISRAEL", "ITALY", "JAMAICA", "JAPAN", "JORDAN", "KAZAKHSTAN", "KENYA", "KIRIBATI", "KOREA_NORTH", "KOREA_SOUTH", "KUWAIT", "KYRGYZSTAN", "LAOS", "LATVIA", "LEBANON", "LESOTHO", "LIBERIA", "LIBYA", "LIECHTENSTEIN", "LITHUANIA", "LUXEMBOURG", "MADAGASCAR", "MALAWI", "MALAYSIA", "MALDIVES", "MALI", "MALTA", "MARSHALL_ISLANDS", "MAURITANIA", "MAURITIUS", "MEXICO", "MICRONESIA", "MOLDOVA", "MONACO", "MONGOLIA", "MONTENEGRO", "MOROCCO", "MOZAMBIQUE", "MYANMAR", "NAMIBIA", "NAURU", "NEPAL", "NETHERLANDS", "NEW_ZEALAND", "NICARAGUA", "NIGER", "NIGERIA", "NORTH_MACEDONIA", "NORWAY", "OMAN", "PAKISTAN", "PALAU", "PALESTINE", "PANAMA", "PAPUA_NEW_GUINEA", "PARAGUAY", "PERU", "PHILIPPINES", "POLAND", "PORTUGAL", "QATAR", "ROMANIA", "RUSSIA", "RWANDA", "SAINT_KITTS_AND_NEVIS", "SAINT_LUCIA", "SAINT_VINCENT_AND_GRENADINES", "SAMOA", "SAN_MARINO", "SAO_TOME_AND_PRINCIPE", "SAUDI_ARABIA", "SENEGAL", "SERBIA", "SEYCHELLES", "SIERRA_LEONE", "SINGAPORE", "SLOVAKIA", "SLOVENIA", "SOLOMON_ISLANDS", "SOMALIA", "SOUTH_AFRICA", "SOUTH_SUDAN", "SPAIN", "SRI_LANKA", "SUDAN", "SURINAME", "SWEDEN", "SWITZERLAND", "SYRIA", "TAIWAN", "TAJIKISTAN", "TANZANIA", "THAILAND", "TIMOR_LESTE", "TOGO", "TONGA", "TRINIDAD_AND_TOBAGO", "TUNISIA", "TURKEY", "TURKMENISTAN", "TUVALU", "UGANDA", "UKRAINE", "UNITED_ARAB_EMIRATES", "UNITED_KINGDOM", "UNITED_STATES", "URUGUAY", "UZBEKISTAN", "VANUATU", "VATICAN_CITY", "VENEZUELA", "VIETNAM", "YEMEN", "ZAMBIA", "ZIMBABWE" ] }, "ErrorResponse": { "type": "object", "properties": { "success": { "type": "boolean", "enum": [ false ], "description": "Always false for error responses" }, "message": { "type": "string", "description": "Error message describing what went wrong" }, "error": { "nullable": true, "description": "Optional additional error details or context" } }, "required": [ "success", "message" ] }, "FinancialAccount": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "balance": { "type": "number" }, "type": { "$ref": "#/components/schemas/FinancialAccountTypeEnum" }, "logoIcon": { "type": "string", "minLength": 1 }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "userId", "title", "balance", "type", "logoIcon", "createdAt", "updatedAt" ] }, "FinancialAccountData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "balance": { "type": "number" }, "type": { "$ref": "#/components/schemas/FinancialAccountTypeEnum" }, "logoIcon": { "type": "string", "minLength": 1 }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "title", "balance", "type", "logoIcon", "createdAt", "updatedAt" ] }, "GetFinancialAccountListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/FinancialAccountData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetFinancialAccountResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/FinancialAccountData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "CreateFinancialAccountRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "balance": { "type": "number" }, "type": { "$ref": "#/components/schemas/FinancialAccountTypeEnum" } }, "required": [ "title", "balance", "type" ] }, "CreateFinancialAccountMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreateFinancialAccountRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "CreateFinancialAccountResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/FinancialAccountData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateFinancialAccountRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/FinancialAccountTypeEnum" } } }, "UpdateFinancialAccountMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/UpdateFinancialAccountRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "UpdateFinancialAccountResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "DeleteFinancialAccountResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "FinancialAccountParamsId": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "required": [ "id" ] }, "FinancialAccountFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/FinancialAccountParamsId" }, "title": { "$ref": "#/components/schemas/StringFilter" }, "type": { "$ref": "#/components/schemas/FinancialAccountTypeEnum" } } }, "QueryFinancialAccountFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/FinancialAccountFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "FinancialAccountForm": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "balance": { "type": "number" }, "type": { "$ref": "#/components/schemas/FinancialAccountTypeEnum" } }, "required": [ "title", "balance", "type" ] }, "CreateUpdateFinancialAccountRequest": { "anyOf": [ { "$ref": "#/components/schemas/CreateFinancialAccountRequest" }, { "$ref": "#/components/schemas/UpdateFinancialAccountRequest" } ] }, "FinancialAccountBalance": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "financialAccountId": { "type": "string", "format": "uuid" }, "date": { "type": "string", "format": "date-time" }, "balance": { "type": "number" }, "note": { "type": "string", "nullable": true }, "isManual": { "type": "boolean" } }, "required": [ "id", "financialAccountId", "date", "balance", "note", "isManual" ] }, "FinancialAccountBalanceData": { "type": "object", "properties": { "financialAccountId": { "type": "string", "format": "uuid" }, "date": { "type": "string", "format": "date-time" }, "balance": { "type": "number" }, "isManual": { "type": "boolean" }, "note": { "type": "string", "nullable": true } }, "required": [ "financialAccountId", "date", "balance", "isManual", "note" ] }, "FinancialAccountBalanceForm": { "type": "object", "properties": { "financialAccountId": { "type": "string", "format": "uuid" }, "balance": { "type": "number" }, "date": { "type": "string", "minLength": 1, "format": "date" }, "note": { "type": "string", "nullable": true } }, "required": [ "financialAccountId", "balance", "date" ] }, "CreateFinancialAccountBalanceRequest": { "type": "object", "properties": { "financialAccountId": { "type": "string", "format": "uuid" }, "balance": { "type": "number" }, "date": { "type": "string", "format": "date-time" }, "note": { "type": "string", "nullable": true } }, "required": [ "financialAccountId", "balance", "date" ] }, "CreateFinancialAccountBalanceResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/FinancialAccountData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "FinancialAccountBalanceRangeQuery": { "type": "object", "properties": { "from": { "type": "string", "format": "date" }, "to": { "type": "string", "format": "date" } } }, "GetFinancialAccountBalanceSeriesResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/FinancialAccountBalanceData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "AccountSummaryRangeQuery": { "type": "object", "properties": { "from": { "type": "string", "format": "date" }, "to": { "type": "string", "format": "date" } } }, "AccountSummaryData": { "type": "object", "properties": { "totalIncome": { "type": "number" }, "totalExpenses": { "type": "number" }, "transactionCount": { "type": "number" }, "from": { "type": "string", "nullable": true }, "to": { "type": "string", "nullable": true } }, "required": [ "totalIncome", "totalExpenses", "transactionCount", "from", "to" ] }, "GetAccountSummaryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/AccountSummaryData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "ImportFile": { "type": "object", "properties": { "id": { "type": "string" }, "importId": { "type": "string", "format": "uuid" }, "filename": { "type": "string" }, "filetype": { "$ref": "#/components/schemas/FileTypeEnum" }, "path": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "importId", "filename", "filetype", "path", "createdAt", "updatedAt" ] }, "Import": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "title": { "type": "string" }, "financialAccountId": { "type": "string", "minLength": 1 }, "status": { "$ref": "#/components/schemas/TransactionStatusEnum" }, "transactions": { "type": "array", "items": { "$ref": "#/components/schemas/Transaction" } }, "files": { "type": "array", "items": { "$ref": "#/components/schemas/ImportFile" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "userId", "title", "financialAccountId", "status", "createdAt", "updatedAt" ] }, "Transaction": { "type": "object", "properties": { "id": { "type": "string" }, "userId": { "type": "string" }, "date": { "type": "string", "minLength": 1, "format": "date-time" }, "title": { "type": "string", "minLength": 1 }, "note": { "type": "string", "nullable": true }, "icon": { "type": "string", "nullable": true }, "categoryId": { "type": "string", "nullable": true }, "subcategoryId": { "type": "string", "nullable": true }, "importId": { "type": "string", "nullable": true }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "status": { "$ref": "#/components/schemas/TransactionStatusEnum" }, "ignore": { "type": "boolean" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" }, "media": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionMedia" } }, "amounts": { "type": "array", "items": { "$ref": "#/components/schemas/Amount" } }, "transferId": { "type": "string", "nullable": true }, "transferHash": { "type": "string", "nullable": true } }, "required": [ "id", "userId", "date", "title", "note", "icon", "categoryId", "subcategoryId", "importId", "action", "status", "ignore", "createdAt", "updatedAt", "media", "amounts", "transferId", "transferHash" ] }, "TransactionMedia": { "type": "object", "properties": { "id": { "type": "string" }, "transactionId": { "type": "string" }, "filename": { "type": "string" }, "filetype": { "type": "string" }, "path": { "type": "string", "format": "uri" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "transactionId", "filename", "filetype", "path", "createdAt", "updatedAt" ] }, "Amount": { "type": "object", "properties": { "id": { "type": "string" }, "transactionId": { "type": "string" }, "amount": { "type": "number" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "financialAccountId": { "type": "string" }, "importReferenceId": { "type": "string", "nullable": true }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "transactionId", "amount", "currency", "action", "financialAccountId", "importReferenceId", "createdAt", "updatedAt" ] }, "ImportData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "title": { "type": "string" }, "financialAccountId": { "type": "string", "minLength": 1 }, "status": { "$ref": "#/components/schemas/TransactionStatusEnum" }, "transactions": { "type": "array", "items": { "$ref": "#/components/schemas/Transaction" } }, "files": { "type": "array", "items": { "$ref": "#/components/schemas/ImportFile" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "title", "financialAccountId", "status", "createdAt", "updatedAt" ] }, "ImportTransactionDataResponse": { "type": "object", "properties": { "id": { "type": "string" }, "date": { "type": "string", "minLength": 1, "format": "date-time" }, "title": { "type": "string", "minLength": 1 }, "note": { "type": "string", "nullable": true }, "icon": { "type": "string", "nullable": true }, "categoryId": { "type": "string", "nullable": true }, "subcategoryId": { "type": "string", "nullable": true }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "status": { "$ref": "#/components/schemas/TransactionStatusEnum" }, "ignore": { "type": "boolean" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "media": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionMedia" } }, "amounts": { "type": "array", "items": { "$ref": "#/components/schemas/Amount" } }, "transferId": { "type": "string", "nullable": true }, "transferHash": { "type": "string", "nullable": true } }, "required": [ "id", "date", "title", "note", "icon", "categoryId", "subcategoryId", "action", "status", "ignore", "createdAt", "updatedAt", "media", "amounts", "transferId", "transferHash" ] }, "GetImportListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ImportData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetImportResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/ImportData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "GetImportTransactionsResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ImportTransactionDataResponse" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "CreateImportRequest": { "type": "object", "properties": { "financialAccountId": { "type": "string", "minLength": 1 } }, "required": [ "financialAccountId" ] }, "CreateImportMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreateImportRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "CreateImportResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/ImportData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateImportRequest": { "type": "object", "properties": { "title": { "type": "string" } } }, "UpdateImportResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/ImportData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "DeleteImportResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "ImportParamsId": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "required": [ "id" ] }, "ImportFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/ImportParamsId" }, "title": { "$ref": "#/components/schemas/StringFilter" }, "date": { "$ref": "#/components/schemas/DateFilter" }, "includeTransactions": { "type": "boolean", "default": true } } }, "QueryImportFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/ImportFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "CreateUpdateImportRequest": { "anyOf": [ { "$ref": "#/components/schemas/CreateImportRequest" }, { "$ref": "#/components/schemas/UpdateImportRequest" } ] }, "ImportForm": { "type": "object", "properties": { "financialAccountId": { "type": "string", "minLength": 1 } }, "required": [ "financialAccountId" ] }, "ApproveImportTransactionItem": { "type": "object", "properties": { "transactionId": { "type": "string", "minLength": 1 }, "status": { "$ref": "#/components/schemas/ImportTransactionStatusEnum" } }, "required": [ "transactionId", "status" ] }, "ApproveImportTransactionsRequest": { "type": "object", "properties": { "transactions": { "type": "array", "items": { "$ref": "#/components/schemas/ApproveImportTransactionItem" }, "minItems": 1 } }, "required": [ "transactions" ] }, "ApproveImportTransactionsResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/ImportTransactionDataResponse" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "ImportTemplateActionEnum": { "type": "string", "enum": [ "categories" ] }, "ImportTemplateActionParams": { "type": "object", "properties": { "action": { "$ref": "#/components/schemas/ImportTemplateActionEnum" } }, "required": [ "action" ] }, "CreateImportTemplateResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/CategoryData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "InsuranceAssetData": { "type": "object", "properties": { "insurer": { "type": "string" }, "policyType": { "$ref": "#/components/schemas/InsurancePolicyTypeEnum" }, "policyNumber": { "type": "string" }, "startDate": { "type": "string", "nullable": true }, "endDate": { "type": "string", "nullable": true }, "beneficiary": { "type": "string" }, "premiumPaid": { "type": "number" }, "premiumFrequency": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "surrenderValue": { "type": "number" } }, "required": [ "insurer", "policyType", "policyNumber", "startDate", "endDate", "beneficiary", "premiumPaid", "premiumFrequency", "surrenderValue" ] }, "CreateInsuranceAssetRequest": { "type": "object", "properties": { "insurer": { "type": "string", "minLength": 1 }, "policyType": { "$ref": "#/components/schemas/InsurancePolicyTypeEnum" }, "policyNumber": { "type": "string", "minLength": 1 }, "startDate": { "type": "string" }, "endDate": { "type": "string" }, "beneficiary": { "type": "string", "minLength": 1 }, "premiumPaid": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "premiumFrequency": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "surrenderValue": { "type": "number", "minimum": 0 } }, "required": [ "insurer", "policyType", "policyNumber", "startDate", "endDate", "beneficiary", "premiumPaid", "premiumFrequency", "surrenderValue" ] }, "CreateInsuranceAssetResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/InsuranceAssetData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateInsuranceAssetRequest": { "type": "object", "properties": { "insurer": { "type": "string", "minLength": 1 }, "policyType": { "$ref": "#/components/schemas/InsurancePolicyTypeEnum" }, "policyNumber": { "type": "string", "minLength": 1 }, "startDate": { "type": "string" }, "endDate": { "type": "string" }, "beneficiary": { "type": "string", "minLength": 1 }, "premiumPaid": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "premiumFrequency": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "surrenderValue": { "type": "number", "minimum": 0 } } }, "UpdateInsuranceAssetResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/InsuranceAssetData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "InsuranceAssetForm": { "type": "object", "properties": { "insurer": { "type": "string", "minLength": 1 }, "policyType": { "$ref": "#/components/schemas/InsurancePolicyTypeEnum" }, "policyNumber": { "type": "string", "minLength": 1 }, "startDate": { "type": "string" }, "endDate": { "type": "string" }, "beneficiary": { "type": "string", "minLength": 1 }, "premiumPaid": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "premiumFrequency": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "surrenderValue": { "type": "number", "minimum": 0 } }, "required": [ "insurer", "policyType", "policyNumber", "startDate", "endDate", "beneficiary", "premiumPaid", "premiumFrequency", "surrenderValue" ] }, "UpdateMarketDataProviderPathParams": { "type": "object", "properties": { "providerId": { "type": "string", "format": "uuid" } }, "required": [ "providerId" ] }, "UpdateMarketDataProviderCredentialRequest": { "type": "object", "properties": { "apiKey": { "type": "string", "minLength": 1 } }, "required": [ "apiKey" ] }, "UpdateMarketDataProviderCredentialResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" } }, "required": [ "success", "message" ] }, "DeleteMarketDataProviderCredentialResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" } }, "required": [ "success", "message" ] }, "MarketDataProvider": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "label": { "type": "string", "minLength": 1 }, "logoUrl": { "type": "string", "format": "uri" }, "transport": { "$ref": "#/components/schemas/MarketDataTransportEnum" }, "enabled": { "type": "boolean" }, "configured": { "type": "boolean" }, "requiresCredentials": { "type": "boolean" }, "supportsSearch": { "type": "boolean" }, "supportsQuotes": { "type": "boolean" }, "supportsStreaming": { "type": "boolean" }, "supportedAssetTypes": { "type": "array", "items": { "$ref": "#/components/schemas/AssetTypeEnum" } } }, "required": [ "id", "label", "logoUrl", "transport", "enabled", "configured", "requiresCredentials", "supportsSearch", "supportsQuotes", "supportsStreaming", "supportedAssetTypes" ] }, "MarketInstrument": { "type": "object", "properties": { "providerId": { "type": "string", "format": "uuid" }, "providerInstrumentId": { "type": "string", "format": "uuid" }, "symbol": { "type": "string", "minLength": 1 }, "displayName": { "type": "string", "minLength": 1 }, "assetType": { "$ref": "#/components/schemas/AssetTypeEnum" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "exchange": { "type": "string", "nullable": true }, "market": { "type": "string", "nullable": true }, "metadata": { "type": "object", "additionalProperties": { "type": "string" }, "default": {} } }, "required": [ "providerId", "providerInstrumentId", "symbol", "displayName", "assetType", "currency", "exchange", "market" ] }, "MarketQuote": { "type": "object", "properties": { "providerId": { "type": "string", "format": "uuid" }, "symbol": { "type": "string", "minLength": 1 }, "assetType": { "$ref": "#/components/schemas/AssetTypeEnum" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "price": { "type": "number" }, "changePercent": { "type": "number", "nullable": true }, "marketState": { "$ref": "#/components/schemas/MarketStateEnum" }, "asOf": { "type": "string", "format": "date-time" }, "valueSource": { "$ref": "#/components/schemas/ValueSourceEnum" }, "displayName": { "type": "string", "nullable": true }, "exchange": { "type": "string", "nullable": true }, "market": { "type": "string", "nullable": true } }, "required": [ "providerId", "symbol", "assetType", "currency", "price", "changePercent", "marketState", "asOf", "valueSource", "displayName", "exchange", "market" ] }, "GetMarketDataProvidersResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketDataProvider" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "SearchMarketInstrumentsResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketInstrument" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetMarketQuotesResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/MarketQuote" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "MarketDataProviderQuery": { "type": "object", "properties": { "providerId": { "type": "string", "format": "uuid" }, "assetType": { "$ref": "#/components/schemas/AssetTypeEnum" } } }, "SearchMarketInstrumentsQuery": { "allOf": [ { "$ref": "#/components/schemas/MarketDataProviderQuery" }, { "type": "object", "properties": { "q": { "type": "string", "minLength": 1 }, "limit": { "type": "integer", "minimum": 0, "exclusiveMinimum": true, "maximum": 50 } }, "required": [ "q" ] } ] }, "GetMarketQuotesQuery": { "allOf": [ { "$ref": "#/components/schemas/MarketDataProviderQuery" }, { "type": "object", "properties": { "symbols": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1 } }, "required": [ "symbols" ] } ] }, "MarketableAssetData": { "type": "object", "properties": { "symbol": { "type": "string" }, "isin": { "type": "string", "nullable": true }, "exchange": { "type": "string", "nullable": true }, "assetClass": { "$ref": "#/components/schemas/MarketableAssetClassEnum" }, "sector": { "type": "string", "nullable": true }, "region": { "type": "string", "nullable": true }, "lastPriceSync": { "type": "string", "nullable": true } }, "required": [ "symbol", "isin", "exchange", "assetClass", "sector", "region", "lastPriceSync" ] }, "MarketableAssetForm": { "type": "object", "properties": { "transactionType": { "$ref": "#/components/schemas/AssetMarketDataTypeEnum" }, "assetClass": { "$ref": "#/components/schemas/MarketableAssetClassEnum" }, "symbol": { "type": "string", "minLength": 1 }, "date": { "type": "string" }, "quantity": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "unitPrice": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "fees": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" } }, "required": [ "transactionType", "symbol", "date", "quantity", "unitPrice", "fees", "currency" ] }, "CreateMarketableAssetRequest": { "type": "object", "properties": { "transactionType": { "$ref": "#/components/schemas/AssetMarketDataTypeEnum" }, "assetClass": { "$ref": "#/components/schemas/MarketableAssetClassEnum" }, "symbol": { "type": "string", "minLength": 1 }, "date": { "type": "string" }, "quantity": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "unitPrice": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "fees": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" } }, "required": [ "transactionType", "symbol", "date", "quantity", "unitPrice", "fees", "currency" ] }, "UpdateMarketableAssetRequest": { "type": "object", "properties": { "transactionType": { "$ref": "#/components/schemas/AssetMarketDataTypeEnum" }, "assetClass": { "$ref": "#/components/schemas/MarketableAssetClassEnum" }, "symbol": { "type": "string", "minLength": 1 }, "date": { "type": "string" }, "quantity": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "unitPrice": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "fees": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" } } }, "OtherAssetData": { "type": "object", "properties": { "description": { "type": "string", "nullable": true }, "purchasePrice": { "type": "number", "nullable": true }, "purchaseDate": { "type": "string", "nullable": true } }, "required": [ "description", "purchasePrice", "purchaseDate" ] }, "CreateOtherAssetRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "description": { "type": "string" } }, "required": [ "title", "value" ] }, "UpdateOtherAssetRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "description": { "type": "string" } } }, "OtherAssetForm": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "description": { "type": "string" } }, "required": [ "title", "value" ] }, "PrivateDealAssetData": { "type": "object", "properties": { "committedAmount": { "type": "number", "nullable": true }, "calledAmount": { "type": "number", "nullable": true }, "latestNav": { "type": "number", "nullable": true }, "navDate": { "type": "string", "nullable": true } }, "required": [ "committedAmount", "calledAmount", "latestNav", "navDate" ] }, "CreatePrivateDealAssetRequest": { "type": "object", "properties": { "committedAmount": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "calledAmount": { "type": "number", "minimum": 0 }, "latestNav": { "type": "number", "minimum": 0 }, "navDate": { "type": "string" } }, "required": [ "committedAmount", "calledAmount", "latestNav", "navDate" ] }, "CreatePrivateDealAssetResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/PrivateDealAssetData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdatePrivateDealAssetRequest": { "type": "object", "properties": { "committedAmount": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "calledAmount": { "type": "number", "minimum": 0 }, "latestNav": { "type": "number", "minimum": 0 }, "navDate": { "type": "string" } } }, "UpdatePrivateDealAssetResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/PrivateDealAssetData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "PrivateDealAssetForm": { "type": "object", "properties": { "committedAmount": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "calledAmount": { "type": "number", "minimum": 0 }, "latestNav": { "type": "number", "minimum": 0 }, "navDate": { "type": "string" } }, "required": [ "committedAmount", "calledAmount", "latestNav", "navDate" ] }, "RealEstateAssetData": { "type": "object", "properties": { "address": { "type": "string" }, "type": { "$ref": "#/components/schemas/RealEstateTypeEnum" }, "purchasePrice": { "type": "number" }, "purchaseDate": { "type": "string", "nullable": true } }, "required": [ "address", "type", "purchasePrice", "purchaseDate" ] }, "CreateRealEstateAssetRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/RealEstateTypeEnum" }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "address": { "type": "string" } }, "required": [ "title", "type", "value" ] }, "UpdateRealEstateAssetRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/RealEstateTypeEnum" }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "address": { "type": "string" } } }, "RealEstateAssetForm": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/RealEstateTypeEnum" }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "address": { "type": "string" } }, "required": [ "title", "type", "value" ] }, "NetWorthEvolution": { "type": "object", "properties": { "date": { "type": "string", "format": "date-time" }, "netWorth": { "type": "number" } }, "required": [ "date", "netWorth" ] }, "NetWorthEvolutionReport": { "type": "object", "properties": { "currentNetWorth": { "type": "number" }, "evolution": { "type": "array", "items": { "$ref": "#/components/schemas/NetWorthEvolution" } } }, "required": [ "currentNetWorth", "evolution" ] }, "GetNetWorthEvolutionReportResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/NetWorthEvolutionReport" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "NetWorthEvolutionFilters": { "type": "object", "properties": { "date": { "$ref": "#/components/schemas/DateFilter" } }, "additionalProperties": { "anyOf": [ { "type": "string" }, { "$ref": "#/components/schemas/DateFilter" } ] } }, "QueryNetWorthEvolutionFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/NetWorthEvolutionFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "SimpleSuccessResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" } }, "required": [ "success", "message" ] }, "SnapshotAccountBalance": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "snapshotId": { "type": "string", "format": "uuid" }, "accountId": { "type": "string", "nullable": true, "format": "uuid" }, "financialAccountBalanceId": { "type": "string", "nullable": true, "format": "uuid" } }, "required": [ "id", "snapshotId", "accountId", "financialAccountBalanceId" ] }, "SnapshotAssetValue": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "snapshotId": { "type": "string", "format": "uuid" }, "assetId": { "type": "string", "format": "uuid" }, "quantity": { "type": "number" }, "unitPrice": { "type": "number" }, "totalValue": { "type": "number" } }, "required": [ "id", "snapshotId", "assetId", "quantity", "unitPrice", "totalValue" ] }, "Snapshot": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "snapshotDate": { "type": "string", "format": "date-time" }, "note": { "type": "string", "nullable": true }, "totalCash": { "type": "number" }, "totalInvestments": { "type": "number" }, "totalNetWorth": { "type": "number" }, "accountBalances": { "type": "array", "items": { "$ref": "#/components/schemas/SnapshotAccountBalance" } }, "assetValues": { "type": "array", "items": { "$ref": "#/components/schemas/SnapshotAssetValue" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "userId", "snapshotDate", "note", "totalCash", "totalInvestments", "totalNetWorth", "accountBalances", "assetValues", "createdAt", "updatedAt" ] }, "SnapshotData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "snapshotDate": { "type": "string", "format": "date-time" }, "note": { "type": "string", "nullable": true }, "totalCash": { "type": "number" }, "totalInvestments": { "type": "number" }, "totalNetWorth": { "type": "number" }, "accountBalances": { "type": "array", "items": { "$ref": "#/components/schemas/SnapshotAccountBalance" } }, "assetValues": { "type": "array", "items": { "$ref": "#/components/schemas/SnapshotAssetValue" } }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "snapshotDate", "note", "totalCash", "totalInvestments", "totalNetWorth", "accountBalances", "assetValues", "createdAt", "updatedAt" ] }, "StatusResponse": { "type": "object", "properties": { "status": { "type": "string" }, "uptime": { "type": "number" }, "version": { "type": "string" }, "timestamp": { "type": "string", "format": "date-time" } }, "required": [ "status", "uptime", "version", "timestamp" ] }, "SubcategoryData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "categoryId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "icon": { "type": "string", "minLength": 1 }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "categoryId", "title", "icon", "createdAt", "updatedAt" ] }, "GetSubcategoryListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/SubcategoryData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetSubcategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/SubcategoryData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "CreateSubcategoryRequest": { "type": "object", "properties": { "categoryId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "icon": { "type": "string", "minLength": 1 } }, "required": [ "categoryId", "title", "icon" ] }, "CreateSubcategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/SubcategoryData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateSubcategoryRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "icon": { "type": "string", "minLength": 1 } } }, "UpdateSubcategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "DeleteSubcategoryResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "SubcategoryParamsId": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "required": [ "id" ] }, "SubcategoryFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/SubcategoryParamsId" }, "title": { "$ref": "#/components/schemas/StringFilter" }, "categoryId": { "type": "string" } } }, "QuerySubcategoryFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/SubcategoryFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "SubcategoryForm": { "type": "object", "properties": { "categoryId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "icon": { "type": "string", "minLength": 1 } }, "required": [ "categoryId", "title", "icon" ] }, "CreateUpdateSubcategoryRequest": { "anyOf": [ { "$ref": "#/components/schemas/CreateSubcategoryRequest" }, { "$ref": "#/components/schemas/UpdateSubcategoryRequest" } ] }, "Subscription": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "amount": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "appearanceMode": { "$ref": "#/components/schemas/AppearanceModeEnum" }, "appearanceLogoIcon": { "type": "string" }, "appearanceIconColor": { "type": "string" }, "firstPayment": { "type": "string", "format": "date-time" }, "cycleNumber": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "rememberPeriod": { "$ref": "#/components/schemas/RememberPeriodEnum" }, "financialAccountId": { "type": "string", "minLength": 1 }, "isEnabled": { "type": "boolean" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "deletedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "userId", "title", "description", "amount", "currency", "appearanceMode", "appearanceLogoIcon", "appearanceIconColor", "firstPayment", "cycleNumber", "cyclePeriod", "rememberPeriod", "financialAccountId", "isEnabled", "createdAt", "updatedAt" ] }, "SubscriptionData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "title": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "amount": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "appearanceMode": { "$ref": "#/components/schemas/AppearanceModeEnum" }, "appearanceLogoIcon": { "type": "string" }, "appearanceIconColor": { "type": "string" }, "firstPayment": { "type": "string", "format": "date-time" }, "cycleNumber": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "rememberPeriod": { "$ref": "#/components/schemas/RememberPeriodEnum" }, "financialAccountId": { "type": "string", "minLength": 1 }, "isEnabled": { "type": "boolean" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" } }, "required": [ "id", "title", "description", "amount", "currency", "appearanceMode", "appearanceLogoIcon", "appearanceIconColor", "firstPayment", "cycleNumber", "cyclePeriod", "rememberPeriod", "financialAccountId", "isEnabled", "createdAt", "updatedAt" ] }, "GetSubscriptionListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/SubscriptionData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "GetSubscriptionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "CreateSubscriptionRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "amount": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "appearanceMode": { "$ref": "#/components/schemas/AppearanceModeEnum" }, "appearanceLogoIcon": { "type": "string" }, "appearanceIconColor": { "type": "string" }, "firstPayment": { "type": "string", "format": "date-time" }, "cycleNumber": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "rememberPeriod": { "$ref": "#/components/schemas/RememberPeriodEnum" }, "financialAccountId": { "type": "string", "minLength": 1 }, "isEnabled": { "type": "boolean" } }, "required": [ "title", "description", "amount", "currency", "appearanceMode", "appearanceLogoIcon", "appearanceIconColor", "firstPayment", "cycleNumber", "cyclePeriod", "rememberPeriod", "financialAccountId", "isEnabled" ] }, "CreateSubscriptionMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreateSubscriptionRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "CreateSubscriptionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/SubscriptionData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateSubscriptionRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "amount": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "appearanceMode": { "$ref": "#/components/schemas/AppearanceModeEnum" }, "appearanceLogoIcon": { "type": "string" }, "appearanceIconColor": { "type": "string" }, "firstPayment": { "type": "string", "format": "date-time" }, "cycleNumber": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "rememberPeriod": { "$ref": "#/components/schemas/RememberPeriodEnum" }, "financialAccountId": { "type": "string", "minLength": 1 }, "isEnabled": { "type": "boolean" } } }, "UpdateSubscriptionMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/UpdateSubscriptionRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "UpdateSubscriptionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "DeleteSubscriptionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "SubscriptionParamsId": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "required": [ "id" ] }, "SubscriptionFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/SubscriptionParamsId" }, "title": { "$ref": "#/components/schemas/StringFilter" }, "description": { "$ref": "#/components/schemas/StringFilter" }, "type": { "$ref": "#/components/schemas/FinancialAccountTypeEnum" } } }, "QuerySubscriptionFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/SubscriptionFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "SubscriptionForm": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "description": { "type": "string" }, "amount": { "type": "number", "minimum": 0 }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "appearanceMode": { "$ref": "#/components/schemas/AppearanceModeEnum" }, "appearanceLogoIcon": { "type": "string" }, "appearanceIconColor": { "type": "string" }, "firstPayment": { "type": "string", "format": "date-time" }, "cycleNumber": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "cyclePeriod": { "$ref": "#/components/schemas/CyclePeriodEnum" }, "rememberPeriod": { "$ref": "#/components/schemas/RememberPeriodEnum" }, "financialAccountId": { "type": "string", "minLength": 1 }, "isEnabled": { "type": "boolean" } }, "required": [ "title", "description", "amount", "currency", "appearanceMode", "appearanceLogoIcon", "appearanceIconColor", "firstPayment", "cycleNumber", "cyclePeriod", "rememberPeriod", "financialAccountId", "isEnabled" ] }, "CreateUpdateSubscriptionRequest": { "anyOf": [ { "$ref": "#/components/schemas/CreateSubscriptionRequest" }, { "$ref": "#/components/schemas/UpdateSubscriptionRequest" } ] }, "CreateTransactionMediaRequest": { "type": "object", "properties": { "transactionId": { "type": "string" }, "filename": { "type": "string" }, "filetype": { "type": "string" }, "path": { "type": "string", "format": "uri" } }, "required": [ "transactionId", "filename", "filetype", "path" ] }, "CreateTransactionMediaMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreateTransactionMediaRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "TransactionMediaParamsId": { "type": "object", "properties": { "id": { "type": "string" } }, "required": [ "id" ] }, "TransactionMediaFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/TransactionMediaParamsId" }, "transactionId": { "type": "string" }, "filetype": { "$ref": "#/components/schemas/StringFilter" } }, "additionalProperties": { "anyOf": [ { "type": "string" }, { "$ref": "#/components/schemas/StringFilter" } ] } }, "CreateAmountRequest": { "type": "object", "properties": { "transactionId": { "type": "string" }, "amount": { "type": "number" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "financialAccountId": { "type": "string" }, "importReferenceId": { "type": "string", "nullable": true } }, "required": [ "transactionId", "amount", "currency", "action", "financialAccountId", "importReferenceId" ] }, "AmountParamsId": { "type": "object", "properties": { "id": { "type": "string" } }, "required": [ "id" ] }, "TransactionData": { "type": "object", "properties": { "id": { "type": "string" }, "date": { "type": "string", "minLength": 1, "format": "date-time" }, "title": { "type": "string", "minLength": 1 }, "note": { "type": "string", "nullable": true }, "icon": { "type": "string", "nullable": true }, "categoryId": { "type": "string", "nullable": true }, "subcategoryId": { "type": "string", "nullable": true }, "importId": { "type": "string", "nullable": true }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "status": { "$ref": "#/components/schemas/TransactionStatusEnum" }, "ignore": { "type": "boolean" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "media": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionMedia" } }, "amounts": { "type": "array", "items": { "$ref": "#/components/schemas/Amount" } }, "transferId": { "type": "string", "nullable": true }, "transferHash": { "type": "string", "nullable": true } }, "required": [ "id", "date", "title", "note", "icon", "categoryId", "subcategoryId", "importId", "action", "status", "ignore", "createdAt", "updatedAt", "media", "amounts", "transferId", "transferHash" ] }, "TransactionListData": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionData" } }, "total": { "type": "integer", "minimum": 0, "description": "Total number of transactions matching the filters" } }, "required": [ "data", "total" ] }, "GetTransactionListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/TransactionListData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "GetTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/TransactionData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "TransactionAmount": { "type": "object", "properties": { "amount": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "financialAccountId": { "type": "string", "minLength": 1 } }, "required": [ "amount", "action", "financialAccountId" ] }, "TransactionForm": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "categoryId": { "type": "string", "nullable": true }, "subcategoryId": { "type": "string", "nullable": true }, "note": { "type": "string", "nullable": true }, "ignore": { "type": "boolean" }, "date": { "type": "string", "minLength": 1, "format": "date" }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "amounts": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionAmount" }, "minItems": 1 } }, "required": [ "title", "categoryId", "subcategoryId", "note", "ignore", "date", "action", "currency", "amounts" ] }, "CreateTransactionRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "categoryId": { "type": "string", "nullable": true }, "subcategoryId": { "type": "string", "nullable": true }, "note": { "type": "string", "nullable": true }, "ignore": { "type": "boolean" }, "date": { "type": "string", "minLength": 1, "format": "date" }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "amounts": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionAmount" }, "minItems": 1 } }, "required": [ "title", "categoryId", "subcategoryId", "note", "ignore", "date", "action", "currency", "amounts" ] }, "CreateTransactionMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreateTransactionRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "CreateTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/TransactionData" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateTransactionRequest": { "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "categoryId": { "type": "string", "nullable": true }, "subcategoryId": { "type": "string", "nullable": true }, "note": { "type": "string", "nullable": true }, "ignore": { "type": "boolean" }, "date": { "type": "string", "minLength": 1, "format": "date" }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "currency": { "$ref": "#/components/schemas/CurrencyEnum" }, "amounts": { "type": "array", "items": { "$ref": "#/components/schemas/TransactionAmount" }, "minItems": 1 } } }, "UpdateTransactionMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/UpdateTransactionRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "UpdateTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "CreateUpdateTransactionRequest": { "anyOf": [ { "$ref": "#/components/schemas/CreateTransactionRequest" }, { "$ref": "#/components/schemas/UpdateTransactionRequest" } ] }, "DeleteTransactionResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "nullable": true, "description": "Response data" } }, "required": [ "success", "message" ] }, "TransactionParamsId": { "type": "object", "properties": { "id": { "type": "string" } }, "required": [ "id" ] }, "TransactionFilters": { "type": "object", "properties": { "id": { "$ref": "#/components/schemas/TransactionParamsId" }, "title": { "$ref": "#/components/schemas/StringFilter" }, "note": { "$ref": "#/components/schemas/StringFilter" }, "action": { "$ref": "#/components/schemas/TransactionActionEnum" }, "categoryId": { "type": "string" }, "subcategoryId": { "type": "string" }, "financialAccountId": { "type": "string" }, "date": { "$ref": "#/components/schemas/DateFilter" } } }, "QueryTransactionFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/TransactionFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "UserActivity": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "userId": { "type": "string", "format": "uuid" }, "entityType": { "$ref": "#/components/schemas/UserActivityEntityEnum" }, "action": { "$ref": "#/components/schemas/UserActivityActionEnum" }, "entityId": { "type": "string", "nullable": true }, "metadata": { "type": "object", "nullable": true, "additionalProperties": { "nullable": true } }, "userAgent": { "type": "string", "nullable": true }, "createdAt": { "type": "string" } }, "required": [ "id", "userId", "entityType", "action", "entityId", "metadata", "userAgent", "createdAt" ] }, "UserActivityData": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "entityType": { "$ref": "#/components/schemas/UserActivityEntityEnum" }, "action": { "$ref": "#/components/schemas/UserActivityActionEnum" }, "entityId": { "type": "string", "nullable": true }, "metadata": { "type": "object", "nullable": true, "additionalProperties": { "nullable": true } }, "userAgent": { "type": "string", "nullable": true }, "createdAt": { "type": "string" } }, "required": [ "id", "entityType", "action", "entityId", "metadata", "userAgent", "createdAt" ] }, "GetUserActivityListResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "type": "array", "items": { "$ref": "#/components/schemas/UserActivityData" }, "description": "Response data" } }, "required": [ "success", "message", "data" ] }, "CreateUserActivityRequest": { "type": "object", "properties": { "entityType": { "$ref": "#/components/schemas/UserActivityEntityEnum" }, "action": { "$ref": "#/components/schemas/UserActivityActionEnum" }, "entityId": { "type": "string", "nullable": true }, "metadata": { "type": "object", "nullable": true, "additionalProperties": { "nullable": true } }, "userAgent": { "type": "string", "nullable": true } }, "required": [ "entityType", "action" ] }, "UserActivityFilters": { "type": "object", "properties": { "entityType": { "$ref": "#/components/schemas/UserActivityEntityEnum" }, "action": { "$ref": "#/components/schemas/UserActivityActionEnum" }, "entityId": { "type": "string" }, "createdAt": { "$ref": "#/components/schemas/DateFilter" } } }, "QueryUserActivityFilters": { "type": "object", "properties": { "filter": { "$ref": "#/components/schemas/UserActivityFilters" }, "options": { "$ref": "#/components/schemas/FilterOptions" } } }, "UserPreferences": { "type": "object", "properties": { "snapshotFrequency": { "$ref": "#/components/schemas/SnapshotFrequencyEnum" }, "preferredCurrency": { "$ref": "#/components/schemas/CurrencyEnum" }, "preferredLanguage": { "$ref": "#/components/schemas/LanguageEnum" }, "dateFormat": { "$ref": "#/components/schemas/DateFormatEnum" }, "country": { "$ref": "#/components/schemas/CountriesEnum" }, "timezone": { "$ref": "#/components/schemas/TimezoneEnum" }, "preferredMarketDataProviderId": { "type": "string", "nullable": true, "minLength": 1 } }, "required": [ "snapshotFrequency", "preferredCurrency", "preferredLanguage", "dateFormat", "country", "timezone", "preferredMarketDataProviderId" ] }, "GetUserResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/User" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateUserRequest": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "surname": { "type": "string", "minLength": 1 }, "email": { "type": "string", "format": "email" }, "onBoardingStep": { "$ref": "#/components/schemas/OnBoardingStepEnum" }, "onBoardingAt": { "type": "string", "nullable": true }, "image": { "type": "string", "nullable": true, "format": "uri" } } }, "UpdateUserResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/User" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateUserPreferencesRequest": { "type": "object", "properties": { "snapshotFrequency": { "$ref": "#/components/schemas/SnapshotFrequencyEnum" }, "preferredCurrency": { "$ref": "#/components/schemas/CurrencyEnum" }, "preferredLanguage": { "$ref": "#/components/schemas/LanguageEnum" }, "dateFormat": { "$ref": "#/components/schemas/DateFormatEnum" }, "country": { "$ref": "#/components/schemas/CountriesEnum" }, "timezone": { "$ref": "#/components/schemas/TimezoneEnum" }, "preferredMarketDataProviderId": { "type": "string", "nullable": true, "minLength": 1 } } }, "GetUserPreferencesResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/UserPreferences" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UpdateUserPreferencesResponse": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "description": "Optional success message" }, "data": { "allOf": [ { "$ref": "#/components/schemas/UserPreferences" }, { "description": "Response data" } ] } }, "required": [ "success", "message", "data" ] }, "UserSession": { "type": "object", "properties": { "session": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "userId": { "type": "string", "format": "uuid" }, "expiresAt": { "type": "string" }, "token": { "type": "string" }, "ipAddress": { "type": "string", "nullable": true }, "userAgent": { "type": "string", "nullable": true } }, "required": [ "id", "createdAt", "updatedAt", "userId", "expiresAt", "token", "ipAddress", "userAgent" ] }, "user": { "$ref": "#/components/schemas/User" } }, "required": [ "session", "user" ] }, "UserLogin": { "type": "object", "properties": { "email": { "type": "string", "minLength": 1, "format": "email" }, "password": { "type": "string", "minLength": 6 } }, "required": [ "email", "password" ] }, "UserFormPreferencesForm": { "type": "object", "properties": { "preferredCurrency": { "$ref": "#/components/schemas/CurrencyEnum" }, "preferredLanguage": { "$ref": "#/components/schemas/LanguageEnum" }, "dateFormat": { "$ref": "#/components/schemas/DateFormatEnum" }, "timezone": { "$ref": "#/components/schemas/TimezoneEnum" } }, "required": [ "preferredCurrency", "preferredLanguage", "dateFormat", "timezone" ] }, "UserFormGeneralitiesForm": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "surname": { "type": "string", "minLength": 1 }, "country": { "$ref": "#/components/schemas/CountriesEnum" } }, "required": [ "name", "surname", "country" ] }, "UserProfileForm": { "type": "object", "properties": { "name": { "type": "string", "minLength": 1 }, "surname": { "type": "string", "minLength": 1 }, "email": { "type": "string", "format": "email" }, "country": { "$ref": "#/components/schemas/CountriesEnum" } }, "required": [ "name", "surname", "email", "country" ] }, "UserProfileSecurityForm": { "type": "object", "properties": { "oldPassword": { "type": "string", "minLength": 6 }, "newPassword": { "type": "string", "minLength": 6 }, "confirmPassword": { "type": "string", "minLength": 6 } }, "required": [ "oldPassword", "newPassword", "confirmPassword" ] }, "VehicleAssetData": { "type": "object", "properties": { "brand": { "type": "string" }, "model": { "type": "string" }, "type": { "$ref": "#/components/schemas/VehicleTypeEnum" }, "year": { "type": "integer" }, "purchasePrice": { "type": "number" }, "purchaseDate": { "type": "string", "nullable": true }, "plateNumber": { "type": "string" }, "vin": { "type": "string", "nullable": true }, "mileage": { "type": "integer", "nullable": true }, "condition": { "$ref": "#/components/schemas/AssetConditionEnum" }, "logoIcon": { "type": "string", "nullable": true } }, "required": [ "brand", "model", "type", "year", "purchasePrice", "purchaseDate", "plateNumber", "vin", "mileage", "condition", "logoIcon" ] }, "CreateVehicleAssetRequest": { "type": "object", "properties": { "brand": { "type": "string", "minLength": 1 }, "model": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/VehicleTypeEnum" }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "year": { "type": "integer", "minimum": 0, "exclusiveMinimum": true }, "plateNumber": { "type": "string" }, "logoIcon": { "type": "string" }, "autoDepreciation": { "$ref": "#/components/schemas/AutoDepreciationInput" } }, "required": [ "brand", "model", "type", "value" ] }, "CreateVehicleAssetMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/CreateVehicleAssetRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "UpdateVehicleAssetRequest": { "type": "object", "properties": { "brand": { "type": "string", "minLength": 1 }, "model": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/VehicleTypeEnum" }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "year": { "type": "integer", "minimum": 0, "exclusiveMinimum": true }, "plateNumber": { "type": "string" }, "logoIcon": { "type": "string" }, "autoDepreciation": { "$ref": "#/components/schemas/AutoDepreciationInput" } } }, "UpdateVehicleAssetMultipartRequest": { "type": "object", "properties": { "data": { "$ref": "#/components/schemas/UpdateVehicleAssetRequest" }, "file": { "type": "array", "items": { "type": "string", "format": "binary", "description": "Optional file upload" } } }, "required": [ "file" ] }, "VehicleAssetForm": { "type": "object", "properties": { "brand": { "type": "string", "minLength": 1 }, "model": { "type": "string", "minLength": 1 }, "type": { "$ref": "#/components/schemas/VehicleTypeEnum" }, "value": { "type": "number", "minimum": 0, "exclusiveMinimum": true }, "purchaseDate": { "type": "string" }, "year": { "type": "integer", "minimum": 0, "exclusiveMinimum": true }, "plateNumber": { "type": "string" }, "logoIcon": { "type": "string" }, "autoDepreciation": { "$ref": "#/components/schemas/AutoDepreciationInput" } }, "required": [ "brand", "model", "type", "value" ] } }, "parameters": {}, "securitySchemes": { "apiKeyCookie": { "type": "apiKey", "in": "cookie", "name": "apiKeyCookie", "description": "API Key authentication via cookie" }, "bearerAuth": { "type": "http", "scheme": "bearer", "bearerFormat": "JWT" } } }, "paths": { "/": { "get": { "tags": [ "Status" ], "operationId": "getRootStatus", "summary": "Healthcheck", "security": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StatusResponse" } } } }, "500": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/status": { "get": { "tags": [ "Status" ], "operationId": "getStatus", "summary": "Healthcheck", "security": [], "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StatusResponse" } } } }, "500": { "description": "Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/user/me": { "get": { "tags": [ "User" ], "operationId": "getAuthenticatedUser", "summary": "Get authenticated user", "description": "Get authenticated user information and preferences", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "User found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUserResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Authenticated user not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "User" ], "operationId": "updateAuthenticatedUser", "summary": "Update authenticated user", "description": "Updates the authenticated user's profile. Email changes require verification and may be subject to additional security checks.", "security": [ { "bearerAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserRequest" } } } }, "responses": { "200": { "description": "User updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserResponse" } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Authenticated user not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/user/me/preferences": { "get": { "tags": [ "User" ], "operationId": "getAuthenticatedUserPreferences", "summary": "Get authenticated user preferences", "description": "Get the preferences for the authenticated user. Creates defaults if none exist.", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "User preferences found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUserPreferencesResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Authenticated user not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "User" ], "operationId": "updateAuthenticatedUserPreferences", "summary": "Update authenticated user preferences", "description": "Updates the authenticated user's preferences. Creates defaults if none exist.", "security": [ { "bearerAuth": [] } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserPreferencesRequest" } } } }, "responses": { "200": { "description": "User preferences updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateUserPreferencesResponse" } } } }, "400": { "description": "Invalid request body", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Authenticated user not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/user/me/activities": { "get": { "tags": [ "User" ], "operationId": "getAuthenticatedUserActivities", "summary": "Get authenticated user activities", "description": "Returns the audit-log activities recorded for the authenticated user, ordered by most recent.", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/UserActivityFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "User activities found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetUserActivityListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets": { "get": { "tags": [ "Asset" ], "operationId": "getAssets", "summary": "Get all assets", "description": "Retrieve the investment assets associated with the authenticated user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/AssetFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "Asset list", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Asset" ], "operationId": "deleteAssets", "summary": "Delete all assets", "description": "Soft delete all assets for the authenticated user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Assets deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteAssetResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/{id}": { "get": { "tags": [ "Asset" ], "operationId": "getAssetById", "summary": "Get asset by ID", "description": "Retrieve a single asset and its normalized subtype data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Asset found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Asset" ], "operationId": "deleteAsset", "summary": "Delete asset", "description": "Soft delete an asset", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Asset deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/marketable": { "post": { "tags": [ "Marketable Asset" ], "operationId": "createMarketableAsset", "summary": "Create marketable asset", "description": "Create a marketable asset with its opening transaction", "security": [ { "bearerAuth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateMarketableAssetRequest" } } } }, "responses": { "200": { "description": "Marketable asset created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/{id}/marketable": { "patch": { "tags": [ "Marketable Asset" ], "operationId": "updateMarketableAsset", "summary": "Update marketable asset", "description": "Update marketable asset metadata without creating transactions", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateMarketableAssetRequest" } } } }, "responses": { "200": { "description": "Marketable asset updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Marketable asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/real-estate": { "post": { "tags": [ "Real Estate Asset" ], "operationId": "createRealEstateAsset", "summary": "Create real estate asset", "description": "Create a real estate asset together with its parent asset record", "security": [ { "bearerAuth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateRealEstateAssetRequest" } } } }, "responses": { "200": { "description": "Real estate asset created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/{id}/real-estate": { "patch": { "tags": [ "Real Estate Asset" ], "operationId": "updateRealEstateAsset", "summary": "Update real estate asset", "description": "Update real estate asset details and its parent asset value", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateRealEstateAssetRequest" } } } }, "responses": { "200": { "description": "Real estate asset updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Real estate asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/vehicle": { "post": { "tags": [ "Vehicle Asset" ], "operationId": "createVehicleAsset", "summary": "Create vehicle asset", "description": "Create a vehicle asset together with its parent asset record and an optional brand logo", "security": [ { "bearerAuth": [] } ], "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/CreateVehicleAssetMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Vehicle asset created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/{id}/vehicle": { "patch": { "tags": [ "Vehicle Asset" ], "operationId": "updateVehicleAsset", "summary": "Update vehicle asset", "description": "Update vehicle asset details, its parent asset value and an optional brand logo", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/UpdateVehicleAssetMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Vehicle asset updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Vehicle asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/collectible": { "post": { "tags": [ "Collectible Asset" ], "operationId": "createCollectibleAsset", "summary": "Create collectible asset", "description": "Create a collectible asset together with its parent asset record", "security": [ { "bearerAuth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCollectibleAssetRequest" } } } }, "responses": { "200": { "description": "Collectible asset created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/{id}/collectible": { "patch": { "tags": [ "Collectible Asset" ], "operationId": "updateCollectibleAsset", "summary": "Update collectible asset", "description": "Update collectible asset details and its parent asset value", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateCollectibleAssetRequest" } } } }, "responses": { "200": { "description": "Collectible asset updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Collectible asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/other": { "post": { "tags": [ "Other Asset" ], "operationId": "createOtherAsset", "summary": "Create other asset", "description": "Create an other asset together with its parent asset record", "security": [ { "bearerAuth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateOtherAssetRequest" } } } }, "responses": { "200": { "description": "Other asset created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/{id}/other": { "patch": { "tags": [ "Other Asset" ], "operationId": "updateOtherAsset", "summary": "Update other asset", "description": "Update other asset details and its parent asset value", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateOtherAssetRequest" } } } }, "responses": { "200": { "description": "Other asset updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Other asset not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/transactions": { "get": { "tags": [ "Asset Transaction" ], "operationId": "getAssetTransactions", "summary": "Get asset transactions", "description": "Retrieve the asset transactions associated with the authenticated user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/AssetTransactionFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "Asset transaction list", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetTransactionListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": [ "Asset Transaction" ], "operationId": "createAssetTransaction", "summary": "Create asset transaction", "description": "Create a new transaction for an asset", "security": [ { "bearerAuth": [] } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAssetTransactionRequest" } } } }, "responses": { "200": { "description": "Asset transaction created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateAssetTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Asset Transaction" ], "operationId": "deleteAssetTransactions", "summary": "Delete all asset transactions", "description": "Soft delete all asset transactions for the authenticated user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Asset transactions deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteAssetTransactionResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/assets/transactions/{id}": { "get": { "tags": [ "Asset Transaction" ], "operationId": "getAssetTransactionById", "summary": "Get asset transaction by ID", "description": "Retrieve a single asset transaction", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Asset transaction found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAssetTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Asset transaction not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "Asset Transaction" ], "operationId": "updateAssetTransaction", "summary": "Update asset transaction", "description": "Update an existing transaction for an asset", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAssetTransactionRequest" } } } }, "responses": { "200": { "description": "Asset transaction updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateAssetTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Asset transaction not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Asset Transaction" ], "operationId": "deleteAssetTransaction", "summary": "Delete asset transaction", "description": "Soft delete an asset transaction", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Asset transaction deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteAssetTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Asset transaction not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/categories": { "get": { "tags": [ "Category" ], "operationId": "getCategories", "summary": "Get all categories", "description": "Retrieve a list of all categories associated with the user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/CategoryFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "List of categories", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCategoryListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Category not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": [ "Category" ], "operationId": "createCategory", "summary": "Create category", "description": "Create a new category with the provided data", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Category data to create", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCategoryRequest" } } } }, "responses": { "200": { "description": "Category created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateCategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Category" ], "operationId": "deleteCategories", "summary": "Delete all categories", "description": "Delete all categories associated with the user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Categories deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteCategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/categories/{id}": { "get": { "tags": [ "Category" ], "operationId": "getCategoryById", "summary": "Get category by ID", "description": "Retrieve a specific category by its ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Category found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetCategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Category not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "Category" ], "operationId": "updateCategory", "summary": "Update category", "description": "Update an existing category with the provided data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "description": "Category data to update", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateCategoryRequest" } } } }, "responses": { "200": { "description": "Category updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateCategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Category not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Category" ], "operationId": "deleteCategory", "summary": "Delete category", "description": "Delete an existing category with the provided ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Category deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteCategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Category not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/subcategories": { "get": { "tags": [ "Subcategory" ], "operationId": "getSubcategories", "summary": "Get all subcategories", "description": "Retrieve a list of all subcategories associated with the user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/SubcategoryFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "List of subcategories", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetSubcategoryListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Subcategory not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": [ "Subcategory" ], "operationId": "createSubcategory", "summary": "Create subcategory", "description": "Create a new subcategory with the provided data", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Subcategory data to create", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSubcategoryRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Subcategory created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSubcategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Subcategory" ], "operationId": "deleteSubcategories", "summary": "Delete all subcategories", "description": "Delete all subcategories associated with the user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Subcategories deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteSubcategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/subcategories/{id}": { "get": { "tags": [ "Subcategory" ], "operationId": "getSubcategoryById", "summary": "Get subcategory by ID", "description": "Retrieve a specific subcategory by its ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Subcategory found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetSubcategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Subcategory not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "Subcategory" ], "operationId": "updateSubcategory", "summary": "Update subcategory", "description": "Update an existing subcategory with the provided data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "description": "Subcategory data to update", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSubcategoryRequest" } } } }, "responses": { "200": { "description": "Subcategory updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSubcategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Subcategory not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Subcategory" ], "operationId": "deleteSubcategory", "summary": "Delete subcategory", "description": "Delete an existing subcategory with the provided ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Subcategory deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteSubcategoryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Subcategory not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/transactions": { "get": { "tags": [ "Transaction" ], "operationId": "getTransactions", "summary": "Get all transactions", "description": "Retrieve a list of all transactions associated with the user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/TransactionFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "List of transactions", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetTransactionListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Transaction not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": [ "Transaction" ], "operationId": "createTransaction", "summary": "Create transaction", "description": "Create a new transaction with the provided data", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Transaction data to create", "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/CreateTransactionMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Transaction created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Transaction" ], "operationId": "deleteTransactions", "summary": "Delete all transactions", "description": "Delete all transactions associated with the user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Transactions deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/transactions/{id}": { "get": { "tags": [ "Transaction" ], "operationId": "getTransactionById", "summary": "Get transaction by ID", "description": "Retrieve a specific transaction by its ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Transaction found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Transaction not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "Transaction" ], "operationId": "updateTransaction", "summary": "Update transaction", "description": "Update an existing transaction with the provided data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "description": "Transaction data to update", "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/UpdateTransactionMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Transaction updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Transaction not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Transaction" ], "operationId": "deleteTransaction", "summary": "Delete transaction", "description": "Delete an existing transaction with the provided ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Transaction deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteTransactionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Transaction not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/subscriptions": { "get": { "tags": [ "Subscription" ], "operationId": "getSubscriptions", "summary": "Get all subscriptions", "description": "Retrieve a list of all subscriptions associated with the user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/SubscriptionFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "List of subscriptions", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetSubscriptionListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Subscription not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": [ "Subscription" ], "operationId": "createSubscription", "summary": "Create subscription", "description": "Create a new subscription with the provided data", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Subscription data to create", "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/CreateSubscriptionMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Subscription created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateSubscriptionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Subscription" ], "operationId": "deleteSubscriptions", "summary": "Delete all subscriptions", "description": "Delete all subscriptions associated with the user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Subscriptions deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteSubscriptionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/subscriptions/{id}": { "get": { "tags": [ "Subscription" ], "operationId": "getSubscriptionById", "summary": "Get subscription by ID", "description": "Retrieve a specific subscription by its ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Subscription found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetSubscriptionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Subscription not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "Subscription" ], "operationId": "updateSubscription", "summary": "Update subscription", "description": "Update an existing subscription with the provided data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "description": "Subscription data to update", "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/UpdateSubscriptionMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Subscription updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateSubscriptionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Financial account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Subscription" ], "operationId": "deleteSubscription", "summary": "Delete subscription", "description": "Delete an existing subscription with the provided ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Subscription deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteSubscriptionResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Subscription not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/financial-accounts": { "get": { "tags": [ "Financial Account" ], "operationId": "getFinancialAccounts", "summary": "Get all financial accounts", "description": "Retrieve a list of all financial accounts associated with the user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/FinancialAccountFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "List of financial accounts", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetFinancialAccountListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": [ "Financial Account" ], "operationId": "createFinancialAccount", "summary": "Create financial account", "description": "Create a new financial account with the provided data", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Financial account data to create", "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/CreateFinancialAccountMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Financial account created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateFinancialAccountResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Financial Account" ], "operationId": "deleteFinancialAccounts", "summary": "Delete all financial accounts", "description": "Delete all financial accounts associated with the user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Financial accounts deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteFinancialAccountResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/financial-accounts/{id}": { "get": { "tags": [ "Financial Account" ], "operationId": "getFinancialAccountById", "summary": "Get financial account by ID", "description": "Retrieve a specific financial account by its ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Financial account found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetFinancialAccountResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Financial account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "patch": { "tags": [ "Financial Account" ], "operationId": "updateFinancialAccount", "summary": "Update financial account", "description": "Update an existing financial account with the provided data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "description": "Financial account data to update", "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/UpdateFinancialAccountMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Financial account updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateFinancialAccountResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Financial account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Financial Account" ], "operationId": "deleteFinancialAccount", "summary": "Delete financial account", "description": "Delete an existing financial account with the provided ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Financial account deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteFinancialAccountResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Financial account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/financial-accounts/balance": { "post": { "tags": [ "Financial Account" ], "operationId": "createFinancialAccountBalance", "summary": "Create a manual financial account balance entry", "description": "Records a manual balance anchor for a financial account at a given date and recomputes the subsequent balance time-series", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Manual financial account balance data to create", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateFinancialAccountBalanceRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Financial account balance created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateFinancialAccountBalanceResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Financial account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/financial-accounts/{id}/balance-series": { "get": { "tags": [ "Financial Account" ], "operationId": "getFinancialAccountBalanceSeries", "summary": "Get a financial account balance time-series", "description": "Retrieve the daily balance time-series of a financial account within an optional date range", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" }, { "schema": { "type": "string", "format": "date" }, "required": false, "name": "from", "in": "query" }, { "schema": { "type": "string", "format": "date" }, "required": false, "name": "to", "in": "query" } ], "responses": { "200": { "description": "Financial account balance series", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetFinancialAccountBalanceSeriesResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Financial account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/financial-accounts/{id}/summary": { "get": { "tags": [ "Financial Account" ], "operationId": "getFinancialAccountSummary", "summary": "Get a financial account period summary", "description": "Retrieve the aggregated income, expenses and transaction count of a financial account within an optional date range", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" }, { "schema": { "type": "string", "format": "date" }, "required": false, "name": "from", "in": "query" }, { "schema": { "type": "string", "format": "date" }, "required": false, "name": "to", "in": "query" } ], "responses": { "200": { "description": "Financial account period summary", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetAccountSummaryResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Financial account not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/imports": { "get": { "tags": [ "Import" ], "operationId": "getImports", "summary": "Get all imports", "description": "Retrieve a list of all imports associated with the user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/ImportFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "List of imports", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetImportListResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "post": { "tags": [ "Import" ], "operationId": "createImport", "summary": "Create import", "description": "Create a new import with the provided data", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Import data to create", "required": true, "content": { "multipart/form-data": { "schema": { "$ref": "#/components/schemas/CreateImportMultipartRequest" }, "encoding": { "data": { "contentType": "application/json" } } } } }, "responses": { "200": { "description": "Import created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateImportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Import" ], "operationId": "deleteImports", "summary": "Delete all imports", "description": "Delete all imports associated with the user", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Imports deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteImportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/imports/{id}": { "get": { "tags": [ "Import" ], "operationId": "getImportById", "summary": "Get import by ID", "description": "Retrieve a specific import by its ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Import retrieved", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetImportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": [ "Import" ], "operationId": "updateImport", "summary": "Update import", "description": "Update an existing import with the provided data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "description": "Import data to update", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateImportRequest" } } } }, "responses": { "200": { "description": "Import updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateImportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Import" ], "operationId": "deleteImport", "summary": "Delete import", "description": "Delete an existing import with the provided ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Import deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteImportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/imports/{id}/transactions": { "get": { "tags": [ "Import" ], "operationId": "getImportTransactionsById", "summary": "Get import transactions by ID", "description": "Retrieve transactions for a specific import by its ID", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Import transactions retrieved", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetImportTransactionsResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import transactions not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/imports/{id}/transactions/approve": { "patch": { "tags": [ "Import" ], "operationId": "approveImportTransactions", "summary": "Approve or reject import transactions", "description": "Bulk approve or reject transactions for a specific import", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "requestBody": { "description": "List of transactions with their new statuses", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApproveImportTransactionsRequest" } } } }, "responses": { "200": { "description": "Transactions updated", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ApproveImportTransactionsResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/imports/template/{action}": { "post": { "tags": [ "Import" ], "operationId": "createImportTemplate", "summary": "Create import template", "description": "Create a new import template with the provided data", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/ImportTemplateActionEnum" }, "required": true, "name": "action", "in": "path" } ], "responses": { "200": { "description": "Import created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateImportTemplateResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/imports/complete/{id}": { "patch": { "tags": [ "Import" ], "operationId": "completeImport", "summary": "Complete import", "description": "Mark an existing import as complete", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Import completed", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateImportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/imports/rollback/{id}": { "patch": { "tags": [ "Import" ], "operationId": "rollbackImport", "summary": "Rollback import", "description": "Rollback a completed import: moves the import and its approved transactions back to pending and reverts balance changes", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "id", "in": "path" } ], "responses": { "200": { "description": "Import rolled back", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateImportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/market-data/providers": { "get": { "tags": [ "Market Data" ], "operationId": "getMarketDataProviders", "summary": "Get market data providers", "description": "List the enabled raw market data providers and their capabilities", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Provider list", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetMarketDataProvidersResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/market-data/providers/{providerId}/credential": { "put": { "tags": [ "Market Data" ], "operationId": "saveMarketDataProviderCredential", "summary": "Save market data provider credential", "description": "Encrypt and store the authenticated users provider API key server-side", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "providerId", "in": "path" } ], "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateMarketDataProviderCredentialRequest" } } } }, "responses": { "200": { "description": "Credential saved", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateMarketDataProviderCredentialResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "delete": { "tags": [ "Market Data" ], "operationId": "deleteMarketDataProviderCredential", "summary": "Delete market data provider credential", "description": "Delete the authenticated users encrypted provider API key", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": true, "name": "providerId", "in": "path" } ], "responses": { "200": { "description": "Credential deleted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/DeleteMarketDataProviderCredentialResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/market-data/instruments": { "get": { "tags": [ "Market Data" ], "operationId": "searchMarketInstruments", "summary": "Search instruments", "description": "Search provider instruments and return a normalized instrument list", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": false, "name": "providerId", "in": "query" }, { "schema": { "$ref": "#/components/schemas/AssetTypeEnum" }, "required": false, "name": "assetType", "in": "query" }, { "schema": { "type": "string", "minLength": 1 }, "required": true, "name": "q", "in": "query" }, { "schema": { "type": "integer", "minimum": 0, "exclusiveMinimum": true, "maximum": 50 }, "required": false, "name": "limit", "in": "query" } ], "responses": { "200": { "description": "Instrument list", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SearchMarketInstrumentsResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/market-data/quotes": { "get": { "tags": [ "Market Data" ], "operationId": "getMarketQuotes", "summary": "Get quotes", "description": "Fetch normalized live quotes using the selected provider", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "type": "string", "format": "uuid" }, "required": false, "name": "providerId", "in": "query" }, { "schema": { "$ref": "#/components/schemas/AssetTypeEnum" }, "required": false, "name": "assetType", "in": "query" }, { "schema": { "type": "array", "items": { "type": "string", "minLength": 1 }, "minItems": 1 }, "required": true, "name": "symbols", "in": "query" } ], "responses": { "200": { "description": "Quote list", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetMarketQuotesResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/dashboard": { "get": { "tags": [ "Dashboard" ], "operationId": "getDashboardLayout", "summary": "Get dashboard layout", "description": "Retrieve a specific dashboard layout", "security": [ { "bearerAuth": [] } ], "responses": { "200": { "description": "Dashboard layout found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetDashboardLayoutResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Dashboard layout not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } }, "put": { "tags": [ "Dashboard" ], "operationId": "updateDashboardLayout", "summary": "Update dashboard layout", "description": "Update a specific dashboard layout", "security": [ { "bearerAuth": [] } ], "requestBody": { "description": "Dashboard layout data to update", "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateDashboardLayoutRequest" } } } }, "responses": { "200": { "description": "Dashboard layout updated successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateDashboardLayoutResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Dashboard layout not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/reports/trend": { "get": { "tags": [ "Report" ], "operationId": "getTrendReport", "summary": "Get trend report", "description": "Retrieve a trend report based on the users imports", "security": [ { "bearerAuth": [] } ], "parameters": [ { "schema": { "$ref": "#/components/schemas/NetWorthEvolutionFilters" }, "required": false, "name": "filter", "in": "query" }, { "schema": { "$ref": "#/components/schemas/FilterOptions" }, "required": false, "name": "options", "in": "query" } ], "responses": { "200": { "description": "Trend report retrieved", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GetNetWorthEvolutionReportResponse" } } } }, "400": { "description": "Invalid request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "401": { "description": "Unauthorized", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "404": { "description": "Import not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, "500": { "description": "Internal server error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } } } }, "/auth/sign-in/social": { "post": { "tags": [ "Default" ], "description": "Sign in with a social provider", "operationId": "socialSignIn", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "callbackURL": { "type": "string", "description": "Callback URL to redirect to after the user has signed in" }, "newUserCallbackURL": { "type": "string" }, "errorCallbackURL": { "type": "string", "description": "Callback URL to redirect to if an error happens" }, "provider": { "anyOf": [ { "type": "string", "enum": [ "apple", "atlassian", "cognito", "discord", "facebook", "figma", "github", "microsoft", "google", "huggingface", "slack", "spotify", "twitch", "twitter", "dropbox", "kick", "linear", "linkedin", "gitlab", "tiktok", "reddit", "roblox", "salesforce", "vk", "zoom", "notion", "kakao", "naver", "line", "paybin", "paypal", "polar", "railway", "vercel", "wechat" ] }, { "type": "string" } ] }, "disableRedirect": { "type": "boolean", "description": "Disable automatic redirection to the provider. Useful for handling the redirection yourself" }, "idToken": { "type": "object", "properties": { "token": { "type": "string", "description": "ID token from the provider" }, "nonce": { "type": "string", "description": "Nonce used to generate the token" }, "accessToken": { "type": "string", "description": "Access token from the provider" }, "refreshToken": { "type": "string", "description": "Refresh token from the provider" }, "expiresAt": { "type": "number", "description": "Expiry date of the token" }, "user": { "type": "object", "properties": { "name": { "type": "object", "properties": { "firstName": { "type": "string" }, "lastName": { "type": "string" } } }, "email": { "type": "string" } }, "description": "The user object from the provider. Only available for some providers like Apple." } }, "required": [ "token" ] }, "scopes": { "type": "array", "items": { "type": "string" }, "description": "Array of scopes to request from the provider. This will override the default scopes passed." }, "requestSignUp": { "type": "boolean", "description": "Explicitly request sign-up. Useful when disableImplicitSignUp is true for this provider" }, "loginHint": { "type": "string", "description": "The login hint to use for the authorization code request" }, "additionalData": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "provider" ] } } } }, "responses": { "200": { "description": "Success - Returns session details (idToken branch) or an authorize URL (redirect branch)", "content": { "application/json": { "schema": { "type": "object", "description": "Returns session details when idToken is provided, or an authorize URL otherwise", "properties": { "token": { "type": "string" }, "user": { "type": "object", "$ref": "#/components/schemas/User" }, "url": { "type": "string" }, "redirect": { "type": "boolean" } }, "required": [ "redirect" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/callback/{id}": { "get": { "tags": [ "Default" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "responses": { "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } }, "post": { "tags": [ "Default" ], "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string" } } ], "requestBody": { "required": false, "content": { "application/json": { "schema": { "type": "object", "properties": { "code": { "type": "string" }, "error": { "type": "string" }, "device_id": { "type": "string" }, "error_description": { "type": "string" }, "state": { "type": "string" }, "user": { "type": "string" } } } } } }, "responses": { "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/get-session": { "get": { "tags": [ "Default" ], "description": "Get the current session", "operationId": "getSession", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": [ "object", "null" ], "properties": { "session": { "$ref": "#/components/schemas/Session" }, "user": { "$ref": "#/components/schemas/User" } }, "required": [ "session", "user" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } }, "post": { "tags": [ "Default" ], "description": "Get the current session", "operationId": "getSessionPost", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": {} } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": [ "object", "null" ], "properties": { "session": { "$ref": "#/components/schemas/Session" }, "user": { "$ref": "#/components/schemas/User" } }, "required": [ "session", "user" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/sign-out": { "post": { "tags": [ "Default" ], "description": "Sign out the current user", "operationId": "signOut", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": {} } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/sign-up/email": { "post": { "tags": [ "Default" ], "description": "Sign up a user using email and password", "operationId": "signUpWithEmailAndPassword", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the user" }, "email": { "type": "string", "description": "The email of the user" }, "password": { "type": "string", "description": "The password of the user" }, "image": { "type": "string", "description": "The profile image URL of the user" }, "callbackURL": { "type": "string", "description": "The URL to use for email verification callback" }, "rememberMe": { "type": "boolean", "description": "If this is false, the session will not be remembered. Default is `true`." }, "surname": { "type": "string", "default": "" } }, "required": [ "name", "email", "password" ] } } } }, "responses": { "200": { "description": "Successfully created user", "content": { "application/json": { "schema": { "type": "object", "properties": { "token": { "type": "string", "nullable": true, "description": "Authentication token for the session" }, "user": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the user" }, "email": { "type": "string", "format": "email", "description": "The email address of the user" }, "name": { "type": "string", "description": "The name of the user" }, "image": { "type": "string", "format": "uri", "nullable": true, "description": "The profile image URL of the user" }, "emailVerified": { "type": "boolean", "description": "Whether the email has been verified" }, "createdAt": { "type": "string", "format": "date-time", "description": "When the user was created" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the user was last updated" } }, "required": [ "id", "email", "name", "emailVerified", "createdAt", "updatedAt" ] } }, "required": [ "user" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "422": { "description": "Unprocessable Entity. User already exists or failed to create user.", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } } }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/sign-in/email": { "post": { "tags": [ "Default" ], "description": "Sign in with email and password", "operationId": "signInEmail", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "email": { "type": "string", "description": "Email of the user" }, "password": { "type": "string", "description": "Password of the user" }, "callbackURL": { "type": "string", "description": "Callback URL to use as a redirect for email verification" }, "rememberMe": { "type": "boolean", "description": "If this is false, the session will not be remembered. Default is `true`." } }, "required": [ "email", "password" ] } } } }, "responses": { "200": { "description": "Success - Returns either session details or redirect URL", "content": { "application/json": { "schema": { "type": "object", "description": "Session response when idToken is provided", "properties": { "redirect": { "type": "boolean", "enum": [ false ] }, "token": { "type": "string", "description": "Session token" }, "url": { "type": "string", "nullable": true }, "user": { "type": "object", "$ref": "#/components/schemas/User" } }, "required": [ "redirect", "token", "user" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/reset-password": { "post": { "tags": [ "Default" ], "description": "Reset the password for a user", "operationId": "resetPassword", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "newPassword": { "type": "string", "description": "The new password to set" }, "token": { "type": "string", "description": "The token to reset the password" } }, "required": [ "newPassword" ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/verify-password": { "post": { "tags": [ "Default" ], "description": "Verify the current user's password", "operationId": "verifyPassword", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "password": { "type": "string", "description": "The password to verify" } }, "required": [ "password" ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/verify-email": { "get": { "tags": [ "Default" ], "description": "Verify the email of the user", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "token", "in": "query", "description": "The token to verify the email", "required": true, "schema": { "type": "string" } }, { "name": "callbackURL", "in": "query", "description": "The URL to redirect to after email verification", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "user": { "type": "object", "$ref": "#/components/schemas/User" }, "status": { "type": "boolean", "description": "Indicates if the email was verified successfully" } }, "required": [ "user", "status" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/send-verification-email": { "post": { "tags": [ "Default" ], "description": "Send a verification email to the user", "operationId": "sendVerificationEmail", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "email": { "type": "string", "description": "The email to send the verification email to", "example": "user@example.com" }, "callbackURL": { "type": "string", "description": "The URL to use for email verification callback", "example": "https://example.com/callback", "nullable": true } }, "required": [ "email" ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean", "description": "Indicates if the email was sent successfully", "example": true } } } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "description": "Error message", "example": "Verification email isn't enabled" } } } } } }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/change-email": { "post": { "tags": [ "Default" ], "operationId": "changeEmail", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "newEmail": { "type": "string", "description": "The new email address to set must be a valid email address" }, "callbackURL": { "type": "string", "description": "The URL to redirect to after email verification" } }, "required": [ "newEmail" ] } } } }, "responses": { "200": { "description": "Email change request processed successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "user": { "type": "object", "$ref": "#/components/schemas/User" }, "status": { "type": "boolean", "description": "Indicates if the request was successful" }, "message": { "type": "string", "enum": [ "Email updated", "Verification email sent" ], "description": "Status message of the email change process", "nullable": true } }, "required": [ "status" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/change-password": { "post": { "tags": [ "Default" ], "description": "Change the password of the user", "operationId": "changePassword", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "newPassword": { "type": "string", "description": "The new password to set" }, "currentPassword": { "type": "string", "description": "The current password is required" }, "revokeOtherSessions": { "type": "boolean", "description": "Must be a boolean value" } }, "required": [ "newPassword", "currentPassword" ] } } } }, "responses": { "200": { "description": "Password successfully changed", "content": { "application/json": { "schema": { "type": "object", "properties": { "token": { "type": "string", "nullable": true, "description": "New session token if other sessions were revoked" }, "user": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the user" }, "email": { "type": "string", "format": "email", "description": "The email address of the user" }, "name": { "type": "string", "description": "The name of the user" }, "image": { "type": "string", "format": "uri", "nullable": true, "description": "The profile image URL of the user" }, "emailVerified": { "type": "boolean", "description": "Whether the email has been verified" }, "createdAt": { "type": "string", "format": "date-time", "description": "When the user was created" }, "updatedAt": { "type": "string", "format": "date-time", "description": "When the user was last updated" } }, "required": [ "id", "email", "name", "emailVerified", "createdAt", "updatedAt" ] } }, "required": [ "user" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/update-session": { "post": { "tags": [ "Default" ], "description": "Update the current session", "operationId": "updateSession", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "propertyNames": { "type": "string", "description": "Field name must be a string" }, "additionalProperties": {} } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "session": { "type": "object", "$ref": "#/components/schemas/Session" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/update-user": { "post": { "tags": [ "Default" ], "description": "Update the current user", "operationId": "updateUser", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the user" }, "image": { "type": "string", "description": "The image of the user", "nullable": true }, "surname": { "type": "string", "default": "" } } } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "user": { "type": "object", "$ref": "#/components/schemas/User" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/delete-user": { "post": { "tags": [ "Default" ], "description": "Delete the user", "operationId": "deleteUser", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "callbackURL": { "type": "string", "description": "The callback URL to redirect to after the user is deleted" }, "password": { "type": "string", "description": "The user's password. Required if session is not fresh" }, "token": { "type": "string", "description": "The deletion verification token" } } } } } }, "responses": { "200": { "description": "User deletion processed successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the operation was successful" }, "message": { "type": "string", "enum": [ "User deleted", "Verification email sent" ], "description": "Status message of the deletion process" } }, "required": [ "success", "message" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/request-password-reset": { "post": { "tags": [ "Default" ], "description": "Send a password reset email to the user", "operationId": "requestPasswordReset", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "email": { "type": "string", "description": "The email address of the user to send a password reset email to" }, "redirectTo": { "type": "string", "description": "The URL to redirect the user to reset their password. If the token isn't valid or expired, it'll be redirected with a query parameter `?error=INVALID_TOKEN`. If the token is valid, it'll be redirected with a query parameter `?token=VALID_TOKEN" } }, "required": [ "email" ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean" }, "message": { "type": "string" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/reset-password/{token}": { "get": { "tags": [ "Default" ], "description": "Redirects the user to the callback URL with the token", "operationId": "resetPasswordCallback", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "token", "in": "path", "required": true, "description": "The token to reset the password", "schema": { "type": "string" } }, { "name": "callbackURL", "in": "query", "required": true, "description": "The URL to redirect the user to reset their password", "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "token": { "type": "string" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/list-sessions": { "get": { "tags": [ "Default" ], "description": "List all active sessions for the user", "operationId": "listUserSessions", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "$ref": "#/components/schemas/Session" } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/revoke-session": { "post": { "tags": [ "Default" ], "description": "Revoke a single session", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": { "token": { "type": "string", "description": "The token to revoke" } }, "required": [ "token" ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean", "description": "Indicates if the session was revoked successfully" } }, "required": [ "status" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/revoke-sessions": { "post": { "tags": [ "Default" ], "description": "Revoke all sessions for the user", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": {} } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean", "description": "Indicates if all sessions were revoked successfully" } }, "required": [ "status" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/revoke-other-sessions": { "post": { "tags": [ "Default" ], "description": "Revoke all other sessions for the user except the current one", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "content": { "application/json": { "schema": { "type": "object", "properties": {} } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean", "description": "Indicates if all other sessions were revoked successfully" } }, "required": [ "status" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/link-social": { "post": { "tags": [ "Default" ], "description": "Link a social account to the user", "operationId": "linkSocialAccount", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "callbackURL": { "type": "string", "description": "The URL to redirect to after the user has signed in" }, "provider": { "anyOf": [ { "type": "string", "enum": [ "apple", "atlassian", "cognito", "discord", "facebook", "figma", "github", "microsoft", "google", "huggingface", "slack", "spotify", "twitch", "twitter", "dropbox", "kick", "linear", "linkedin", "gitlab", "tiktok", "reddit", "roblox", "salesforce", "vk", "zoom", "notion", "kakao", "naver", "line", "paybin", "paypal", "polar", "railway", "vercel", "wechat" ] }, { "type": "string" } ] }, "idToken": { "type": "object", "properties": { "token": { "type": "string" }, "nonce": { "type": "string" }, "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "scopes": { "type": "array", "items": { "type": "string" } } }, "required": [ "token" ] }, "requestSignUp": { "type": "boolean" }, "scopes": { "type": "array", "items": { "type": "string" }, "description": "Additional scopes to request from the provider" }, "errorCallbackURL": { "type": "string", "description": "The URL to redirect to if there is an error during the link process" }, "disableRedirect": { "type": "boolean", "description": "Disable automatic redirection to the provider. Useful for handling the redirection yourself" }, "additionalData": { "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": {} } }, "required": [ "provider" ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "url": { "type": "string", "description": "The authorization URL to redirect the user to" }, "redirect": { "type": "boolean", "description": "Indicates if the user should be redirected to the authorization URL" }, "status": { "type": "boolean" } }, "required": [ "redirect" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/list-accounts": { "get": { "tags": [ "Default" ], "description": "List all accounts linked to the user", "operationId": "listUserAccounts", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "array", "items": { "type": "object", "properties": { "id": { "type": "string" }, "providerId": { "type": "string" }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "accountId": { "type": "string" }, "userId": { "type": "string" }, "scopes": { "type": "array", "items": { "type": "string" } } }, "required": [ "id", "providerId", "createdAt", "updatedAt", "accountId", "userId", "scopes" ] } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/delete-user/callback": { "get": { "tags": [ "Default" ], "description": "Callback to complete user deletion with verification token", "security": [ { "bearerAuth": [] } ], "parameters": [ { "name": "token", "in": "query", "schema": { "type": "string", "description": "The token to verify the deletion request" } }, { "name": "callbackURL", "in": "query", "schema": { "type": "string", "description": "The URL to redirect to after deletion" } } ], "responses": { "200": { "description": "User successfully deleted", "content": { "application/json": { "schema": { "type": "object", "properties": { "success": { "type": "boolean", "description": "Indicates if the deletion was successful" }, "message": { "type": "string", "enum": [ "User deleted" ], "description": "Confirmation message" } }, "required": [ "success", "message" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/unlink-account": { "post": { "tags": [ "Default" ], "description": "Unlink an account", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "providerId": { "type": "string" }, "accountId": { "type": "string" } }, "required": [ "providerId" ] } } } }, "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "boolean" } } } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/refresh-token": { "post": { "tags": [ "Default" ], "description": "Refresh the access token using a refresh token", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "providerId": { "type": "string", "description": "The provider ID for the OAuth provider" }, "accountId": { "type": "string", "description": "The account ID associated with the refresh token" }, "userId": { "type": "string", "description": "The user ID associated with the account" } }, "required": [ "providerId" ] } } } }, "responses": { "200": { "description": "Access token refreshed successfully", "content": { "application/json": { "schema": { "type": "object", "properties": { "tokenType": { "type": "string" }, "idToken": { "type": "string" }, "accessToken": { "type": "string" }, "refreshToken": { "type": "string" }, "accessTokenExpiresAt": { "type": "string", "format": "date-time" }, "refreshTokenExpiresAt": { "type": "string", "format": "date-time" } } } } } }, "400": { "description": "Invalid refresh token or provider configuration" }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/get-access-token": { "post": { "tags": [ "Default" ], "description": "Get a valid access token, doing a refresh if needed", "security": [ { "bearerAuth": [] } ], "parameters": [], "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "providerId": { "type": "string", "description": "The provider ID for the OAuth provider" }, "accountId": { "type": "string", "description": "The account ID associated with the refresh token" }, "userId": { "type": "string", "description": "The user ID associated with the account" } }, "required": [ "providerId" ] } } } }, "responses": { "200": { "description": "A Valid access token", "content": { "application/json": { "schema": { "type": "object", "properties": { "tokenType": { "type": "string" }, "idToken": { "type": "string" }, "accessToken": { "type": "string" }, "accessTokenExpiresAt": { "type": "string", "format": "date-time" } } } } } }, "400": { "description": "Invalid refresh token or provider configuration" }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/account-info": { "get": { "tags": [ "Default" ], "description": "Get the account info provided by the provider", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "user": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "email": { "type": "string" }, "image": { "type": "string" }, "emailVerified": { "type": "boolean" } }, "required": [ "id", "emailVerified" ] }, "data": { "type": "object", "properties": {}, "additionalProperties": true } }, "required": [ "user", "data" ], "additionalProperties": false } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/ok": { "get": { "tags": [ "Default" ], "description": "Check if the API is working", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "API is working", "content": { "application/json": { "schema": { "type": "object", "properties": { "ok": { "type": "boolean", "description": "Indicates if the API is working" } }, "required": [ "ok" ] } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } }, "/auth/error": { "get": { "tags": [ "Default" ], "description": "Displays an error page", "security": [ { "bearerAuth": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "text/html": { "schema": { "type": "string", "description": "The HTML content of the error page" } } } }, "400": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Bad Request. Usually due to missing parameters, or invalid parameters." }, "401": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } }, "required": [ "message" ] } } }, "description": "Unauthorized. Due to missing or invalid authentication." }, "403": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Forbidden. You do not have permission to access this resource or to perform this action." }, "404": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Not Found. The requested resource was not found." }, "429": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Too Many Requests. You have exceeded the rate limit. Try again later." }, "500": { "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string" } } } } }, "description": "Internal Server Error. This is a problem with the server that you cannot fix." } } } } }, "security": [ { "bearerAuth": [] } ] }