{"swagger":"2.0","info":{"version":"1","title":"wealthAPI SaaS API"},"host":"sandbox.wealthapi.eu","basePath":"/api","tags":[{"name":"performance"},{"name":"accounts"},{"name":"accountHolders"},{"name":"applicationProperties"},{"name":"assetsUnderManagement"},{"name":"authorizations"},{"name":"banks"},{"name":"bankConnections"},{"name":"billingCycles"},{"name":"bookings"},{"name":"cashFlowAnalytics"},{"name":"cashbackIncidents"},{"name":"categories"},{"name":"classifications"},{"name":"comments"},{"name":"cryptoCurrencies"},{"name":"currencies"},{"name":"oauth"},{"name":"userProperties"},{"name":"depotSynchronizationLogs"},{"name":"discounts"},{"name":"dividends"},{"name":"dividendMasterDataRecords"},{"name":"exchangeRates"},{"name":"newsFeeds"},{"name":"finApiClientConfiguration"},{"name":"financialGoals"},{"name":"funds"},{"name":"fundamentals"},{"name":"historicQuotes"},{"name":"users"},{"name":"industries"},{"name":"inflationRates"},{"name":"insurances"},{"name":"insuranceCategories"},{"name":"insuranceProviders"},{"name":"insuranceProviderSpecificContractIdPatterns"},{"name":"internalTransactions"},{"name":"investments"},{"name":"mailing"},{"name":"mandators"},{"name":"mandatorConfigurations"},{"name":"mandatorInvoices"},{"name":"masterData"},{"name":"naturalPersons"},{"name":"netfonds/customers"},{"name":"publicAccounts"},{"name":"riskYieldMetrics"},{"name":"qualityAssurance"},{"name":"quotes"},{"name":"regions"},{"name":"remoteDepots"},{"name":"reservations"},{"name":"retirementCalculator"},{"name":"roles"},{"name":"securityCommissions"},{"name":"sharingPreferences"},{"name":"signup"},{"name":"socialStatistics"},{"name":"splits"},{"name":"stripe"},{"name":"subscriptionAnalytics"},{"name":"subscriptions"},{"name":"subscriptionForms"},{"name":"symbols"},{"name":"tags"},{"name":"taxation"},{"name":"timeDependentProperties"},{"name":"tppCertificates"},{"name":"tppCredentials"},{"name":"tppWebForms"},{"name":"transactions"},{"name":"userProfiles"},{"name":"watchlists"},{"name":"watchlistEntries"}],"schemes":["https"],"paths":{"/v1/performance/absoluteReturn":{"get":{"tags":["performance"],"summary":"Retrieve the absolute returns (with our without dividends) in EUR for the given investments. The absolute return is the return that was achieved with a given position until now, including all trading or quote gains. Optionally, dividends may be included as well.","description":"","operationId":"absoluteReturnByPosition","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"investmentId","in":"query","description":"Retrieve statistics for the given investments","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve statistics for all investments held by the given accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"includeDividends","in":"query","description":"Include dividends into the return calculation; default is true","required":false,"type":"boolean"},{"name":"excludeExpenses","in":"query","description":"Exclude expenses (like tax and commission) from the return calculation, default is false","required":false,"type":"boolean"},{"name":"startDate","in":"query","description":"A date in format yyyy-MM-dd (US Format). Get the absolute return between now and the given date.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"timeStep","in":"query","description":"The time step used for calculation; allowed values are day, week, month, year. Default is day. Note that the precision of the calculation will decrease with a longer time step, but runtime will increase.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AbsoluteReturnList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/performance/absoluteReturn/{id}":{"get":{"tags":["performance"],"summary":"Retrieve the absolute return with or without dividends in EUR for the given investment. The absolute return is the return that was achieved with a given position until now, including all trading or quote gains. Optionally, dividends may be included as well.","description":"","operationId":"absoluteReturn","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the absolute return for this investment.","required":true,"type":"integer"},{"name":"includeDividends","in":"query","description":"Include dividends into the return calculation; default is true","required":false,"type":"boolean"},{"name":"excludeExpenses","in":"query","description":"Exclude expenses (like tax and commission) from the return calculation, default is false","required":false,"type":"boolean"},{"name":"startDate","in":"query","description":"A date in format yyyy-MM-dd (US Format). Get the absolute return between now and the given date.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"number"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/historicValuations":{"get":{"tags":["accounts"],"summary":"Get historic valuations (depot valuation plus optionally the cash position) for the given accounts. Valuations will be returned using the given interval definition; always at the first of the week / month / year.","description":"","operationId":"historicValuations","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the account to retrieve balances for.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"intervalType","in":"query","description":"Use the given interval type, one of day, week, month, year","required":true,"type":"string"},{"name":"startDate","in":"query","description":"Start data at the given date; format is yyyy-MM-dd (US Format); default is 5 years ago.","required":true,"type":"string"},{"name":"includeCash","in":"query","description":"Return portfolio valuations including cash if true; default is false.","required":true,"type":"boolean"},{"name":"includeCurrentValue","in":"query","description":"Include the current (today's) value; no matter if it falls into the interval or not. Default is true.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DateValuePairList"}},"400":{"description":"INVALID_PARAMETER: Invalid request parameters, see error details."},"404":{"description":"NOT_FOUND: None of the given account IDs could be found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/fundCommissions":{"get":{"tags":["accounts"],"summary":"Get the estimated fund commissions for the selected accounts. Fund commissions include portfolio commissions and agios that would have been payed in the last 12 months.","description":"","operationId":"fundCommissions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the accounts to retrieve fund commission estimates for. If not specified, all DEPOTS of the currently logged in user will be used for estimation.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AggregatedFundCommissionStatistics"}},"404":{"description":"NOT_FOUND: None of the given account IDs could be found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/balances":{"get":{"tags":["accounts"],"summary":"Get the accumulated balances for the given account(s). Balances are calculated based on the available transaction history. If necessary, adjusting entries will be created to account for deviations between the banks transaction history and the actually available transaction history.","description":"","operationId":"balances","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the account to retrieve balances for.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Get balances from the given date; format is yyyy-MM-dd (US Format). Default is not to set this value.","required":false,"type":"string"},{"name":"to","in":"query","description":"Get balances up to the given date; format is yyyy-MM-dd (US Format). Default is not to set this value.","required":false,"type":"string"},{"name":"padDates","in":"query","description":"Will pad dates so that there is a balance for every day if true; default is false","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DateValuePairList"}},"404":{"description":"NOT_FOUND: None of the given account IDs could be found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/cashFlows":{"get":{"tags":["accounts"],"summary":"Get the accumulated cash flows for the given account(s). Cash flows are calculated based on the available transaction history. If necessary, adjusting positions will be added implicitly to account for deviations between the banks transaction history and the actually available transaction history.","description":"","operationId":"cashFlows","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the account to retrieve cash flows for.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"interval","in":"query","description":"The interval for cash flows, available are day (default), week, month and year.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DateValuePairList"}},"404":{"description":"NOT_FOUND: None of the given account IDs could be found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/valuation":{"get":{"tags":["accounts"],"summary":"Get the current valuation (depot valuation plus optionally the cash position) for the given accounts.","description":"","operationId":"valuations","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the account to retrieve balances for.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"includeCash","in":"query","description":"Return portfolio valuations including cash if true; default is false.","required":true,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"number"}},"400":{"description":"INVALID_PARAMETER: Invalid request parameters, see error details."},"404":{"description":"NOT_FOUND: None of the given account IDs could be found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts":{"get":{"tags":["accounts"],"summary":"Get or search a list of Accounts","description":"","operationId":"listAndSearchAllAccounts","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve the given accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"bankConnectionId","in":"query","description":"Retrieve all accounts belonging to the given bank connection ID(s)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"bankConnectionType","in":"query","description":"Retrieve all accounts having the given bank connection type(s)","required":false,"type":"array","items":{"type":"string","enum":["WEALTH_API","FIN_API","NETFONDS"]},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Retrieve Accounts with the given type","required":false,"type":"array","items":{"type":"string","enum":["01_depot","02_cash","03_user_defined","04_insurance","05_material_assets"]},"collectionFormat":"multi"},{"name":"bic","in":"query","description":"Retrieve accounts with the given BIC","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"iban","in":"query","description":"Retrieve accounts with the given IBAN","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"subCategoryId","in":"query","description":"Retrieve accounts having the given sub-category ID","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"selectGroupFilter","in":"query","description":"Only return the results which are also part of the given select group.","required":false,"type":"string"},{"name":"bankLinkRequired","in":"query","description":"Only return accounts that are linked to a bank (i.e. their finApiId is not null).","required":false,"type":"boolean"},{"name":"isHidden","in":"query","description":"Only return accounts in status hidden / not hidden; default: no filter","required":false,"type":"boolean"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountList"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"No accounts for the given query parameters were found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error. INVALID_PARAMETER: invalid parameter; see error details."}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public accounts."}},"post":{"tags":["accounts"],"summary":"Create an account. In case this is a depot, the contra account will be created automatically.","description":"","operationId":"createAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateAccountParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/manualSyncRequired":{"get":{"tags":["accounts"],"summary":"Returns a sync status for given accounts","description":"","operationId":"manualSyncRequired","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve the sync status for the given accounts","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SyncStatusList"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"NOT_FOUND: No accounts for the given query parameters were found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error. INVALID_PARAMETER: invalid parameter; see error details."}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public accounts."}}},"/v1/accounts/selectableAccounts":{"get":{"tags":["accounts"],"summary":"Get all selectable accounts","description":"","operationId":"selectableAccounts","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"type","in":"query","description":"Type of the investment; the set of returned accounts depends on the given type.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountList"}},"400":{"description":"INVALID_PARAMETER: The given type parameter is not valid."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/tppWebForm/{tppWebFormToken}":{"get":{"tags":["accounts"],"summary":"Get or search a list of Accounts for the TPP web form flow","description":"","operationId":"listAndSearchAllAccountsTppWebForm","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"tppWebFormToken","in":"path","description":"The token according to the currently active / currently completed web-flow","required":true,"type":"string"},{"name":"type","in":"query","description":"Retrieve Accounts with the given type","required":false,"type":"array","items":{"type":"string","enum":["01_depot","02_cash","03_user_defined","04_insurance","05_material_assets"]},"collectionFormat":"multi"},{"name":"bankLinkRequired","in":"query","description":"Only return accounts that are linked to a bank (i.e. their finApiId is not null).","required":false,"type":"boolean"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error. INVALID_PARAMETER: invalid parameter; see error details."},"404":{"description":"No accounts for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access with a TPP web form token."}}},"/v1/accounts/{id}/assignContraAccount/{contraAccountId}":{"put":{"tags":["accounts"],"summary":"Change the contra account for the given depot.","description":"","operationId":"changeContraAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account (must be of type DEPOT) to change the contra account for","required":true,"type":"integer"},{"name":"contraAccountId","in":"path","description":"ID of the new contra account","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"400":{"description":"INVALID_PARAMETER: Invalid request parameters, see error details."},"404":{"description":"NOT_FOUND: Account with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/{id}/linkToRemoteAccount":{"put":{"tags":["accounts"],"summary":"Link the given (manually maintained) account to the given remote accounts.","description":"","operationId":"linkToRemoteAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account (must be of type DEPOT) to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"Defines which account to link","required":true,"schema":{"$ref":"#/definitions/LinkExistingAccountToBankParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"400":{"description":"INVALID_PARAMETER: Invalid request parameters, see error details."},"404":{"description":"NOT_FOUND: Account with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/{id}/unlinkRemoteAccount":{"put":{"tags":["accounts"],"summary":"Unlink the given account from its remote remote account. The remote account will be deleted after un-linking.","description":"","operationId":"unlinkRemoteAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account (must be of type DEPOT) to update","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"404":{"description":"NOT_FOUND: Account with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/{id}":{"get":{"tags":["accounts"],"summary":"Get an Account","description":"","operationId":"accounts/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Account with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["accounts"],"summary":"Update the account with the given ID.","description":"","operationId":"updateAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateAccountParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"404":{"description":"NOT_FOUND: Account with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["accounts"],"summary":"Delete the given account.","description":"","operationId":"deleteAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account to delete","required":true,"type":"integer"},{"name":"deleteContraAccount","in":"query","description":"Delete the contra account together with the depot if true. This is however only possible if the contra account is solely used for the depot being deleted. Default is false.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/{id}/purge":{"delete":{"tags":["accounts"],"summary":"Delete all investments / transactions / insurances from the given account.","description":"","operationId":"purgeAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account to purge","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/{id}/transfer":{"put":{"tags":["accounts"],"summary":"Transfer all investments from this account to the given one. This typically mirrors the business\n case 'depot transfer' (Depotwechsel) in which the customer moves his assets from one bank to another.\n All investments will be booked-out and booked-in into the given account.","description":"","operationId":"account/transfer","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account from which assets will be transferred to (must be of type DEPOT\n or MATERIAL_ASSETS)","required":true,"type":"integer"},{"in":"body","name":"body","description":"Defines which account to link","required":true,"schema":{"$ref":"#/definitions/DepotTransferParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Assets transferred."},"400":{"description":"INVALID_PARAMETER: Invalid request parameters, see error details."},"404":{"description":"NOT_FOUND: Account with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/{id}/categorize":{"get":{"tags":["accounts"],"summary":"Categorize the given account.","description":"","operationId":"{id}/categorize","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account to categorize.","required":true,"type":"integer"},{"name":"inPercent","in":"query","description":"Convert all values to percent; this allows to provide data anonymized.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AssetCategorization"}},"404":{"description":"Account with the given ID was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/categorize":{"get":{"tags":["accounts"],"summary":"Categorize the given accounts.","description":"","operationId":"/categorize","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"IDs of the accounts to categorize. Will perform categorization on all of the users cash accounts, depots and material asset depots if not given.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"includeHidden","in":"query","description":"Include hidden accounts as well; default is false. Ignored if individual IDs are provided","required":false,"type":"boolean"},{"name":"inPercent","in":"query","description":"Convert all values to percent; default is false. This allows to provide data anonymized.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AssetCategorization"}},"404":{"description":"Account with the given ID was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accountHolders/{id}/mayUpdateName":{"get":{"tags":["accountHolders"],"summary":"Check if it is still possible to update the name of the associated natural person(s).","description":"","operationId":"mayUpdateName","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the AccountHolder to check","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolderMayUpdateName"}},"404":{"description":"NOT_FOUND: Account holder with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accountHolders/payoutStatistics":{"get":{"tags":["accountHolders"],"summary":"Get payout statistics for all account holders","description":"","operationId":"accountHolderPayoutStatistics","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"subscriptionStatus","in":"query","description":"\"\"Only return account holders having at least one subscription in the given status(es);\n default is to not apply a status filter","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"mandatorPublicId","in":"query","description":"Only display data for the given mandator.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolderPayoutStatisticList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}}},"/v1/accountHolders":{"get":{"tags":["accountHolders"],"summary":"Get or search a list of accounts holders","description":"","operationId":"listAndSearchAllAccountHolders","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"A custom search string; retrieves account holders matching
\n - the natural persons name(s)
\n - the external ID
\n - the bank accounts IBAN
\n - the email address of the underlying user
\n - the given depot identifier (Like search)
\n ","required":false,"type":"string"},{"name":"id","in":"query","description":"Retrieve the given account holders","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"userId","in":"query","description":"Retrieve account holders for the given user(s)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"externalId","in":"query","description":"Retrieve account holders having the given external IDs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Retrieve account holders having the given types","required":false,"type":"array","items":{"type":"string","enum":["PRIVATE","COMPANY"]},"collectionFormat":"multi"},{"name":"externalIdAssigned","in":"query","description":"Retrieve account holders having / not having an external ID; default is to ignore the parameter","required":false,"type":"boolean"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. Allowed params: id, externalId, externalIdAssigned. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableAccountHolderList"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"No account holders for the given query parameters were found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a subscription manager to retrieve any account holder.","ROLE_USER":"Requires an authenticated user to access all non-public accounts.","ROLE_ACCOUNTING":"Requires an accountant to retrieve any account holder."}},"post":{"tags":["accountHolders"],"summary":"Create an accountHolder.","description":"","operationId":"createAccountHolder","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateAccountHolderParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolder"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accountHolders/{id}/investmentExperience":{"put":{"tags":["accountHolders"],"summary":"Update the investment experience attributes for the accountHolder with the given ID.","description":"","operationId":"updateInvestmentExperience","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the accountHolder for which we update the investment experience attributes","required":true,"type":"integer"},{"in":"body","name":"body","description":"The investment experience parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInvestmentExperienceParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolder"}},"404":{"description":"NOT_FOUND: AccountHolder with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accountHolders/{id}/referenceAccount":{"put":{"tags":["accountHolders"],"summary":"Update the reference account for the accountHolder with the given ID.","description":"","operationId":"updateReferenceAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the accountHolder for which we update the investment experience attributes","required":true,"type":"integer"},{"in":"body","name":"body","description":"The reference account parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateBankAccountParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolder"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters, see error details."},"404":{"description":"NOT_FOUND: AccountHolder with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accountHolders/{id}/customFeeAgreement":{"put":{"tags":["accountHolders"],"summary":"Update or create the custom fee agreement for the accountHolder with the given ID.","description":"","operationId":"updateCustomFeeAgreement","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the accountHolder for which we create or update the custom fee agreement attributes","required":true,"type":"integer"},{"in":"body","name":"body","description":"The custom fee agreement parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateCustomFeeAgreementParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolder"}},"400":{"description":"INVALID_PARAMETER: See error details"},"404":{"description":"NOT_FOUND: AccountHolder with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"A fully authenticated subscription manager.","ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/accountHolders/{id}":{"get":{"tags":["accountHolders"],"summary":"Get an account holder","description":"","operationId":"accountHolders/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account holder to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolder"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: AccountHolder with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Subscription manager may retrieve any account holder for own mandator.","ROLE_USER":"Requires an authenticated user to retrieve own account holders.","ROLE_SUBSCRIPTION_ADMIN":"Subscription admin may retrieve any account holder.","ROLE_ACCOUNTING":"Accountant may retrieve any account holder."}},"put":{"tags":["accountHolders"],"summary":"Update the accountHolder with the given ID. Users can only update their own account holders. Subscription manager and accountants may update all account holders in their mandators scope. Also, they may change the user this account holder belongs to.","description":"","operationId":"updateAccountHolder","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the accountHolder to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The account holder parameters details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateAccountHolderParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountHolder"}},"404":{"description":"NOT_FOUND: AccountHolder with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details; INVALID_PARAMETER: the given entity contains invalid parameters; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a subscription manager to update any account holder.","ROLE_USER":"Requires an authenticated user to update own account holders.","ROLE_ACCOUNTING":"Requires an accountant to update any account holder."}},"delete":{"tags":["accountHolders"],"summary":"Delete the given account holder.","description":"","operationId":"deleteAccountHolder","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account holder to delete","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a subscription manager to delete any account holder.","ROLE_USER":"Requires an authenticated user.","ROLE_ACCOUNTING":"Requires an accountant to delete any account holder."}}},"/v1/accounts/selectGroups/{id}":{"get":{"tags":["accounts"],"summary":"Get an account select group. Account select groups allow to define standard selections in case users want to always start with a custom set of accounts.","description":"","operationId":"selectGroups/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the select group to delete.","required":true,"type":"string"},{"name":"fallbackAccountType","in":"query","description":"In case the select group was not found: return IDs of all accounts matching the given types.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"excludeManuallyMaintainedFallbackAccounts","in":"query","description":"Exclude manually maintained accounts if we are falling back to a standard selection. This is useful for use-cases relying on banking data - here, manually maintained accounts do not make sense.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountSelectGroup"}},"404":{"description":"Select group with the given ID was not found. This error will only occur if no fallback types are provided. Otherwise an invalid ID will trigger fallback."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["accounts"],"summary":"Delete an account select group","description":"","operationId":"deleteSelectGroup","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the select group to delete.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Select group deleted"},"404":{"description":"Select group with the given ID was not found"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/selectGroups":{"post":{"tags":["accounts"],"summary":"Update or create an account select group. Account select groups allow to define standard selections in case users want to always start with a custom set of accounts. Note that select groups do not have an ID as they are solely identified by their name.","description":"","operationId":"createOrUpdateSelectGroup","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateAccountSelectGroupParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountSelectGroup"}},"400":{"description":"INVALID_PARAMETER: the given accountId parameter is invalid."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/applicationProperties":{"get":{"tags":["applicationProperties"],"summary":"Get or search application properties.","description":"","operationId":"listAndSearchAllApplicationProperties","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve application properties with the given IDs.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"propertyName","in":"query","description":"Retrieve the application properties with the given property names.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"parentPropertyName","in":"query","description":"Retrieve the application properties with the given parent property names.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isParent","in":"query","description":"Retrieve only parent categories if true, only child categories if false. Default is undefined (all categories).","required":false,"type":"string"},{"name":"validFrom","in":"query","description":"A date in format yyyy-MM-dd (US Format). Only retrieve application properties with a valid from date that equals null or is after or equal the given date.","required":false,"type":"string"},{"name":"validTo","in":"query","description":"A date in format yyyy-MM-dd (US Format). Only retrieve application properties with a valid to date that equals null or is before or equal the given date.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ApplicationPropertyList"}},"400":{"description":"NOT_FOUND: No application property with the given parameters was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}},"post":{"tags":["applicationProperties"],"summary":"Create an application property.","description":"","operationId":"createApplicationProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateApplicationPropertyParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ApplicationProperty"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_APPLICATION_PROPERTY_ADMIN":"Requires an authenticated application property administrator."}}},"/v1/applicationProperties/{id}":{"get":{"tags":["applicationProperties"],"summary":"Get an application property.","description":"","operationId":"getApplicationProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the given application property.","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ApplicationProperty"}},"400":{"description":"NOT_FOUND: No application property with the given ID was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}},"put":{"tags":["applicationProperties"],"summary":"Update an application property.","description":"","operationId":"updateApplicationProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Update the given application property.","required":true,"type":"integer"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateApplicationPropertyParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ApplicationProperty"}},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_APPLICATION_PROPERTY_ADMIN":"Requires an authenticated application property administrator."}},"delete":{"tags":["applicationProperties"],"summary":"Delete an application property.","description":"","operationId":"deleteApplicationProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Update the given application property.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Application Property deleted"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity cannot be deleted; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_APPLICATION_PROPERTY_ADMIN":"Requires an authenticated application property administrator."}}},"/v1/assetsUnderManagement":{"get":{"tags":["assetsUnderManagement"],"summary":"Get assets under management by month up to now.","description":"","operationId":"assetsUnderManagement","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"contractType","in":"query","description":"Filter by the given contract type; default is no filter","required":false,"type":"string","enum":["ACCOUNT","DEPOT"]},{"name":"forceFullRefresh","in":"query","description":"Force a full data refresh - which will slow down the operation. Use if data looks odd.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AssetsUnderManagementList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/authorizations":{"get":{"tags":["authorizations"],"summary":"Get the currently logged in users authorizations.","description":"","operationId":"getAuthorization","consumes":["application/json"],"produces":["application/json"],"parameters":[],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/UserAuthorization"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication; will always retrieve data for the currently logged in user."}}},"/v1/banks":{"get":{"tags":["banks"],"summary":"Find a bank by the given search string","description":"","operationId":"banks","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Name / BIC / BLZ of the bank to search (wildcard searches are supported)","required":true,"type":"string"},{"name":"multibankingProvider","in":"query","description":"Filter results by the given multi-banking providers; default: no filter","required":false,"type":"array","items":{"type":"string","enum":["WEALTH_API","FIN_API"]},"collectionFormat":"multi"},{"name":"includeDuplicates","in":"query","description":"Include banks with duplicated BICs (but most likely different BLZ) if true; default is false.","required":false,"type":"string"},{"name":"filterBic","in":"query","description":"Only include banks having the given BICs. May be combined with filterBicGroup and filterName.\n Adding other filters will increase the result set by the matches from other filters.\n Default is no filter.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"filterBicGroup","in":"query","description":"Only include banks having the given BIC groups. May be combined with filterBic and filterName.\n Adding other filters will increase the result set by the matches from other filters.\n Default is no filter.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"filterName","in":"query","description":"Only include banks matching the given name (wildcard). May be combined with filterBic and filterBicGroup.\n Adding other filters will increase the result set by the matches from other filters.\n Default is no filter.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation\n and visualization, the swagger frontend might show very low performance, or even crashes,\n when a service responds with a lot of data. It is recommended to use a HTTP client like\n Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering.\n The default order for all services is 'id asc'.","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankWrapperList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/banks/icon/{id}":{"get":{"tags":["banks"],"summary":"Get the bank's icon (if any) by BIC","description":"","operationId":"bankIcon","consumes":["application/json"],"produces":["image/png"],"parameters":[{"name":"id","in":"path","description":"BIC to retrieve icon for","required":true,"type":"string"},{"name":"accountTypeId","in":"query","description":"A account type ID as defined by finAPI as fallback. In case no logo was found we use a standard logo matching the given type ID.","required":false,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/banks/catalogue":{"get":{"tags":["banks"],"summary":"Get the bank catalogue","description":"","operationId":"catalogue","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"bankName","in":"query","description":"Filter banks by name which start with given string.","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankCatalogue"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/banks/{id}":{"get":{"tags":["banks"],"summary":"Get a bank by the given ID.","description":"","operationId":"banks/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the bank.","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankWrapper"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/bankConnections/{id}/addOrUpdateBankConnectionResult":{"get":{"tags":["bankConnections"],"summary":"Retrieve a bank connection import or update result, without attempting to update the connection.","description":"","operationId":"/{id}/addOrUpdateBankConnectionResult","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"404":{"description":"NOT_FOUND: Bank Connection the given ID was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/cashback":{"post":{"tags":["bankConnections"],"summary":"Trigger the import of bank connections managed via Rentablo Cashback. This import is fundamentally different from the 'usual' import as it does not require any banking credentials. The data is imported via dedicated B2B interfaces only available to Rentablo Cashback customers. The import is done as as background job, so this operation returns immediately.","description":"","operationId":"bankConnections/cashback","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SynchronizationBatchJob"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["bankConnections"],"summary":"Delete all accounts imported via the cashback (Netfonds) import.","description":"","operationId":"delete_bankConnections/cashback","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Accounts deleted."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/{id}":{"get":{"tags":["bankConnections"],"summary":"Get a bank connection","description":"","operationId":"getBankConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the bank connection","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionWrapper"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["bankConnections"],"summary":"Change the stored authentication credentials (banking user ID, banking customer ID, and banking PIN), or other fields of the bank connection. Must pass the connection's identifier.
Note that a bank connection's credentials cannot be changed while it is in the process of import, update, or transactions categorization.
NOTE: Depending on your license, this service may respond with HTTP code 451, containing an error message with a identifier of web form in it. In addition to that the response will also have included a 'Location' attribute, which contains the URL to the web form. In this case, you must forward your user to the web form. For a detailed explanation of the Web Form Flow, please refer to this article: Rentablo Web Form Flow.","description":"","operationId":"editBankConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"in":"body","name":"body","description":"A create or update bank connection object. Only the flags bankingPIN and storePIN are relevant when updating bank connections","required":true,"schema":{"$ref":"#/definitions/EditBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionWrapper"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"BANKING_PIN_REQUIRED: You must provided a banking PIN, or the PIN contains invalid characters.
. WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow to update banking credentials. Submit no credentials with the request (attribute 'loginCredentials') to prevent this error."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["bankConnections"],"summary":"Delete a (remote) bank connection identified by the given ID. This will also clear bank connection data stored in locally persisted accounts.
Remote IDs of all accounts will be reset and all accounts are manually maintained after executing this operation - so handle with care!","description":"","operationId":"deleteBankConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Bank connection deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections":{"get":{"tags":["bankConnections"],"summary":"List and search all bank connections","description":"","operationId":"listAndSearchAllBankConnections","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the bank connection","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Search bankConnections by local (Rentablo) accounts. This will include all bank connections matching the given account IDs.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"includeRelatedAccounts","in":"query","description":"Also include bank connections of related accounts (if any). This will include additional bank connections in the following cases:
a) An account is a depot and its contra account(s) reside at a different bank
b) An account is a contra account and its depot(s) reside at a different bank
","required":false,"type":"array","items":{"type":"boolean"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionListWrapper"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["bankConnections"],"summary":"Add a bank connection. All cash accounts (everything not a depot) will be automatically imported by this routine. In case an EXISTING cash account is used as depot contra account, transactions update for this account is skipped to allow correct dividend assignment later on.","description":"","operationId":"addBankConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"A create or update bank connection object","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/{id}/connectInterface":{"put":{"tags":["bankConnections"],"summary":"Connect an new bank connection interface to an existing bank connection. \" +\n All cash accounts (everything not a depot) will be automatically imported by\n this routine. In case an EXISTING cash account is used as depot contra account,\n transactions update for this account is skipped to allow correct dividend assignment later on.","description":"","operationId":"connectInterface","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"in":"body","name":"body","description":"A create or update bank connection object","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/{id}/update":{"put":{"tags":["bankConnections"],"summary":"Update a bank connection. This will also perform bank synchronization, meaning updating all of its accounts (transactions and securities) on finAPI side. Transaction data for local cash accounts will be updated automatically. Securities are not persisted as we usually require user review or advanced logic before doing so.","description":"","operationId":"updateBankConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"in":"body","name":"body","description":"A create or update bank connection object. Only the flags bankingPIN and storePIN are relevant when updating bank connections","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"BANKING_PIN_REQUIRED: You must provided a banking PIN, or the PIN contains invalid characters.
. WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/secrets/{id}":{"delete":{"tags":["bankConnections"],"summary":"Delete stored secrets for a (remote) bank connection identified by the given ID.","description":"","operationId":"deleteStoredSecrets","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"name":"bankingInterface","in":"query","description":"Only delete credentials for the given banking interface, allowed values are XS2A, FINTS_SERVER, WEB_SCRAPER.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Stored secrets deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/bankingApiConnection":{"delete":{"tags":["bankConnections"],"summary":"Delete the remote banking API account (i.e. the finAPI account) of the currently logged in user. This will delete the remote user account and also the local copy of the remote user. Remote IDs of all accounts will be reset and all accounts are manually maintained after executing this operation - so handle with care!","description":"","operationId":"deleteBankingApiConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Banking API connection deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/bankingApiConnection/{id}":{"delete":{"tags":["bankConnections"],"summary":"Delete the remote banking API account (i.e. the finAPI account) of the given user. This will delete the remote user account and also the local copy of the remote user. Remote IDs of all accounts will be reset and all accounts are manually maintained after executing this operation - so handle with care!","description":"","operationId":"deleteBankingApiConnection/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Delete the banking API connection for the given user","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Banking API connection deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER_MANAGEMENT":"Requires an authenticated user manager."}}},"/v2/bankConnections/{id}/addOrUpdateBankConnectionResult":{"get":{"tags":["bankConnections"],"summary":"Retrieve a bank connection import or update result, without attempting to update the connection.","description":"","operationId":"/{id}/addOrUpdateBankConnectionResultV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"404":{"description":"NOT_FOUND: Bank Connection the given ID was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/updateProcess/{processId}":{"get":{"tags":["bankConnections"],"summary":"Get the update status for a bank connection import or update process. Will include the update\n result if the update finished and cash accounts were written.","description":"","operationId":"bankConnectionUpdateProcessV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"processId","in":"path","description":"The bank connection import or update process","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"404":{"description":"NOT_FOUND: The given update or import process was not found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/cashback":{"post":{"tags":["bankConnections"],"summary":"Trigger the import of bank connections managed via Rentablo Cashback. This import is fundamentally different from the 'usual' import as it does not require any banking credentials. The data is imported via dedicated B2B interfaces only available to Rentablo Cashback customers. The import is done as as background job, so this operation returns immediately.","description":"","operationId":"bankConnections/cashbackV2","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SynchronizationBatchJob"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["bankConnections"],"summary":"Delete all accounts imported via the cashback (Netfonds) import.","description":"","operationId":"delete_bankConnections/cashbackV2","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Accounts deleted."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/{id}":{"get":{"tags":["bankConnections"],"summary":"Get a bank connection","description":"","operationId":"getBankConnectionV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the bank connection","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionWrapper"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["bankConnections"],"summary":"Change the stored authentication credentials (banking user ID, banking customer ID, and banking PIN), or other fields of the bank connection. Must pass the connection's identifier.
Note that a bank connection's credentials cannot be changed while it is in the process of import, update, or transactions categorization.
NOTE: Depending on your license, this service may respond with HTTP code 451, containing an error message with a identifier of web form in it. In addition to that the response will also have included a 'Location' attribute, which contains the URL to the web form. In this case, you must forward your user to the web form. For a detailed explanation of the Web Form Flow, please refer to this article: Rentablo Web Form Flow.","description":"","operationId":"editBankConnectionV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"in":"body","name":"body","description":"A create or update bank connection object. Only the flags bankingPIN and storePIN are relevant when updating bank connections","required":true,"schema":{"$ref":"#/definitions/EditBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionWrapper"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"BANKING_PIN_REQUIRED: You must provided a banking PIN, or the PIN contains invalid characters.
. WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow to update banking credentials. Submit no credentials with the request (attribute 'loginCredentials') to prevent this error."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["bankConnections"],"summary":"Delete a (remote) bank connection identified by the given ID. This will also clear bank connection data stored in locally persisted accounts.
Remote IDs of all accounts will be reset and all accounts are manually maintained after executing this operation - so handle with care!","description":"","operationId":"deleteBankConnectionV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Bank connection deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections":{"get":{"tags":["bankConnections"],"summary":"List and search all bank connections","description":"","operationId":"listAndSearchAllBankConnectionsV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the bank connection","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Search bankConnections by local (Rentablo) accounts. This will include all bank connections matching the given account IDs.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"includeRelatedAccounts","in":"query","description":"Also include bank connections of related accounts (if any). This will include additional bank connections in the following cases:
a) An account is a depot and its contra account(s) reside at a different bank
b) An account is a contra account and its depot(s) reside at a different bank
","required":false,"type":"array","items":{"type":"boolean"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionListWrapper"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["bankConnections"],"summary":"Add a bank connection. All cash accounts (everything not a depot) will be automatically imported by this routine. In case an EXISTING cash account is used as depot contra account, transactions update for this account is skipped to allow correct dividend assignment later on.","description":"","operationId":"addBankConnectionV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"A create or update bank connection object","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankSynchronizationProcess"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/{id}/connectInterface":{"put":{"tags":["bankConnections"],"summary":"Connect an new bank connection interface to an existing bank connection. \" +\n All cash accounts (everything not a depot) will be automatically imported by\n this routine. In case an EXISTING cash account is used as depot contra account,\n transactions update for this account is skipped to allow correct dividend assignment later on.","description":"","operationId":"connectInterfaceV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"in":"body","name":"body","description":"A create or update bank connection object","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankSynchronizationProcess"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/{id}/update":{"put":{"tags":["bankConnections"],"summary":"Update a bank connection. This will also perform bank synchronization, meaning updating all of its accounts (transactions and securities) on finAPI side. Transaction data for local cash accounts will be updated automatically. Securities are not persisted as we usually require user review or advanced logic before doing so.","description":"","operationId":"updateBankConnectionV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"in":"body","name":"body","description":"A create or update bank connection object. Only the flags bankingPIN and storePIN are relevant when updating bank connections","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankSynchronizationProcess"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"BANKING_PIN_REQUIRED: You must provided a banking PIN, or the PIN contains invalid characters.
. WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/secrets/{id}":{"delete":{"tags":["bankConnections"],"summary":"Delete stored secrets for a (remote) bank connection identified by the given ID.","description":"","operationId":"deleteStoredSecretsV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The bank connection ID","required":true,"type":"integer"},{"name":"bankingInterface","in":"query","description":"Only delete credentials for the given banking interface, allowed values are XS2A, FINTS_SERVER, WEB_SCRAPER.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Stored secrets deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/bankingApiConnection":{"delete":{"tags":["bankConnections"],"summary":"Delete the remote banking API account (i.e. the finAPI account) of the currently logged in user. This will delete the remote user account and also the local copy of the remote user. Remote IDs of all accounts will be reset and all accounts are manually maintained after executing this operation - so handle with care!","description":"","operationId":"deleteBankingApiConnectionV2","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Banking API connection deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/bankConnections/bankingApiConnection/{id}":{"delete":{"tags":["bankConnections"],"summary":"Delete the remote banking API account (i.e. the finAPI account) of the given user. This will delete the remote user account and also the local copy of the remote user. Remote IDs of all accounts will be reset and all accounts are manually maintained after executing this operation - so handle with care!","description":"","operationId":"deleteBankingApiConnection/{id}V2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Delete the banking API connection for the given user","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Banking API connection deleted."},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER_MANAGEMENT":"Requires an authenticated user manager."}}},"/v1/bankConnections/webFormFlow/{id}":{"get":{"tags":["bankConnections"],"summary":"Retrieve a bank connection import or update result, after successfully completing the web-form flow.","description":"","operationId":"webFormFlow/getImportOrUpdateBankConnectionResult","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The TPP web-form ID","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"400":{"description":"WEB_FORM_FLOW_INCOMPLETE: The web form flow has not been completed.
INVALID_PARAMETER: You have provided invalid request parameters; see error details.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: No web-form with the given ID was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["bankConnections"],"summary":"Add or update a bank connection using the TPP web-form flow. All cash (everything not a depot) accounts will be automatically imported or updated by this endpoint. In case an EXISTING cash account is used as depot contra account, transactions update for this account is skipped to allow correct dividend assignment later on.","description":"","operationId":"webFormFlow/addOrUpdateBankConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the web form this import or update request relates to (this is a random ID token)","required":true,"type":"string"},{"in":"body","name":"body","description":"A create or update bank connection object","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionFromTppWebFormParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials are missing
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: No web-form with the given ID was found."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}},"put":{"tags":["bankConnections"],"summary":"Change the stored authentication credentials (banking user ID, banking customer ID, and banking PIN), or other fields of the bank connection. Must pass the connection's identifier.
Note that a bank connection's credentials cannot be changed while it is in the process of import, update, or transactions categorization.
This endpoint allows to edit a bank connection starting from a TPP web-form. The request body must thus contain the web-form secret.","description":"","operationId":"editBankConnectionFromTppWebForm","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the web form this import or update request relates to (this is a random ID token)","required":true,"type":"string"},{"in":"body","name":"body","description":"A create or update bank connection object. Only the flags bankingPIN and storePIN are relevant when updating bank connections","required":true,"schema":{"$ref":"#/definitions/EditBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionWrapper"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"BANKING_PIN_REQUIRED: You must provided a banking PIN, or the PIN contains invalid characters.
. WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow to update banking credentials. Submit no credentials with the request (attribute 'loginCredentials') to prevent this error."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v2/bankConnections/webFormFlow/{id}":{"get":{"tags":["bankConnections"],"summary":"Retrieve a bank connection import or update result, after successfully completing the web-form flow.","description":"","operationId":"webFormFlow/getImportOrUpdateBankConnectionResultV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The TPP web-form ID","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"400":{"description":"WEB_FORM_FLOW_INCOMPLETE: The web form flow has not been completed.
INVALID_PARAMETER: You have provided invalid request parameters; see error details.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: No web-form with the given ID was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["bankConnections"],"summary":"Add or update a bank connection using the TPP web-form flow. All cash (everything not a depot)\n accounts will be automatically imported or updated by this endpoint. In case an EXISTING\n cash account is used as depot contra account, transactions update for this account is skipped to\n allow correct dividend assignment later on. Note that the endpoint will not wait for the\n bank connection update and account updates to finish. Rather, it will respond with a 510 error\n indicating that update is in progress. Please use the 'updateProcess' endpoint to check for the\n update to finish","description":"","operationId":"webFormFlow/addOrUpdateBankConnectionV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the web form this import or update request relates to (this is a random ID token)","required":true,"type":"string"},{"in":"body","name":"body","description":"A create or update bank connection object","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionFromTppWebFormParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankSynchronizationProcess"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials are missing
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: No web-form with the given ID was found."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"510":{"description":"Multiple types - either a multi-step authentication is required or the update\n is running asynchronously. In the latter case please check for the update to finish."}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}},"put":{"tags":["bankConnections"],"summary":"Change the stored authentication credentials (banking user ID, banking customer ID, and banking PIN), or other fields of the bank connection. Must pass the connection's identifier.
Note that a bank connection's credentials cannot be changed while it is in the process of import, update, or transactions categorization.
This endpoint allows to edit a bank connection starting from a TPP web-form. The request body must thus contain the web-form secret.","description":"","operationId":"editBankConnectionFromTppWebFormV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the web form this import or update request relates to (this is a random ID token)","required":true,"type":"string"},{"in":"body","name":"body","description":"A create or update bank connection object. Only the flags bankingPIN and storePIN are relevant when updating bank connections","required":true,"schema":{"$ref":"#/definitions/EditBankConnectionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionWrapper"}},"400":{"description":"INVALID_PARAMETER: You have provided invalid request parameters; most likely part of the banking credentials or the bank ID is missing.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"BANKING_PIN_REQUIRED: You must provided a banking PIN, or the PIN contains invalid characters.
. WEB_FORM_REQUIRED: The executed users mandator is not a licensed TPP and must thus use the TPP web-form flow to update banking credentials. Submit no credentials with the request (attribute 'loginCredentials') to prevent this error."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v2/bankConnections/webFormFlow/{id}/updateProcess/{processId}":{"get":{"tags":["bankConnections"],"summary":"Get the update status for a bank connection import or update process. Will include the update\n result if the update finished and cash accounts were written.","description":"","operationId":"webFormFlow/bankConnectionUpdateProcessV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"processId","in":"path","description":"The bank connection import or update process","required":true,"type":"integer"},{"name":"id","in":"path","description":"The TPP web-form ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AddOrUpdateBankConnectionResult"}},"404":{"description":"NOT_FOUND: The given update or import process was not found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/billingCycles":{"get":{"tags":["billingCycles"],"summary":"Get or search a list of billing cycles","description":"","operationId":"listAndSearchAllBillingCycles","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve the given billing cycles","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"startDate","in":"query","description":"Only retrieve billing cycles with start date equal or after the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"endDate","in":"query","description":"Only retrieve billing cycles with end date equal or beforer the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BillingCycleList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters given, see error details."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}},"post":{"tags":["billingCycles"],"summary":"Create a new billing cycle with the given start and end date","description":"","operationId":"createBillingCycle","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/CreateBillingCycleParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BillingCycle"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters given, see error details."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/billingCycles/payoutStatistics":{"get":{"tags":["billingCycles"],"summary":"Get payout statistics for all billing cycles over time","description":"","operationId":"billingCyclePayoutStatistics","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"mandatorPublicId","in":"query","description":"Only display data for the given mandator.","required":false,"type":"string"},{"name":"monthlyValues","in":"query","description":"Retrieve monthly instead of quarterly values","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CommissionStatisticList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"Requires a fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}}},"/v1/billingCycles/{id}":{"get":{"tags":["billingCycles"],"summary":"Get or export the billing cycle with the given ID","description":"","operationId":"billingCycles/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the given billing cycle","required":true,"type":"integer"},{"name":"format","in":"query","description":"Retrieve billing cycle data in the given format, allowable values are 'json' and 'pdf'. Default is 'json'. A PDF export will only be allowed if there are actually any executed transactions.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BillingCycle"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"NOT_FOUND: Billing cycle with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}},"delete":{"tags":["billingCycles"],"summary":"Delete the billing cycle with the given ID","description":"","operationId":"deleteBillingCycle","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Delete the given billing cycle","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Billing cycle deleted."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"NOT_FOUND: Billing cycle with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed; or billing cycle may not be deleted"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/billingCycles/invoices":{"get":{"tags":["billingCycles"],"summary":"Get billing invoices for all account holders enclosed by the logged in user. This includes all data from previous billing cycles and data that is not billed yet. Each billing cycle for each account holder and not yet billed data for each account holder will result in one AccountHolderCommission record.","description":"","operationId":"getInvoices","consumes":["application/json"],"produces":["application/pdf"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InvoiceList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/billingCycles/taxation":{"get":{"tags":["billingCycles"],"summary":"Get the amount of kickback (cashback transfers) that may be relevant for a declaration of taxes. The amount is based on the commissions payed out to the customer, the according Rentablo administrative fee and the tax exempt rations defined by the German legislator (Teilfreistellungsbetraege).
Dislaimer: Rentablo does not provide any tax advising services. All data generated by this endpoint is thus delivered 'as is', without any liability and without any guarantee for compliance or correctness of the produced data.","description":"","operationId":"getTaxationEstimate","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountHolderId","in":"query","description":"Retrieve a taxation estimate for the given account holder","required":true,"type":"integer"},{"name":"estimateFrom","in":"query","description":"Get the taxation estimate starting from the given date; format is yyyy-MM-dd (US Format). The default value is the start of last year; an usually this value will be the beginning of a year. The date filter is applied to the billing cycle creation timestamp; as we base taxation estimation on the payment date.","required":false,"type":"string"},{"name":"estimateTo","in":"query","description":"Get the taxation estimate ending with the given date; format is yyyy-MM-dd (US Format). The default value is the end of last year; an usually this value will be the end of a year. The date filter is applied to the billing cycle creation timestamp; as we base taxation estimation on the payment date.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TaxationEstimateList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters given; see error details"},"404":{"description":"NOT_FOUND: Account holder with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["billingCycles"],"summary":"Update the taxation category for a given fund (identified by ISIN). The update is persisted, so that a user needs to update the category only once; future queries will automatically use the value chosen by the user.","description":"","operationId":"updateTaxationCategory","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The taxation estimate update parameters","required":true,"schema":{"$ref":"#/definitions/UpdateTaxationEstimateParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TaxationEstimate"}},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/billingCycles/{id}/invoices":{"get":{"tags":["billingCycles"],"summary":"Get the billing invoice for all account holders enclosed by the logged in user in the given billing cycle.","description":"","operationId":"/billingCycles/{id}/invoices","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve invoicing data for the given billing cycle","required":true,"type":"integer"},{"name":"format","in":"query","description":"Retrieve invoicing data in the given format, allowable values are 'json' and 'pdf'. Default is 'json'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Invoice"}},"404":{"description":"NOT_FOUND: Billing cycle with the given ID was not found or insufficient privileges; NO_DATA: No invoicing data is available in the given billing cycle."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/checkConsistencyStatus":{"post":{"tags":["bookings"],"summary":"Check if persisting all of the given bookings would lead to consistency errors.","description":"","operationId":"checkConsistencyStatus","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"CreateOrUpdateInvestment params including a list of CreateOrUpdateTransaction params","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInvestmentParamsList"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"INVALID_PARAMETER: check error message for details"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The bookings are invalid, see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error; see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/checkConsistencyStatus/{id}":{"post":{"tags":["bookings"],"summary":"Check if updating the given bookings will lead to consistency problems.","description":"","operationId":"checkConsistencyStatus/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the booking to check the consistency status for","required":true,"type":"integer"},{"in":"body","name":"body","description":"The transaction params","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateBookingParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"404":{"description":"NOT_FOUND: Transaction with the given ID not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/carveOut":{"post":{"tags":["bookings"],"summary":"Carve out an investment.","description":"","operationId":"carveOut","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CarveOutParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account or one of the investments could not be found. For investments, this can only happen if an ID attribute is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/switch":{"post":{"tags":["bookings"],"summary":"Switch an investment or fund. A switch typically occurs if a company or fund was renamed or fused with another","description":"","operationId":"switchInvestment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/SwitchParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account or one of the investments could not be found. For investments, this can only happen if an ID attribute is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings":{"get":{"tags":["bookings"],"summary":"Get or search a list of bookings","description":"","operationId":"listAndSearchAllBookings","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve Bookings with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve Bookings for the given Accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve Bookings for the given investments","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"finApiId","in":"query","description":"(Deprecated - use externalId) Retrieve Bookings with the given finAPI IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"externalId","in":"query","description":"Retrieve Bookings with the given external IDs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Retrieve Bookings having the given type, allowed values are buy, sell, dividend. Note that kupons also have types dividend; and retained dividends have type buy (check subtype here)","required":false,"type":"array","items":{"type":"string","enum":["buy","sell","book_in","book_out","dividend","retained_dividend","purchase_right"]},"collectionFormat":"multi"},{"name":"wkn","in":"query","description":"Retrieve Bookings belonging to Investments with the given WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve Bookings belonging to Investments with the given ISINs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isinOrWkn","in":"query","description":"Retrieve Bookings belonging to Investments with the given ISINs or WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"tickerSymbol","in":"query","description":"Retrieve Bookings belonging to Investments with the given ticker symbols","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"currency","in":"query","description":"Retrieve Bookings in the given currencies (3-letter ISO code)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"minAmount","in":"query","description":"Retrieve Bookings with amount greater or equal than the given minAmount","required":false,"type":"number"},{"name":"maxAmount","in":"query","description":"Retrieve Bookings with amount less or equal than the given maxAmount","required":false,"type":"number"},{"name":"minDate","in":"query","description":"Retrieve Bookings with date after or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"maxDate","in":"query","description":"Retrieve Bookings with date before or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableBookingList"}},"404":{"description":"NOT_FOUND: None of the provided account IDs could be found; or the user has no accounts."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error. INVALID_PARAMETER: invalid parameter; see error details."}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["bookings"],"summary":"Create (or batch update) a set of bookings und perform optional background synchronization of dividends and kupons if attributes 'performBackgroundTransactionSync' is set true. In case no bookings are submitted (i.e. the 'createOrUpdateInvestmentParamsList' is empty), a background sync may still be performed. This allows importing dividends in the absence of depot composition changes.
In case some of the transactions are invalid, the according validation errors are returned and only valid transactions are persisted.","description":"","operationId":"createBookings","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateMultipleBookingParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"201":{"description":"Bookings (and investments if necessary) were created"},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account, or one of the investments could not be found. For investments, this can only happen if an ID attributes is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The booking is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/consolidateNegativeNol":{"post":{"tags":["bookings"],"summary":"Consolidate bookings with a negative number of lots for the investments with the given ISINs. This will create an estimated booking whenever the number of lots at any day will drop below zero.\n This endpoint is designed for server-to-server use cases, but might be user by clients as well to re-consolidate erroneous user input.","description":"","operationId":"consolidateNegativeNol","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/ConsolidateNumberOfLotsParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Bookings were consolidated"},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account, or one of the investments could not be found. For investments, this can only happen if an ID attributes is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The booking is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/switch/checkConsistencyStatus":{"post":{"tags":["bookings"],"summary":"Validate a switch. A switch typically occurs if a company or fund was renamed or fused with another","description":"","operationId":"validateSwitchInvestment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/SwitchParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account or one of the investments could not be found. For investments, this can only happen if an ID attribute is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/{externalId}/byExternalId":{"delete":{"tags":["bookings"],"summary":"Delete a booking by external ID. This is a convenience routine typically used by SaaS processes\n working on booking data.","description":"","operationId":"deleteBookingByExternalId","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"externalId","in":"path","description":"External ID of the booking to delete","required":true,"type":"string"},{"name":"keepData","in":"query","description":"Keep the data by just marking the record as deleted, instead of physically deleting it.\n Default is false (i.e. to physically delete).","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Booking deleted"},"404":{"description":"NOT_FOUND: Booking with the given external ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"406":{"description":"VALIDATION_ERROR: Deleting this Booking would lead to inconsistencies."},"500":{"description":"DATA_INTEGRITY_ERROR: Entity could not be deleted. UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/carveOut/checkConsistencyStatus":{"post":{"tags":["bookings"],"summary":"Validate a carve out.","description":"","operationId":"valiateCarveOut","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CarveOutParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account or one of the investments could not be found. For investments, this can only happen if an ID attribute is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/{id}":{"get":{"tags":["bookings"],"summary":"Get a booking change","description":"","operationId":"portfolioPositions/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the transaction to retrieve","required":true,"type":"integer"},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Booking"}},"404":{"description":"NOT_FOUND: Booking with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["bookings"],"summary":"Update a booking. Note that update of single fields is typically not possible (see the required\n attribute in the input model). This is because many fields are inter dependent; e.g. a commissions\n may be entered in EUR for and investment denote in USD. In such cases updating data without\n providing the exchange rate would lead to inconsistent data. We thus require a certain set of\n input data also for updates.","description":"","operationId":"updateTransaction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the transaction to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateBookingParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Booking"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Booking with the given ID was not found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The following error occurred when validating the position change."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["bookings"],"summary":"Delete a booking","description":"","operationId":"deleteBooking","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the booking to delete","required":true,"type":"integer"},{"name":"keepData","in":"query","description":"Keep the data by just marking the record as deleted, instead of physically deleting it.\n Default is false (i.e. to physically delete).","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Booking deleted"},"404":{"description":"NOT_FOUND: Booking with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"406":{"description":"VALIDATION_ERROR: Deleting this Booking would lead to inconsistencies."},"500":{"description":"DATA_INTEGRITY_ERROR: Entity could not be deleted. UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/split":{"put":{"tags":["bookings"],"summary":"Split an investment.","description":"","operationId":"split","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/SplitParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Split executed successfully."},"400":{"description":"INVALID_PARAMETER: Invalid parameters, see error details."},"404":{"description":"SC_NOT_FOUND: Investment with the given ID was not found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/remoteChanges":{"get":{"tags":["bookings"],"summary":"DEPRECATED: Detect changes to an accounts investments and return them as a list of proposed booking changes.","description":"","operationId":"remoteChanges","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"ID of the account to synchronize","required":true,"type":"integer"},{"name":"doNotApplyTransactionCutoff","in":"query","description":"Usually all transactions with an import date greater then equal the last manual or automatic synchronization date will be used. Setting this parameter to true will force the transaction classification logic to skip this cutoff and instead use the latest investment transaction date as cutoff if an investment was found. Otherwise all historic transactions will be reported.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountImportOrSynchronizationResult"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"UNKNOWN_ENTITY: Given finApi account or contra account could not be found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"406":{"description":"NO_FIN_API_ACCOUNT: The given account is not linked with a bank account (no finApiId)"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"422":{"description":"ENTITY_EXISTS: Account with the given ID has already been imported"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/cashFlowAnalytics/history":{"get":{"tags":["cashFlowAnalytics"],"summary":"Get cash flow analytics for the given accounts","description":"","operationId":"cashFlowAnalytics","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Perform analytics on the given accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Get income and expenses starting from the given date; format is yyyy-MM-dd (US Format).","required":true,"type":"string"},{"name":"to","in":"query","description":"Get income and expenses starting from the given date; format is yyyy-MM-dd (US Format).\n Default is today.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/IncomeAndSpendingHistory"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"NOT_FOUND: None of the given accounts wer found"},"400":{"description":"NO_BANK_DATA_AVAILABLE: You are attempting to retrieve transaction analytics for an account which is manually maintained; i.e. no transaction data was provided by a bank. Transaction analytics require SEPA fields and are thus not supported on manually maintained accounts."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/cashFlowAnalytics/predict":{"get":{"tags":["cashFlowAnalytics"],"summary":"Predict this and next months transactions for the given accounts","description":"","operationId":"predictCashFlows","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Perform analytics on the given accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/IncomeAndSpendingStatistics"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"NOT_FOUND: None of the given accounts wer found"},"400":{"description":"NO_BANK_DATA_AVAILABLE: You are attempting to retrieve transaction analytics for an account which is manually maintained; i.e. no transaction data was provided by a bank. Transaction analytics require SEPA fields and are thus not supported on manually maintained accounts."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/cashbackIncidents/{id}":{"get":{"tags":["cashbackIncidents"],"summary":"Get the cashback incident.","description":"","operationId":"getCashbackIncident","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the subscription to retrieve.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CashbackIncident"}},"404":{"description":"NOT_FOUND: No subscription with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an subscription management administrator to search any subscription."}},"put":{"tags":["cashbackIncidents"],"summary":"Update a cashback incident.","description":"","operationId":"updateCashbackIncident","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the cashback incident to update.","required":true,"type":"integer"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateCashbackIncidentParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CashbackIncident"}},"400":{"description":"INVALID_PARAMETER: invalid parameter; see error details."},"404":{"description":"NOT_FOUND: No incident with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only PUT is allowed; NOT_PERMITTED: The given action is not permitted."},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an subscription management administrator."}}},"/v1/cashbackIncidents":{"get":{"tags":["cashbackIncidents"],"summary":"List and search all cashback incidents.","description":"","operationId":"listAndSearchAllCashbackIncidents","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"IDs of the subscriptions to retrieve.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"subscriptionId","in":"query","description":"Retrieve incidents for the given subscription(s).","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"status","in":"query","description":"Filter incidents by status.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Filter incidents by type.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableCashbackIncidentList"}},"404":{"description":"NOT_FOUND: No subscriptions were found or insufficient privileges; see error details."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an subscription management administrator."}},"post":{"tags":["cashbackIncidents"],"summary":"Create a new cashback incident","description":"","operationId":"createCashbackIncident","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateCashbackIncidentParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CashbackIncident"}},"400":{"description":"INVALID_PARAMETER: invalid parameter; see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed; NOT_PERMITTED: The given action is not permitted."},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an subscription management administrator."}}},"/v1/categories":{"get":{"tags":["categories"],"summary":"Get and search all Transaction Categories","description":"","operationId":"listAndSearchAllCategories","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the categories to retrieve","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"search","in":"query","description":"If specified, then only those categories will be contained in the result whose 'name' contains the given search string (the matching works case-insensitive). If no categories contain the search string in their name, then the result will be an empty list. NOTE: If the given search string consists of several terms (separated by whitespace), then ALL of these terms must be contained in the name in order for a category to get included into the result.","required":false,"type":"string"},{"name":"isCustom","in":"query","description":"If specified, then the result will contain only categories that are either finAPI global (in case of value 'false'), or only categories that have been created by the authorized user (in case of value 'true').","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CategoryList"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["categories"],"summary":"Create a transaction category","description":"","operationId":"createTransactionCategory","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The transaction parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateCategoryParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Category"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/categories/{id}":{"get":{"tags":["categories"],"summary":"Get a Transaction Category","description":"","operationId":"categories/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the category to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Category"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: Category with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["categories"],"summary":"Delete a Transaction Category","description":"","operationId":"deleteCategory","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the category to delete","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: Category with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/classifications/currencies":{"get":{"tags":["classifications"],"summary":"Get investments by currency","description":"","operationId":"listCurrencyClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by type for selected account ids. Returns classification for\n all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InvestmentTypeBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/classifications/investmentTypes":{"get":{"tags":["classifications"],"summary":"Get investments by type","description":"","operationId":"listTypeClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by type for selected account ids. Returns classification for\n all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InvestmentTypeBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/classifications/industries":{"get":{"tags":["classifications"],"summary":"Get classifications by industries","description":"","operationId":"listIndustryClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by regions for selected account ids. Returns classification\n for all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/IndustryBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/classifications/regions":{"get":{"tags":["classifications"],"summary":"Get classifications by regions","description":"","operationId":"listRegionClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by regions for selected account ids. Returns classification\n for all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RegionBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/comments":{"get":{"tags":["comments"],"summary":"Get or search Comments","description":"","operationId":"listAndSearchAllComments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"investmentId","in":"query","description":"Retrieve comments for the given investment; requires an authenticated user. Note that the current user might not have privileges to see comments for another users investment.","required":false,"type":"integer"},{"name":"watchlistEntryId","in":"query","description":"Retrieve comments for the given watchlist entry; requires an authenticated user. This parameter will be ignored if an investmentId is provided. Note that the current user might not have privileges to see comments for another users watchlist entries.","required":false,"type":"integer"},{"name":"isin","in":"query","description":"Retrieve public comments for the given ISIN","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"mandatorPublicId","in":"query","description":"Filter public comments by the given mandator","required":false,"type":"string"},{"name":"minDate","in":"query","description":"Retrieve only comments with date after or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for this endpoint is 'createdAt asc' (which is a deviation from the standard sort by ID normally used).","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableCommentList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}},"post":{"tags":["comments"],"summary":"Create a comment attached to an investment or watchlist entry. A challenge token will be required for spam protection unless the mandator disabled it (mandator configuration property 'commentChallengeTokenEnabled').","description":"","operationId":"createComment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateCommentParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Comment"}},"400":{"description":"INVALID_PARAMETER: Either investmentId, watchlistEntryId or isin must be given. The comment must not be empty and have size > 3."},"401":{"description":"You are not authorized to perform this action."},"403":{"description":"CHALLENGE_VALIDATION_ERROR: Captcha challenge validation failed. Disable challenge validation in the mandator if this behaviour is not desired."},"404":{"description":"SC_NOT_FOUND: Given investment or watchlistEntry could not be found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only POST is allowed."},"406":{"description":"VALIDATION_ERROR: The given entity is not valid"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the mandator allows anonymous comments"}}},"/v1/comments/{id}":{"get":{"tags":["comments"],"summary":"Get a comment","description":"","operationId":"showComment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the comment with the given ID.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Comment"}},"404":{"description":"NOT_FOUND: Comment not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["comments"],"summary":"Delete a comment","description":"","operationId":"delete","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Delete the comment with the given ID.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"401":{"description":"You are not authorized to perform this action"},"404":{"description":"NOT_FOUND: The according comment could not be found."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER_MANAGEMENT":"Requires an authenticated user administrator to delete arbitrary comments.","ROLE_USER":"Requires an authenticated user."}}},"/v1/cryptoCurrencies/catalogue/refresh":{"get":{"tags":["cryptoCurrencies"],"summary":"(Re)load data for the entire crypto currency catalogue.","description":"","operationId":"cryptoCurrencies/refresh","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"refreshHistoricQuotes","in":"query","description":"Refresh historic quotes as well if true; default is to refresh todays quote only.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Batch updated submitted"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires a fully authenticated master data administrator."}}},"/v1/cryptoCurrencies/{id}":{"get":{"tags":["cryptoCurrencies"],"summary":"Add a crypto currency.","description":"","operationId":"addCryptoCurrency","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Add the given crypto currency; the coin-gecko ID must be provided (example: bitcoin).","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Successfully added"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires a fully authenticated master data administrator."}}},"/v1/currencies/{id}":{"get":{"tags":["currencies"],"summary":"Get a currency by three-letter ISO code.","description":"","operationId":"v1/getCurrency","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The three-letter ISO code.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Currency"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/currencies":{"get":{"tags":["currencies"],"summary":"List available currencies.","description":"","operationId":"v1/listCurrencies","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"type","in":"query","description":"Filter currencies by the given type.","required":false,"type":"array","items":{"type":"string","enum":["standard"]},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CurrencyList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/oauth/access_token":{"post":{"tags":["oauth"],"summary":"wealthAPI implements the OAuth 2.0 Standard for authorizing mandators and users within\n mandators. OAuth uses the terminology of clients and users. A client represents a mandator\n that calls certain services. A service call might be in the context of a user of the mandator\n (e.g.: getting a user's investments), or outside any user context\n (e.g.: editing your mandators configuration). In any case, every service call must be authorized\n by an access_token. This service can be used to get such an access_token, for either one of\n the client's users, or for the client itself. Also, this service can be used to refresh the\n access_token of a user that has previously requested an access_token.","description":"","operationId":"accessToken","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The username and password","required":true,"schema":{"$ref":"#/definitions/OauthParams"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/LoginToken"}},"400":{"description":"Invalid input, e.g. no refresh token provided"},"401":{"description":"Unauthorized; please check credentials"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/login":{"post":{"tags":["oauth"],"summary":"DEPRECATED, use /oauth/access_token instead. Request a login token for the given user","description":"","operationId":"login","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The username and password","required":true,"schema":{"$ref":"#/definitions/LoginParams"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/LoginToken"}},"401":{"description":"Unauthorized; please check credentials"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/oauth/revoke_token":{"post":{"tags":["oauth"],"summary":"Revoke (invalidate) all refresh tokens for the currently logged in user. Note that access tokens\n are not invalidated, but they will become invalid once they expire.","description":"","operationId":"revokeToken","consumes":["application/json"],"produces":["application/json"],"parameters":[],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"401":{"description":"Unauthorized; please check Bearer token"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/properties/{id}":{"get":{"tags":["userProperties"],"summary":"Get the user property with the given key.","description":"","operationId":"showUserProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The property key","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CustomProperty"}},"404":{"description":"NOT_FOUND: No data for the given key was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["userProperties"],"summary":"Delete the user property with the given key.","description":"","operationId":"deleteUserProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The property key","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Entity deleted."},"404":{"description":"NOT_FOUND: No data for the given key was found."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/properties":{"get":{"tags":["userProperties"],"summary":"Get a list of all user properties.","description":"","operationId":"listAndSearchAllUserProperties","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CustomPropertyList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["userProperties"],"summary":"Create or update a user property.","description":"","operationId":"createOrUpdateUserProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateCustomPropertyParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CustomProperty"}},"400":{"description":"INVALID_PARAMETER: One of the given parameters is invalid, see error details"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/depotSynchronizationLogs/{id}":{"get":{"tags":["depotSynchronizationLogs"],"summary":"Get the depot synchronization log with the given key.","description":"","operationId":"showDepotSynchronizationLog","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The synchronization log ID","required":true,"type":"integer"},{"name":"status","in":"query","description":"Include log items with the given status; default is SUCCESS","required":false,"type":"array","items":{"type":"string","enum":["SUCCESS","FAILED"]},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DepotSynchronizationLog"}},"404":{"description":"NOT_FOUND: No data for the given id was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["depotSynchronizationLogs"],"summary":"Attempt to rollback the depot synchronization log with the given key.","description":"","operationId":"rollbackDepotSynchronizationLog","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The synchronization log ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Rolled back."},"404":{"description":"NOT_FOUND: No data for the given id was found."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/depotSynchronizationLogs":{"get":{"tags":["depotSynchronizationLogs"],"summary":"Query or find a set of depot synchronization logs.","description":"","operationId":"findAndSearchDepotSynchronizationLogs","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"The synchronization log IDs","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"batchId","in":"query","description":"The synchronization batch IDs","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve logs for the given account ID(s)","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableDepotSynchronizationLogList"}},"404":{"description":"NOT_FOUND: No data for the given id was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/discounts/recommendationCode":{"get":{"tags":["discounts"],"summary":"Get the currently logged in users recommendation code.","description":"","operationId":"recommendationCode","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"string"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/discounts":{"get":{"tags":["discounts"],"summary":"Get discount positions for the currently logged in user or (if in role ROLE_ACCOUNTING or ROLE_SUBSCRIPTION_MANAGEMENT) for the given user.","description":"","operationId":"listAndSearchAllDiscounts","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"userId","in":"query","description":"Retrieve discount position for the given user; requires administrative privileges.\n Retrieve positions for the currently logged in user if not specified.","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DiscountPositionList"}},"404":{"description":"NOT_FOUND: User with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Subscription managers have full access.","ROLE_USER":"Requires an authenticated user.","ROLE_ACCOUNTING":"Accountants have full access."}},"post":{"tags":["discounts"],"summary":"Add a discount position to the given user.","description":"","operationId":"createDiscountPosition","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateDiscountPositionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DiscountPosition"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The discount position booking is not valid."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a fully authenticated subscription manager.","ROLE_ACCOUNTING":"Requires a fully authenticated accountant."}}},"/v1/dividends":{"get":{"tags":["dividends"],"summary":"Get or search a list dividends for the given investments. Dividends without a transaction record have not been assigned; dividends with a transaction record were already booked. Use the 'number of lots' attribute of each dividend record to determine, if any according investments were held at dividend payment date.","description":"","operationId":"listAndSearchAllDividends","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve Dividends for the given account(s). Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve Dividends for the given Investment(s). Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve Dividends for the given ISINS. Limited to 300 ISINs.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"taxRate","in":"query","description":"Apply the given tax rate when calculating the dividend amounts; by default, the users standard tax rate is used. Must be something between 0 and 1.","required":false,"type":"number"},{"name":"cutoffDate","in":"query","description":"Only retrieve dividends with payment date after the given cutoff; format is yyyy-MM-dd (US Format).","required":false,"type":"string"},{"name":"activeInvestmentsOnly","in":"query","description":"Only include investments with number of lots > 0; default is true","required":false,"type":"boolean"},{"name":"excludeImported","in":"query","description":"Exclude dividends for investments that have been imported via banking API and for which transaction data is available; default is true.","required":false,"type":"array","items":{"type":"boolean"},"collectionFormat":"multi"},{"name":"splitAdjust","in":"query","description":"Apply splits to dividends; default is false.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendList"}},"400":{"description":"INVALID_PARAMETER: Tax rate must be a positive value between 1 and 0."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments comments."}}},"/v1/dividends/history":{"get":{"tags":["dividends"],"summary":"Get the aggregated dividend history by month or year for the given accounts or investments. The operation delivers aggregated dividends in a tree-like structure, with nodes representing years and months, respectively. Each node holds a list of the IDs of all investments that contributed a dividend payment. Investment IDs are assigned to investment references using the investmentReferenceById hash also included in the result. Note that the attribute 'month' starts with zero for January, up to 11 for December.","description":"","operationId":"dividendHistory","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve the dividend history for the given account(s); limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve the dividend history for the given Investment(s). This parameter is ignored if account IDs are given. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"cutoffDate","in":"query","description":"Only include dividends with payment date after the given cutoff; format is yyyy-MM-dd (US Format).","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendHistoryTree"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other accounts."}}},"/v1/dividends/predict":{"get":{"tags":["dividends"],"summary":"Project future dividend payments for the given accounts or investments. The operation delivers aggregated dividends in a tree-like structure, with nodes representing years and months, respectively. Each node holds a list of the IDs of all investments that contributed a dividend payment. Investment IDs are assigned to investment references using the investmentReferenceById hash also included in the result. Note that the attribute 'month' starts with zero for January, up to 11 for December.","description":"","operationId":"dividendPrediction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve the dividend history for the given account(s). Either accountIds or InvestmentIds must be provided. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve the dividend history for the given Investment(s). Either accountIds or InvestmentIds must be provided.This parameter is ignored if account IDs are given. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"predictYears","in":"query","description":"Predict dividends for N years into the future, starting with the current year. So if the current year is 2018 and projectYears is 2, we will receive projections for 2018 and 2019.","required":true,"type":"integer"},{"name":"yearlyPortfolioIncrease","in":"query","description":"Include a yearly portfolio increase (in percent) into the projection. Projected dividends will then also grow with the portfolio valuation. The value is given in percent, with 1 = 100%. No increase is added if this parameter is not given.","required":false,"type":"integer"},{"name":"dividendPerShare","in":"query","description":"Calculate the dividend per share if true. If false, the dividend amount will include the respective number of lots. Default is false.","required":false,"type":"boolean"},{"name":"inAccountCurrency","in":"query","description":"Return the dividend estimate in account currency (currently fixed to EUR) if true; in investment currency if false. Note that in case we query values for more then one investment, this will automatically be forced to true to avoid currency conversion related errors","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendHistoryTree"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other accounts."}}},"/v1/dividends/timeline":{"get":{"tags":["dividends"],"summary":"Project dividend timeline between given years including historic as well as predicted data. Data for the current year is combined in a smart way, leading to predictions becoming more and more accurate as the years goes on.\n The operation delivers portfolio-wide aggregated dividends in a tree-like structure, with nodes representing years and months, respectively. Each node holds a list of the IDs of all investments that contributed a dividend payment. Investment IDs are assigned to investment references using the investmentReferenceById hash also included in the result.","description":"","operationId":"dividendTimeline","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve the dividend history for the given account(s). Either accountIds or InvestmentIds must be provided. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve the dividend history for the given Investment(s). Either accountIds or InvestmentIds must be provided.This parameter is ignored if account IDs are given. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"startYear","in":"query","description":"Cutoff the timeline at the given year. Default is 2 years back from today. Dividends data for this year will be included.","required":false,"type":"integer"},{"name":"endYear","in":"query","description":"Cutoff the timeline at the given year. Default is 2 years forward from today. Dividends data for this year will be included.","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendHistoryTree"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other accounts."}}},"/v1/dividends/portfolioYield":{"get":{"tags":["dividends"],"summary":"Retrieve the dividend yield for the given account(s).","description":"","operationId":"dividendYield","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve the dividend yield for the given account(s). Limited to 300 investments.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"calculationType","in":"query","description":"The type of calculation to perform. If 'predicted' is given, the dividend yield will be calculated including the dividend predictions for the current year. Default is 'actual'.","required":false,"type":"string","enum":["actual","predicted"]},{"name":"from","in":"query","description":"Only include dividends with payment date after the given cutoff; Default is 5 years back from today; format is yyyy-MM-dd (US Format).","required":false,"type":"string"},{"name":"cagrYears","in":"query","description":"Calculate the CAGR for the given number of years. Default is 5.","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendYieldList"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details"},"404":{"description":"NOT_FOUND: The requested resource was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user"}}},"/v1/dividends/perYearTotal":{"get":{"tags":["dividends"],"summary":"Get aggregated per-year totals of dividends for the given investment. Optionally, estimates for following years will be included.","description":"","operationId":"getDividendsPerYear","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"investmentId","in":"query","description":"Retrieve Dividends for the given investment","required":false,"type":"integer"},{"name":"isin","in":"query","description":"Retrieve Dividends for the given ISIN","required":false,"type":"string"},{"name":"currency","in":"query","description":"This parameter is only used in combination with 'isin'. Convert dividends into the given currency; default is EUR.","required":false,"type":"string"},{"name":"predictNumberOfYears","in":"query","description":"Include a prediction for the given number of years.","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendPerYearList"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details; INVALID_PARAMETER: predictNumberOfYears must be a positive Integer"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments comments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if comments for an ISIN or an investment are held by a public B2B account."}}},"/v1/dividends/calendar":{"get":{"tags":["dividends"],"summary":"Get a dividend calendar / dividend rating for the current year. The calendar consists of a list of all actual and predicted dividend payments. Note that the attribute 'monthOfPayment' starts with zero for January, up to 11 for December.","description":"","operationId":"dividendCalendar","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve the dividend history for the given account(s). Either accountIds or InvestmentIds must be provided. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve the dividend history for the given Investment(s). Either accountIds or InvestmentIds must be provided.This parameter is ignored if account IDs are given. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendCalendarRecordList"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other accounts."}}},"/v1/dividends/{id}":{"get":{"tags":["dividends"],"summary":"Get a list of historic dividends for the given investment. Dividends without a transaction record have not been assigned; dividends with a transaction record were already booked. Use the 'number of lots' attribute of each dividend record to determine, if any according investments were held at dividend payment date.","description":"","operationId":"getDividends","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve Dividends for the given investment","required":true,"type":"integer"},{"name":"taxRate","in":"query","description":"Apply the given tax rate when calculating the dividend amounts; by default, the users standard tax rate is used. Must be something between 0 and 1.","required":false,"type":"number"},{"name":"cutoffDate","in":"query","description":"Only retrieve dividends with payment date after the given cutoff; format is yyyy-MM-dd (US Format).","required":false,"type":"string"},{"name":"splitAdjust","in":"query","description":"Apply splits to dividends; default is false.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendList"}},"400":{"description":"INVALID_PARAMETER: Tax rate must be a positive value between 1 and 0."},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments comments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if comments for the investment are held by a public B2B account."}}},"/v1/dividendMasterDataRecords":{"get":{"tags":["dividendMasterDataRecords"],"summary":"List and search all dividends.","description":"","operationId":"listAndSearchAllDividendMasterDataRecords","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Get dividends with the given ID(s)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Get dividends with the given ISIN(s)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"mandatorPublicId","in":"query","description":"Get dividends with the given mandator scope, default returns only non-scoped dividends","required":false,"type":"string","enum":["public","onvista"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendMasterDataRecordList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters, check error message."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/dividendMasterDataRecords/predictions/refresh":{"put":{"tags":["dividendMasterDataRecords"],"summary":"Refresh all dividend predictions.","description":"","operationId":"refreshDividendPredictions","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Refresh job submitted."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/dividendMasterDataRecords/catalogue/refresh":{"put":{"tags":["dividendMasterDataRecords"],"summary":"Refresh the historic dividend catalogue.","description":"","operationId":"refreshDividendCatalogue","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Refresh job submitted."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/dividendMasterDataRecords/{id}":{"get":{"tags":["dividendMasterDataRecords"],"summary":"Get the dividend with the given ID.","description":"","operationId":"getDividend/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Get the dividend with the given ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendMasterDataRecord"}},"400":{"description":"NOT_FOUND: Record with the given ID was not found."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}},"put":{"tags":["dividendMasterDataRecords"],"summary":"Update the dividend record with the given ID.","description":"","operationId":"updateDividend/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Update the dividend with the given ID","required":true,"type":"string"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateDividendMasterDataRecordParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendMasterDataRecord"}},"400":{"description":"NOT_FOUND: Record with the given ID was not found."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}},"delete":{"tags":["dividendMasterDataRecords"],"summary":"Delete the dividend record with the given ID.","description":"","operationId":"deleteDividend/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Delete the dividend with the given ID","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendMasterDataRecord"}},"400":{"description":"NOT_FOUND: Record with the given ID was not found."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/dividendMasterDataRecords/{id}/refresh":{"get":{"tags":["dividendMasterDataRecords"],"summary":"Refresh the dividend with the given ISIN.","description":"","operationId":"refreshDividend/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Refresh dividends for the given ISIN","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendMasterDataRecordList"}},"400":{"description":"INVALID_PARAMETER: Not a valid ISIN."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/exchangeRates":{"get":{"tags":["exchangeRates"],"summary":"Get an exchange rate","description":"","operationId":"exchangeRates","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"from","in":"query","description":"Convert from currency","required":true,"type":"string"},{"name":"to","in":"query","description":"Convert into this currency","required":true,"type":"string"},{"name":"date","in":"query","description":"Get exchange rate at the given date in format yyyy-MM-dd (e.g. 2017-12-31)","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ExchangeRate"}},"400":{"description":"Invalid parameters. Make sure that currency codes are 3-letter-ISO standard and that the date is in correct format."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: An internal server error occured."}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/newsFeeds":{"get":{"tags":["newsFeeds"],"summary":"Get or search the news feed for an ISIN","description":"","operationId":"newsByIsin","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"isin","in":"query","description":"Retrieve news for the given ISIN.","required":true,"type":"String"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FeedItemList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/newsFeeds/rentabloBlog":{"get":{"tags":["newsFeeds"],"summary":"Read a custom feed defined by the given URL","description":"","operationId":"rentabloBlogFeed","consumes":["application/json"],"produces":["application/json"],"parameters":[],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FeedItemList"}},"400":{"description":"INVALID_PARAMETER: The given URL is invalid or was not provided"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/newsFeeds/{id}":{"get":{"tags":["newsFeeds"],"summary":"Get the news feed for an investment","description":"","operationId":"investmentNews","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve news for the given investment.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FeedItemList"}},"404":{"description":"NOT_FOUND: Investment not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if comments for an investment are held by a public B2B account."}}},"/v1/finApi/clientConfiguration":{"get":{"tags":["finApiClientConfiguration"],"summary":"Get the finAPI client configuration.","description":"","operationId":"getFinApiClientConfiguration","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ClientConfiguration"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires a finAPI admin."}},"put":{"tags":["finApiClientConfiguration"],"summary":"Update the finAPI client configuration","description":"","operationId":"updateFinApiClientConfiguration","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/UpdateClientConfigurationParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ClientConfiguration"}},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires a finAPI admin."}}},"/v1/financialGoals":{"get":{"tags":["financialGoals"],"summary":"Get or search financial goals","description":"","operationId":"listAndSearchAllFinancialGoals","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"IDs of the financial goals to retrieve; will list all financial goals for the current user if none are given","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"isDefault","in":"query","description":"Only retrieve goals with 'isDefault' set to true / false; default is null","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FinancialGoal"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Financial goal with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["financialGoals"],"summary":"Create a financial goal.","description":"","operationId":"createFinancialGoal","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The financial goal parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateFinancialGoalParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FinancialGoal"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/financialGoals/{id}":{"get":{"tags":["financialGoals"],"summary":"Get a financial goal","description":"","operationId":"financialGoals/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the financial goal to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FinancialGoal"}},"404":{"description":"NOT_FOUND: Financial goal with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/funds":{"get":{"tags":["funds"],"summary":"Search funds by name, ISIN or WKN.","description":"","operationId":"listAndSearchAllFunds","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Retrieve funds whose name, ISIN or WKN matches the given search string","required":false,"type":"string"},{"name":"strict","in":"query","description":"Strict mode: require an exact match; only applicable when using the custom search","required":false,"type":"boolean"},{"name":"includeCommissions","in":"query","description":"Include commissions (courtages) if true; default is false.","required":false,"type":"boolean"},{"name":"id","in":"query","description":"Retrieve Funds with the given IDs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"wkn","in":"query","description":"Retrieve Funds with the given WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve Funds with the given ISINs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Limit the search to the given fund type, supported values are MANAGED and ETF","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"withoutCourtage","in":"query","description":"Also include funds not having a courtage record in the result set; default is false","required":false,"type":"boolean"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableFundList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/funds/byIsin/{isin}":{"get":{"tags":["funds"],"summary":"Get the given fund by ISIN","description":"","operationId":"showFundByIsin","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"isin","in":"path","description":"Get the fund with the given ISIN","required":true,"type":"string"},{"name":"includeCommissions","in":"query","description":"Include commissions (courtages) if true; default is false.","required":false,"type":"boolean"},{"name":"includeFundamentals","in":"query","description":"Include fundamental data","required":false,"type":"boolean"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Fund"}},"404":{"description":"NOT_FOUND: Fund with the given ID was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/funds/mostPopular":{"get":{"tags":["funds"],"summary":"Get funds held by the mandators users, sorted by popularity (most popular first).","description":"","operationId":"mostPopular","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"mandatorPublicId","in":"query","description":"Get statistics for the given mandator","required":true,"type":"string"},{"name":"type","in":"query","description":"Filter for the given types, allowed values are '21_fund' and '22_etf'","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableFundList"}},"404":{"description":"NOT_FOUND: Fund with the given ID was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/funds/runFwwImport":{"get":{"tags":["funds"],"operationId":"runFwwImport","produces":["application/json"],"parameters":[],"responses":{"200":{"description":"successful operation","headers":{},"schema":{"type":"object"}}}}},"/v1/funds/{id}":{"get":{"tags":["funds"],"summary":"Get the given fund.","description":"","operationId":"showFund","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Get the fund with the given ID","required":true,"type":"string"},{"name":"includeCommissions","in":"query","description":"Include commissions (courtages) if true; default is false.","required":false,"type":"boolean"},{"name":"includeFundamentals","in":"query","description":"Include fundamental data","required":false,"type":"boolean"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Fund"}},"404":{"description":"NOT_FOUND: Fund with the given ID was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/fundamentals/fundamentals/{id}/statistics":{"get":{"tags":["fundamentals"],"summary":"Retrieve daily price to XXX statistics for the given ISIN. This endpoint requires a PRO\n subscription for mandators supporting subscriptions.","description":"","operationId":"fundamentals/{id}/statistics","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The companies ISIN","required":true,"type":"string"},{"name":"interval","in":"query","description":"Use the given time interval for statistics calculation. Supported values are 'day | week | month | year.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Retrieve data starting from the given date; default value is 5 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Retrieve data up to the given date; default value is now. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StatisticList"}},"400":{"description":"INVALID_PARAMETER: One of the given parameters is invalid, see error details"},"404":{"description":"NOT_FOUND: No data for the given ISIN was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"406":{"description":"A pro subscription is required to access this feature"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/fundamentals/fundamentals/{id}":{"get":{"tags":["fundamentals"],"summary":"Retrieve company information for the given ISIN.","description":"","operationId":"fundamentals/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The companies ISIN","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Security"}},"400":{"description":"INVALID_PARAMETER: One of the given parameters is invalid, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/fundamentals/fullRefresh":{"get":{"tags":["fundamentals"],"summary":"Refresh all master data via the data providers's API. A refresh is executed as a background operation, thus this endpoint will return immediately.","description":"","operationId":"fundamentals/fullRefresh","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"forceFullRefresh","in":"query","description":"Perform a full refresh of daily data instead of the default refresh of the last 365 days only.\n Default is false.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Batch updated submitted"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires a fully authenticated master data administrator."}}},"/v1/fundamentals/fundamentals/{id}/financials":{"get":{"tags":["fundamentals"],"summary":"Retrieve yearly company financials for the given ISIN. . This endpoint requires a PRO\n subscription for mandators supporting subscriptions.","description":"","operationId":"fundamentals/{id}/financials","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The companies ISIN","required":true,"type":"string"},{"name":"from","in":"query","description":"Retrieve financials starting from the given year","required":true,"type":"integer"},{"name":"to","in":"query","description":"Retrieve financials up to the given year. Note that due to delayed reporting, there might\n be no available date for the current year.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FundamentalList"}},"400":{"description":"INVALID_PARAMETER: One of the given parameters is invalid, see error details"},"404":{"description":"NOT_FOUND: No data for the given ISIN was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"406":{"description":"A pro subscription is required to access this feature"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/fundamentals/fundamentals/{id}/marketCapitalization":{"get":{"tags":["fundamentals"],"summary":"Retrieve the market capitalization based on the current quote. Optionally, convert to a given\n currency.","description":"","operationId":"fundamentals/{id}/marketCapitalization","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The companies ISIN","required":true,"type":"string"},{"name":"tickerSymbol","in":"query","description":"Use the given ticker symbol to derive todays quote.","required":true,"type":"string"},{"name":"quoteProvider","in":"query","description":"Use the given quote provider to derive todays quote","required":true,"type":"string"},{"name":"convertToCurrency","in":"query","description":"Convert the market capitalization to the given currency; use the quote currency as default.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/MarketCapitalization"}},"400":{"description":"INVALID_PARAMETER: One of the given parameters is invalid, see error details"},"404":{"description":"NOT_FOUND: No data for the given ISIN was found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"406":{"description":"A pro subscription is required to access this feature"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/fundamentals/{id}/refresh":{"get":{"tags":["fundamentals"],"summary":"Refresh master for the given ISIN.","description":"","operationId":"fundamentals/{id}/refresh","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Perform a refresh of fundamental data for the given ISIN.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Batch updated submitted"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires a fully authenticated master data administrator."}}},"/v1/historicQuotes/intraday":{"get":{"tags":["historicQuotes"],"summary":"Retrieve intraday quotes for the given ticker symbol by querying an external web-service.","description":"","operationId":"intraday","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"tickerSymbol","in":"query","description":"Retrieve historic quotes for this ticker symbol","required":true,"type":"string"},{"name":"quoteProvider","in":"query","description":"The according quote provider; currently 'crypto' and 'teletrader' support intraday quotes.","required":true,"type":"string"},{"name":"period","in":"query","description":"The period for quote retrieval, supported values are:
\n intraday1: minutely quotes
\n intraday5: 5-minute quotes
\n intraday10: 10-minute quotes
\n intraday15: 15-minute quotes
\n intraday60: 60-minute quotes
\n The default value is intraday1 (minutely) quotes. Not that the interval is automatically determined\n for crypto currencies due to third party API restrictions.","required":true,"type":"string"},{"name":"from","in":"query","description":"Retrieve intraday quotes starting from the given date / time. This must be a valid\n ISO-8601 date string. Examples are 2019-01-01 or 2009-01-01T12:00:00+01:0","required":true,"type":"string"},{"name":"to","in":"query","description":"Retrieve intraday quotes until the given date / time. This must be a valid\n ISO-8601 date string. Examples are 2019-01-01 or 2009-01-01T12:00:00+01:0","required":true,"type":"string"},{"name":"quoteCurrency","in":"query","description":"The historic quote currency - the used web-service for historic quote lookup does not provide currency information","required":false,"type":"string"},{"name":"convertToCurrency","in":"query","description":"Convert all quotes to the given currency; currency must be given in 3-letter ISO code","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/QuoteBarList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/historicQuotes":{"get":{"tags":["historicQuotes"],"summary":"DEPRECATED. Use /v1/historicQuotes/{quoteProvider}/{tickerSymbol} instead.\n Get or search historic quotes","description":"","operationId":"historicQuotes","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve historic quotes for all investments within the given accounts. Limited to 50 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve historic quotes for the given investments. Limited to 50 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"watchlistEntryId","in":"query","description":"Retrieve historic quotes for the given watchlist entries. Limited to 50 entries.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"tickerSymbol","in":"query","description":"Retrieve historic quotes for the given ticker symbols. Limited to 50 tickers.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"includeIndexes","in":"query","description":"Include quotes for a pre-defined set of stock indexes; this is nice for comparisons","required":false,"type":"boolean"},{"name":"includeHistoricPositions","in":"query","description":"Include quotes for historic depot positions. This parameter is only used if accountId(s) are specified as well. In this context, historic positions are all investments having a number of lots of zero. Default is false.","required":false,"type":"boolean"},{"name":"convertToCurrency","in":"query","description":"Convert all quotes to the given currency; currency must be given in 3-letter ISO code","required":false,"type":"string"},{"name":"from","in":"query","description":"Retrieve quotes starting from the given date; max is 10 years. Default value is 6 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Retrieve quotes upt to the given date. Default value is today. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"interval","in":"query","description":"Restrict quote retrieval to the given interval. Default is to ignore this parameter.","required":false,"type":"string","enum":["day","week","month","year"]},{"name":"intervalPosition","in":"query","description":"Defines which value within the specified interval is used. Default value is current.\n Ignored if no interval is given.\n The position is defined as current: current day of week / month / year; \n first: first day of week / month / year; last: last day of week / month / year or\n the current day if the last day would fall after today.","required":false,"type":"string","enum":["current","first","last"]},{"name":"inPercentFrom","in":"query","description":"Do not return quotes, but instead return the percent change relative to the first quote\n / the previous quote. The following calculation methods are supported.\n 'first' uses the earliest quote as reference and thus calculates first-to-interval changes.\n 'previous' uses the previous quote as reference and thus calculates interval-to-interval changes.\n 'currentToNow' uses the latest quote as reference and thus calculates interval-to-now changes.","required":false,"type":"string","enum":["first","previous","currentToNow"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/HistoricQuoteList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}},"post":{"tags":["historicQuotes"],"summary":"Add or overwrite historic quotes manually. This operation should only be used if no automatic quote assignment can be done; i.e. no quotes data is available for the given investment.","description":"","operationId":"addOrUpdateHistoricQuotes","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateHistoricQuoteParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Historic quotes were added or updated."},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["historicQuotes"],"summary":"Refresh the given historic quote.","description":"","operationId":"refreshHistoricQuote","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"A tickerSymbol / quoteProvider pair uniquely identifying the quote to refresh.","required":true,"schema":{"$ref":"#/definitions/TickerSymbolWithQuoteProvider"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Historic quotes were refreshed; note that the refresh job might run in the background."},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/historicQuotes/products":{"post":{"tags":["historicQuotes"],"summary":"Note: this is a Server-to-Server operation only! Add or overwrite historic quotes for an\n investment product manually. This operation should be used by other backends to maintain quote\n master data.","description":"","operationId":"addOrUpdateProductQuotes","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/AddOrUpdateProductQuoteParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Historic quotes were added or updated."},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SERVER_TO_SERVER":"Requires the X-SaaS-Authorization header to be set with a Bearer token."}}},"/v1/historicQuotes/{quoteProvider}/{tickerSymbol}":{"get":{"tags":["historicQuotes"],"summary":"Retrieve a historic quote with risk and yield statistics for a given ticker symbol","description":"","operationId":"showHistoricQuote","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","required":false,"schema":{"type":"string"}},{"in":"body","name":"body","required":false,"schema":{"type":"string"}},{"name":"quoteProvider","in":"path","description":"The according quote provider. The quote provider will be delivered when searching a security.","required":true,"type":"string"},{"name":"tickerSymbol","in":"path","description":"The ticker symbol of the investment to retrieve the risk and yield statistics for.","required":true,"type":"string"},{"name":"convertToCurrency","in":"query","description":"Convert all quotes to the given currency; currency must be given in 3-letter ISO code","required":false,"type":"string"},{"name":"userDefinedOnly","in":"query","description":"Only return user defined quotes if true; thereby skipping interpolated quotes. Returns all quotes including the interpolated ones if false. This flag obviously only has an effect if these quotes are user defined, i.e. not provided by a quote provider.\n Default is false.","required":false,"type":"boolean"},{"name":"from","in":"query","description":"Retrieve quotes starting from the given date; max is 10 years. Default value is 6 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Retrieve quotes until the the given date; default: today. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"interval","in":"query","description":"Restrict quote retrieval to the given interval. Default is to ignore this parameter.","required":false,"type":"string","enum":["week","month","year"]},{"name":"intervalPosition","in":"query","description":"Defines which value within the specified interval is used. Default value is current.\n Ignored if no interval is given.\n The position is defined as current: current day of week / month / year; \n first: first day of week / month / year; last: last day of week / month / year or\n the current day if the last day would fall after today.","required":false,"type":"string","enum":["current","first","last"]},{"name":"inPercentFrom","in":"query","description":"Do not return quotes, but instead return the percent change relative to the first quote\n / the previous quote. The following calculation methods are supported.\n 'first' uses the earliest quote as reference and thus calculates first-to-interval changes.\n 'previous' uses the previous quote as reference and thus calculates interval-to-interval changes.\n 'currentToNow' uses the latest quote as reference and thus calculates interval-to-now changes.","required":false,"type":"string","enum":["first","previous","currentToNow"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/HistoricQuoteWithRiskYieldStatistics"}},"400":{"description":"INVALID_PARAMETER: One of the given parameters is invalid, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/historicQuotes/lookup":{"get":{"tags":["historicQuotes"],"summary":"DEPRECATED. Use /v1/historicQuotes/{quoteProvider}/{tickerSymbol} instead.\n Lookup historic quotes for the given ticker symbol by querying an external web-service.","description":"","operationId":"lookup","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"tickerSymbol","in":"query","description":"Retrieve historic quotes for this ticker symbol","required":true,"type":"string"},{"name":"quoteProvider","in":"query","description":"The according quote provider","required":true,"type":"string"},{"name":"includeIndexes","in":"query","description":"Include quotes for a pre-defined set of stock indexes; this is nice for comparisons","required":false,"type":"boolean"},{"name":"quoteCurrency","in":"query","description":"The historic quote currency - the used web-service for historic quote lookup does not provide currency information","required":false,"type":"string"},{"name":"convertToCurrency","in":"query","description":"Convert all quotes to the given currency; currency must be given in 3-letter ISO code","required":false,"type":"string"},{"name":"from","in":"query","description":"Retrieve quotes starting from the given date; max is 10 years. Default value is 6 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Retrieve quotes until the the given date; default: today. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"interval","in":"query","description":"Restrict quote retrieval to the given interval. Default is to ignore this parameter.","required":false,"type":"string","enum":["week","month","year"]},{"name":"intervalPosition","in":"query","description":"Defines which value within the specified interval is used. Default value is current.\n Ignored if no interval is given.\n The position is defined as current: current day of week / month / year; \n first: first day of week / month / year; last: last day of week / month / year or\n the current day if the last day would fall after today.","required":false,"type":"string","enum":["current","first","last"]},{"name":"inPercentFrom","in":"query","description":"Do not return quotes, but instead return the percent change relative to the first quote\n / the previous quote. The following calculation methods are supported.\n 'first' uses the earliest quote as reference and thus calculates first-to-interval changes.\n 'previous' uses the previous quote as reference and thus calculates interval-to-interval changes.\n 'currentToNow' uses the latest quote as reference and thus calculates interval-to-now changes.","required":false,"type":"string","enum":["first","previous","currentToNow"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/HistoricQuoteListWithRiskYieldStatistics"}},"400":{"description":"INVALID_PARAMETER: One of the given parameters is invalid, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/users/{id}/impersonate":{"post":{"tags":["users"],"summary":"Impersonate as a user","description":"","operationId":"users/{id}/impersonate","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the user to impersonate","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccessToken"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: User with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user with role ROLE_IMPERSONATE."}}},"/v1/industries":{"get":{"tags":["industries"],"summary":"List or search all industries","description":"","operationId":"listAndSearchAllIndustries","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"germanName","in":"query","description":"German name; will perform a like search","required":false,"type":"string"},{"name":"name","in":"query","description":"Default (English) name; will perform a like search","required":false,"type":"string"},{"name":"gicsId","in":"query","description":"GICS (Global Industry Classification Standard) ID","required":false,"type":"string"},{"name":"type","in":"query","description":"Only return regions with the given type; supported are sector, industryGroup, industry, subIndustry","required":true,"type":"string"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableIndustryList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/industries/{id}":{"get":{"tags":["industries"],"summary":"Get an industry by ID","description":"","operationId":"industries/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the industry to retrieve","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Region"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"Industry with the given ID was not found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/inflationRates/{id}":{"get":{"tags":["inflationRates"],"summary":"Get inflation rates for the given country","description":"","operationId":"getInflationRates","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Get inflation rates for the given country (three letter ISO code).","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Quote"}},"404":{"description":"NOT_FOUND: The given countries ISO code is not valid or the country is not supported"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/insurances":{"get":{"tags":["insurances"],"summary":"Get or search a list of Insurances","description":"","operationId":"listAndSearchAllInsurances","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve Insurances with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve Insurances for the given Accounts (insurance folders)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"categoryId","in":"query","description":"Retrieve Insurances for the given categories","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"subCategoryId","in":"query","description":"Retrieve Insurances for the given sub-categories","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"providerId","in":"query","description":"Retrieve Insurances for the given providers","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"status","in":"query","description":"Retrieve Insurances having the given status, one of detected, active, expired, no_contribution, cancelled, ignored.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"contractHolder","in":"query","description":"Retrieve Insurances matching the contract holders name (like search)","required":false,"type":"string"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableInsuranceList"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["insurances"],"summary":"Create a new insurance record.","description":"","operationId":"createInsurance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInsuranceParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Insurance"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["insurances"],"summary":"Batch update the given insurances.","description":"","operationId":"batchUpdateInsurances","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInsuranceParamsList"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableInsuranceList"}},"404":{"description":"NOT_FOUND: Insurance with the given ID was not found or insufficient privileges. Note that for a batch update, the ID must be supplied with each createOrUpdateInsuranceParameters instance."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/insurances/{id}":{"get":{"tags":["insurances"],"summary":"Get an Insurance","description":"","operationId":"insurances/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the insurance to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Insurance"}},"404":{"description":"NOT_FOUND: Insurance with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["insurances"],"summary":"Update the insurance with the given ID.","description":"","operationId":"updateInsurance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInsuranceParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Insurance"}},"404":{"description":"NOT_FOUND: Insurance with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["insurances"],"summary":"Delete an Insurance, including all of its child entities.","description":"","operationId":"deleteInsurance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the insurance to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Entity deleted"},"404":{"description":"NOT_FOUND: Insurance with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/insurances/merge":{"put":{"tags":["insurances"],"summary":"Merge two insurances.","description":"","operationId":"mergeInsurances","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/MergeInsuranceParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Insurance"}},"404":{"description":"NOT_FOUND: One or both of the given insurances were not found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/insuranceCategories":{"get":{"tags":["insuranceCategories"],"summary":"Get or search a list of Insurance categories","description":"","operationId":"listAndSearchAllInsuranceCategories","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve Insurance categories with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Retrieve Insurance categories matching the given types; allowed values are category, subCategory.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"name","in":"query","description":"Perform a wildcard search on the category name","required":false,"type":"string"},{"name":"parentId","in":"query","description":"Retrieve sub categories for the given parent IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableInsuranceCategoryList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/insuranceCategories/{id}":{"get":{"tags":["insuranceCategories"],"summary":"Get an Insurance Category","description":"","operationId":"insuranceCategories/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the insurance category to retrieve","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InsuranceCategory"}},"404":{"description":"NOT_FOUND: Insurance category with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/insuranceProviders":{"get":{"tags":["insuranceProviders"],"summary":"Create an Insurance Provider","description":"","operationId":"createInsuranceProvider","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInsuranceProviderParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InsuranceProvider"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_INSURANCE_ADMIN":"Requires an insurance administrator."}}},"/v1/insuranceProviders/{id}":{"get":{"tags":["insuranceProviders"],"summary":"Mark an Insurance Provider as delted","description":"","operationId":"deleteInsuranceProvider","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the insurance provider to delete","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Insurance provider marked as deleted"},"404":{"description":"NOT_FOUND: Insurance Provider with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_INSURANCE_ADMIN":"Requires an insurance administrator."}}},"/v1/insuranceProviderSpecificContractIdPatterns":{"get":{"tags":["insuranceProviderSpecificContractIdPatterns"],"summary":"Create an Insurance Provider specific pattern","description":"","operationId":"createInsuranceProviderSpecificContractIdPattern","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInsuranceProviderSpecificContractIdPatternParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InsuranceProviderSpecificContractIdPattern"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_INSURANCE_ADMIN":"Requires an insurance administrator."}}},"/v1/insuranceProviderSpecificContractIdPatterns/{id}":{"get":{"tags":["insuranceProviderSpecificContractIdPatterns"],"summary":"Delete an Insurance Provider specific pattern","description":"","operationId":"deleteInsuranceProviderSpecificContractIdPattern","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the pattern to delete","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Pattern deleted"},"404":{"description":"NOT_FOUND: Pattern with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_INSURANCE_ADMIN":"Requires an insurance administrator."}}},"/v1/banks/interfaceSelectionOptions/{id}":{"get":{"tags":["banks"],"summary":"Get a bank interface selection option by the given ID.","description":"","operationId":"interfaceSelectionOption","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the bank interface selection option.","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InterfaceSelectionOption"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}},"put":{"tags":["banks"],"summary":"Update the given bank interface selection option","description":"","operationId":"updateInterfaceSelectionOption","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the bank interface selection option to update.","required":true,"type":"integer"},{"in":"body","name":"body","description":"The transaction parameters","required":true,"schema":{"$ref":"#/definitions/UpdateInterfaceSelectionOptionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InterfaceSelectionOption"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters, check error message."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}},"delete":{"tags":["banks"],"summary":"Delete the given bank interface selection option","description":"","operationId":"deleteBankInterfaceSelectionOption","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the option to delete","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Option deleted successfully"},"404":{"description":"NOT_FOUND: Option with the given ID was not found"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/banks/interfaceSelectionOptions":{"get":{"tags":["banks"],"summary":"List and filter bank interface selection options","description":"","operationId":"interfaceSelectionOptions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"bicGroup","in":"query","description":"Get interface selection options for the given BIC groups; default: all","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InterfaceSelectionOptionList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}},"post":{"tags":["banks"],"summary":"Create a bank interface selection option","description":"","operationId":"createInterfaceSelectionOption","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The transaction parameters","required":true,"schema":{"$ref":"#/definitions/CreateInterfaceSelectionOptionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InterfaceSelectionOption"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters, check error message."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires an authenticated master data administrator."}}},"/v1/internalTransactions":{"get":{"tags":["internalTransactions"],"summary":"Get or search a list of internal transactions","description":"","operationId":"listAndSearchAllInternalTransactions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve the given internal transactions","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"billingCycleId","in":"query","description":"Retrieve the internal transactions for the given billing cycles","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"status","in":"query","description":"Filter by the given status(es)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"executedAfter","in":"query","description":"Only retrieve transactions with executed at date equal or after the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"executedBefore","in":"query","description":"Only retrieve transactions with executed at date equal or before the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InternalTransactionList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters given, see error details."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}}},"/v1/internalTransactions/batch/{id}":{"get":{"tags":["internalTransactions"],"summary":"Get the XML for a transaction batch","description":"","operationId":"getBatchTransferXml","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Billing cycle ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"401":{"description":"PASSWORD_REQUIRED: You must log in to perform this action (a valid bearer token is required)"},"404":{"description":"NOT_FOUND: Billing cycle not found or not transactions attached to billing cycle"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}},"post":{"tags":["internalTransactions"],"summary":"Mark the entire transaction batch as executed","description":"","operationId":"markBatchTransferAsExecuted","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Mark the entire batch of transactions for the given billing cycle as executed","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InternalTransactionList"}},"401":{"description":"PASSWORD_REQUIRED: You must log in to perform this action (a valid bearer token is required)"},"404":{"description":"NOT_FOUND: Billing cycle not found or not transactions attached to billing cycle"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/internalTransactions/{id}":{"get":{"tags":["internalTransactions"],"summary":"Get the internal transaction with the given ID","description":"","operationId":"internalTransactions/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the given internal transaction","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InternalTransaction"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"NOT_FOUND: Internal transaction with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}},"put":{"tags":["internalTransactions"],"summary":"Update the internal transaction with the given ID","description":"","operationId":"updateInternalTransaction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Update the given internal transaction","required":true,"type":"integer"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/UpdateInternalTransactionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InternalTransaction"}},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"404":{"description":"NOT_FOUND: Internal transaction with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/investments/gainersAndLosers":{"get":{"tags":["investments"],"summary":"Get gainers or losers (by changePercentToday)","description":"","operationId":"gainersAndLosers","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve Investments for the given Accounts; use all investments if not provided","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"mode","in":"query","description":"The mode to use, either 'gainers' or 'losers'","required":true,"type":"string","enum":["gainers","losers"]},{"name":"max","in":"query","description":"Limit the result to max occurrences, default is 3","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableInvestmentList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"404":{"description":"NOT_FOUND: No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments."}}},"/v1/investments/{id}":{"get":{"tags":["investments"],"summary":"Get an Investment","description":"","operationId":"investments/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to retrieve","required":true,"type":"integer"},{"name":"quoteQuality","in":"query","description":"A quality setting for quote data. Better quality may lead to slower response times.\n Default is PERFORMANCE. The available option are:\n PERFORMANCE: use a short-time caching layer for optimal response times\n OPTIMAL: request real-time quotes across available stock exchanges and choose the most recent\n quote. This requires a lookup against the quote data provider for each request and might\n does lead to slower response times; depending on your quote provider performance. This\n setting is currently only available for quote provider ovfs.","required":false,"type":"string","enum":["PERFORMANCE","OPTIMAL"]},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Investment"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"CURRENCY_MISMATCH: Incompatible quote currency given; UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}},"put":{"tags":["investments"],"summary":"Save the changes to an investment.","description":"","operationId":"editInvestment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInvestmentParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Investment"}},"404":{"description":"Investment was not found our you do not have sufficient privileges"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: A domain validation error occurred, please refer to error description"},"500":{"description":"UNEXPECTED_ERROR: An unexpected error occurred"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["investments"],"summary":"Delete an Investment","description":"","operationId":"deleteInvestment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to delete. This will also delete all transaction assigned to this investment.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Entity deleted"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"DATA_INTEGRITY_ERROR: Could not delete; please contact support. UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/investments/transfer":{"put":{"tags":["investments"],"summary":"Transfer a set of investments from its original depot to the given one. This typically mirrors the business\n case 'depot transfer' (Depotwechsel) in which the customer moves his assets from one bank to another.\n The investments will be booked-out and booked-in into the given account.","description":"","operationId":"investment/transfer","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The batch transfer params","required":true,"schema":{"$ref":"#/definitions/InvestmentBatchTransferParamsList"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"All investments transferred."},"400":{"description":"INVALID_PARAMETER: Invalid request parameters, see error details."},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/investments/{id}/privateNotes":{"get":{"tags":["investments"],"summary":"Get private notes for the given an Investment","description":"","operationId":"getPrivateNotes","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Comment"}},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["investments"],"summary":"Update private notes (a user-defined private comment) for the given Investment","description":"","operationId":"updatePrivateNotes","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment attach the private comment to","required":true,"type":"integer"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateCommentParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Comment"}},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/investments":{"get":{"tags":["investments"],"summary":"Get or search a list of Investments","description":"","operationId":"listAndSearchAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve Investments with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve Investments for the given Accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"wkn","in":"query","description":"Retrieve Investments with the given WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve Investments with the given ISINs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isinOrWkn","in":"query","description":"Retrieve Investments with the given ISINs or WKNs.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"tickerSymbol","in":"query","description":"Retrieve Investments with the given ticker symbols","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"name","in":"query","description":"Retrieve Investments matching the given name (like search)","required":false,"type":"string"},{"name":"currency","in":"query","description":"Retrieve Investments with the given currencies (3-letter ISO code)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"industryId","in":"query","description":"Retrieve Investments belonging to the given industries (exact match only)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"regionId","in":"query","description":"Retrieve Investments belonging to the given regions (exact match only)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"subCategoryId","in":"query","description":"Retrieve investments having the given sub-category ID","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"includeHistoric","in":"query","description":"Include historic Investments (those which were sold and are now not part of the depot) if true. Default values if false.","required":false,"type":"boolean"},{"name":"positiveAmountOrLastTransactionAfter","in":"query","description":"Retrieve Investments having a positive number of lots (they are still in our depot) OR investments that were entirely sold after the given date; date format is yyyy-MM-dd (US Format) This is useful to cover use cases like 'I would like to add a dividend to an investment I sold one month ago.","required":false,"type":"string"},{"name":"quoteQuality","in":"query","description":"A quality setting for quote data. Better quality may lead to slower response times.\n Default is PERFORMANCE. The available option are:\n PERFORMANCE: use a short-time caching layer for optimal response times\n OPTIMAL: request real-time quotes across available stock exchanges and choose the most recent\n quote. This requires a lookup against the quote data provider for each request and might\n does lead to slower response times; depending on your quote provider performance. This\n setting is currently only available for quote provider ovfs.","required":false,"type":"string","enum":["PERFORMANCE","OPTIMAL"]},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableInvestmentList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"CURRENCY_MISMATCH: Incompatible quote currency given; UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/investments/regionAndIndustryClassification":{"get":{"tags":["investments"],"summary":"Retrieve the proposed region and industry classification (if any).","description":"","operationId":"regionAndIndustryClassification","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Provide the ID if the investments exists and a user may have changed the default classification. In this case the result will include the already taken classification if present, or the recommended classification if not assiged previously.","required":false,"type":"string"},{"name":"isin","in":"query","description":"Region and industry classification is based on the given ISIN.","required":true,"type":"string"},{"name":"type","in":"query","description":"Region and industry classification may depend on the investment type. The parameter must match the values defined in Investment.TYPE.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RegionAndIndustryClassification"}},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/investments/performance":{"get":{"tags":["investments"],"summary":"Get the time-weighted performance for a set of investments. Please not that this method is optimized for fast batch use cases and thus does approximate the performance calculation by simply using 'currentValue / previousValue + cashFlow'. Due to cash-flow adjustment, it may produce slightly different results than a performance calculation that considers every single day.","description":"","operationId":"batchInvestmentPerformance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve performance for investments with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"depotId","in":"query","description":"Retrieve performance of investments for the given depots; only active investments with a number of lots greater than zero will be considered. This parameter takes precedence over the id parameter if given.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"A date in format yyyy-MM-dd. Start performance calculation at the given date. Default is 6 years ago.","required":false,"type":"string"},{"name":"to","in":"query","description":"A date in format yyyy-MM-dd. End performance calculation at the given date. Default is today.","required":false,"type":"string"},{"name":"inAccountCurrency","in":"query","description":"Should we keep the investment currency or convert to account currency; default is true what will convert all responses to EUR","required":false,"type":"boolean"},{"name":"includeExpenses","in":"query","description":"Should we include tax and commission in the calculation; default is true","required":false,"type":"boolean"},{"name":"includeDividends","in":"query","description":"Should we include dividends in the calculation; default is false","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BatchSingleInvestmentTwror"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"404":{"description":"NOT_FOUND: No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/investments/{id}/transfer":{"put":{"tags":["investments"],"summary":"Transfer the given investment from its original depot to the given one. This typically mirrors the business\n case 'depot transfer' (Depotwechsel) in which the customer moves his assets from one bank to another.\n The investment will be booked-out and booked-in into the given account.","description":"","operationId":"investment/{id}/transfer","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to transfer","required":true,"type":"integer"},{"in":"body","name":"body","description":"The transfer params","required":true,"schema":{"$ref":"#/definitions/InvestmentTransferParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Investment"}},"400":{"description":"INVALID_PARAMETER: Invalid request parameters, see error details."},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bankConnections/logging/{userId}":{"get":{"tags":["bankConnections"],"summary":"Get a bank connection saved logs","description":"","operationId":"getUserBankConnectionEvents","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"userId","in":"path","description":"ID of the user; only users for your mandator may be accessed.","required":true,"type":"integer"},{"name":"multibankingProvider","in":"query","description":"Filter results by the given multi-banking providers; default: no filter","required":false,"type":"array","items":{"type":"string","enum":["WEALTH_API","FIN_API","NETFONDS"]},"collectionFormat":"multi"},{"name":"startDate","in":"query","description":"A date in format yyyy-MM-dd (US Format). \n Only retrieve logs from the given date onwards. \n Default is 14 days from today","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BankConnectionLEventWrapper"}},"404":{"description":"NOT_FOUND: User with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_BANKING_API_LOGS_VIEWER":"Requires an authenticated user with banking api viewer permission.","ROLE_CROSS_MANDATOR_BANKING_API_LOGS_VIEWER":"wealthAPI internal - allows to see logs across mandators for support purposes."}}},"/v1/mailing/contactUser/{id}":{"post":{"tags":["mailing"],"summary":"Send out a contact email to a friend. Requires captcha validation.","description":"","operationId":"contactUser/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the user we want to contact.","required":true,"type":"integer"},{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/EmailParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Email sent"},"400":{"description":"MISSING_PARAMETER: You did not specify mandatory parameters, see error details; INVALID_PARAMETER: Invalid parameters, see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/mailing/recommendUs":{"post":{"tags":["mailing"],"summary":"Send a 'recommend us' email to the given email address. Requires captcha validation.","description":"","operationId":"recommendUs","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/EmailParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Email sent"},"400":{"description":"MISSING_PARAMETER: You did not specify mandatory parameters, see error details; INVALID_PARAMETER: Invalid parameters, see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/mailing/contactUs":{"post":{"tags":["mailing"],"summary":"Send a contact email to Rentablo. This endpoint requires a valid captcha challenge in attribute challengeToken. Users will be added to the B2B mailing list if they requested so.","description":"","operationId":"contactUs","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The contact us params","required":true,"schema":{"$ref":"#/definitions/ContactUsParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Email sent"},"400":{"description":"MISSING_PARAMETER: You did not specify mandatory parameters, see error details; INVALID_PARAMETER: Invalid parameters, see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/mailing/recommendCashback":{"post":{"tags":["mailing"],"summary":"Send a Cashback recommendation Email to a friend. Requires captcha validation.","description":"","operationId":"recommendCashback","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/EmailParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Email sent"},"400":{"description":"MISSING_PARAMETER: You did not specify mandatory parameters, see error details; INVALID_PARAMETER: Invalid parameters, see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/estimateImplicitNumberOfLots":{"get":{"tags":["bookings"],"summary":"DEPRECATED: Estimate the number of lots moved in a transaction for managed depots. The special case here is, that we do NOT know the depot composition. The managing entity (usually a robo advisor) does not deliver any information on the number of lots. This means we need to work with 'virtual' lots. The number of the virtual lots is not important; we rather care about the correct relation of the lots to each other. The respective ratio is calculated using the depot valuation provided; in respect to transactions executed previously.","description":"","operationId":"estimateImplicitNumberOfLots","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"investmentId","in":"query","description":"Include transactions for the given investments into the estimation; if present. If not given, a new investment is assumed.","required":false,"type":"integer"},{"name":"type","in":"query","description":"The transaction type; allowed values are buy and sell.","required":true,"type":"string"},{"name":"amount","in":"query","description":"The unsigned amount of cash moved in the transaction.","required":true,"type":"number"},{"name":"depotValuation","in":"query","description":"The depot valuation AFTER executing the transaction. This value is only required if we are adding transactions to an existing investment. Otherwise it equals the amount.","required":true,"type":"number"},{"name":"date","in":"query","description":"The transaction date; format is yyyy-MM-dd (US Format).","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"number"}},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/managedDepot":{"post":{"tags":["bookings"],"summary":"Create a booking for a managed depot.","description":"","operationId":"createManagedDepotBooking","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateManagedDepotParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account, or one of the investments could not be found. For investments, this can only happen if an ID attributes is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The booking is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["bookings"],"summary":"Update a booking for a managed depot.","description":"","operationId":"updateManagedDepotBooking","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateManagedDepotParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account, or one of the investments could not be found. For investments, this can only happen if an ID attributes is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The booking is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/bookings/managedDepot/checkConsistencyStatus":{"post":{"tags":["bookings"],"summary":"Validate a managed depot booking.","description":"","operationId":"validateManagedDepotBooking","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CarveOutParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TransactionValidationErrorList"}},"400":{"description":"Invalid body or request parameters, see error details"},"404":{"description":"SC_NOT_FOUND: Given account or one of the investments could not be found. For investments, this can only happen if an ID attribute is provided."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction is not valid (e.g. it would lead to a negative number of lots."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/mandators/{id}":{"get":{"tags":["mandators"],"summary":"Get a mandator","description":"","operationId":"mandators/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the mandator to retrieve","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Mandator"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"Mandator with the given ID was not found"}},"x-roles":{"ROLE_MANDATOR_VIEWER":"Requires an authenticated mandator viewer.","ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator."}},"put":{"tags":["mandators"],"summary":"Update a mandator.","description":"","operationId":"updateMandator","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the mandator.","required":true,"type":"integer"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateMandatorParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Mandator"}},"404":{"description":"NOT_FOUND: Mandator with the given ID was not found"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"VALIDATION_ERROR: The given entity is not valid. UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator."}}},"/v1/mandators":{"get":{"tags":["mandators"],"summary":"List all configured mandators","description":"","operationId":"listMandators","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/MandatorList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_VIEWER":"Requires an authenticated mandator viewer.","ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator."}},"post":{"tags":["mandators"],"summary":"Create a mandator.","description":"","operationId":"createMandator","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateMandatorParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Mandator"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"VALIDATION_ERROR: The given entity is not valid. UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator."}}},"/v1/mandatorConfigurations/{id}":{"get":{"tags":["mandatorConfigurations"],"summary":"Get the configuration for the given mandator","description":"","operationId":"getMandatorConfiguration","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the mandator","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/MandatorConfiguration"}},"404":{"description":"NOT_FOUND: Mandator with the given ID was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator user administrator."}},"put":{"tags":["mandatorConfigurations"],"summary":"Update the configuration for the given mandator.","description":"","operationId":"updateMandatorConfiguration","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the mandator.","required":true,"type":"integer"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateMandatorConfigurationParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/MandatorConfiguration"}},"404":{"description":"NOT_FOUND: Mandator with the given ID was not found"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"VALIDATION_ERROR: The given entity is not valid. UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator."}}},"/v1/mandators/{id}/invoices":{"get":{"tags":["mandatorInvoices"],"summary":"Get an invoice / invoicing data for the given month","description":"","operationId":"mandators/{id}/invoicing","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the mandator to retrieve invoicing data for","required":true,"type":"integer"},{"name":"month","in":"query","description":"The month to invoice in format 'YYYY-MM'; if not given the current month is used","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/MandatorInvoice"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"Mandator with the given ID was not found"}},"x-roles":{"ROLE_SAAS_ACCOUNTING":"Requires an authenticated mandator administrator."}}},"/v1/masterData/fundClassification/autoCurate":{"post":{"tags":["masterData"],"summary":"Auto curate fund classifications.","description":"","operationId":"autoCurateFundClassification","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StringList"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MASTER_DATA_ADMIN":"Requires a fully authenticated master data administrator."}}},"/v1/masterData":{"get":{"tags":["masterData"],"summary":"Retrieve a catalogue of supported master data types.","description":"","operationId":"masterDataCatalogue","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StringList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/masterData/{id}":{"get":{"tags":["masterData"],"summary":"Retrieve all master data records of the given type.","description":"","operationId":"getMasterData","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The type of master data, see catalogue for supported types.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StringList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/masterData/{id}":{"get":{"tags":["masterData"],"summary":"Retrieve all master data records of the given type.","description":"","operationId":"v2/getMasterData","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The type of master data, see catalogue for supported types.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/MasterDataList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/naturalPersons":{"put":{"tags":["naturalPersons"],"summary":"Update the given natural persons.","description":"","operationId":"updateMultipleNaturalPersons","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"onlyUpdateFieldsFor","in":"query","description":"If given, only update the fields for
- personalInformation: see CreateOrUpdateNaturalPersonParams (native attributes)
- address: see CreateOrUpdateAddressParams
- mifid: see CreateOrUpdateNaturalPersonMifidParams
- taxation: see CreateOrUpdateNaturalPersonTaxationParams
- legitimation: see CreateOrUpdateNaturalPersonLegitimationParams.
If not given, update all fields for which parameters were supplied.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateMultipleNaturalPersonParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/NaturalPerson"}},"400":{"description":"SC_BAD_REQUEST: Invalid request parameters, see error details"},"404":{"description":"NOT_FOUND: NaturalPerson with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/naturalPersons/{id}":{"put":{"tags":["naturalPersons"],"summary":"Update the natural person with the given ID.","description":"","operationId":"updateNaturalPerson","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the NaturalPerson to update","required":true,"type":"integer"},{"name":"onlyUpdateFieldsFor","in":"query","description":"If given, only update the fields for
- personalInformation: see CreateOrUpdateNaturalPersonParams (native attributes)
- address: see CreateOrUpdateAddressParams
- mifid: see CreateOrUpdateNaturalPersonMifidParams
- taxation: see CreateOrUpdateNaturalPersonTaxationParams
- legitimation: see CreateOrUpdateNaturalPersonLegitimationParams.
If not given, update all fields for which parameters were supplied.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateNaturalPersonParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/NaturalPerson"}},"404":{"description":"NOT_FOUND: NaturalPerson with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/netfonds/customers":{"get":{"tags":["netfonds/customers"],"summary":"Find netfonds customers.","description":"","operationId":"netfonds/customers","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Search by the given string.","required":false,"type":"string"},{"name":"firstName","in":"query","description":"Search by the given first name.","required":false,"type":"string"},{"name":"lastName","in":"query","description":"Search by the given last name.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StringList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an authenticated subscription management administrator."}}},"/v1/performance/intervals":{"post":{"tags":["performance"],"summary":"Calculate cash flow and performance statistics for the given accounts and intervals.\n Calculations are limited to 500 investments across all accounts; including active and\n historic positions.","description":"","operationId":"/performanceIntervals","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreatePerformanceIntervalsParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PerformanceIntervalList"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"400":{"description":"INVALID_PARAMETER: At least one of the given asset classes is invalid."},"404":{"description":"No account(s) with the given ID(s) found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public accounts.","IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access to accounts that are declared as publicly visible by the BusinessToBusiness user holding them."}}},"/v1/performance/timePoints":{"post":{"tags":["performance"],"summary":"Calculate performance for a set of time points defined by the given interval. Calculations\n are limited to 500 investments across all accounts; including active and historic positions.","description":"","operationId":"performanceTimePoints","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreatePerformanceIntervalsParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PerformanceTimePointList"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"400":{"description":"INVALID_PARAMETER: At least one of the given asset classes is invalid."},"404":{"description":"No account(s) with the given ID(s) found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public accounts."}}},"/v1/performance/depots":{"post":{"tags":["performance"],"summary":"DEPRECATED: use /v2/performance instead.\n Calculate cash flow and performance statistics for the given accounts. By default, only the\n portfolio performance (excluding the net cash position) will be included. Using the flags\n includeCash and assetClasses additional data may be requested. Calculations are limited to 500\n investments across all accounts; including active and historic positions.","description":"","operationId":"/performanceByDepots","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateCashFlowAndPerformanceStatisticsParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CashFlowAndPerformanceStatisticsList"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"400":{"description":"INVALID_PARAMETER: At least one of the given asset classes is invalid."},"404":{"description":"No account(s) with the given ID(s) found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public accounts.","IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access to accounts that are declared as publicly visible by the BusinessToBusiness user holding them."}}},"/v1/performance/portfolio":{"get":{"tags":["performance"],"summary":"DEPRECATED: use /v2/performance instead. A simplified endpoint to calculate the TWROR portfolio performance for the given accounts. This simplified endpoint may also be used for retrieving a friend's portfolio performance as it does not include any cash-flow or balance information. Calculations are limited to 500 investments across all accounts; including active and historic positions.","description":"","operationId":"/portfolio","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Include the given accounts in the performance calculation","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"startDate","in":"query","description":"A date in format yyyy-MM-dd (US Format). Start performance calculation at the given date. Default is 5 years ago.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TwrorResultList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"404":{"description":"No account(s) with the given ID(s) found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/performance/histogram":{"get":{"tags":["performance"],"summary":"Get a performance histogram including the performance of all ACTIVE users, using the given performance interval.","description":"","operationId":"performanceHistogram","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"performanceInterval","in":"query","description":"The performance interval to use for histogram creation; supported values are six-month steps, so 1, 6, 12, 18 ... 60. The default value is 12.","required":false,"type":"string"},{"name":"percentile","in":"query","description":"Apply the given percentile for calculation of low, average and high performance cutoff ranges. Must be a value between 0 and 100. Only values within the boundary will be considered when defining the cutoff ranges. This way outlier may be filtered, e.g. by using a 10% cutoff to filter the lowest and highest 10%. Default is 5. Set to zero to use no cutoff.","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/HistogramBinList"}},"400":{"description":"INVALID_PARAMETER: The given performance interval is invalid."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/performance/{id}":{"get":{"tags":["performance"],"summary":"Retrieve the return on investment including the investments performance for the given investment.","description":"","operationId":"investmentPerformance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve return on investment for this investment.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InvestmentPerformance"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access to investments held in accounts that are declared as publicly visible by the BusinessToBusiness user holding them."}}},"/v2/performance":{"post":{"tags":["performance"],"summary":"Calculate cash flow and performance statistics for the given portfolios.\n By default, only the\n portfolio performance (excluding the net cash position) will be included. Using the flags\n includeCash and assetClasses additional data may be requested. Calculations are limited to 500\n investments across all accounts; including active and historic positions.","description":"","operationId":"portfolioPerformance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateCashFlowAndPerformanceStatisticsParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PortfolioPerformanceResultList"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"400":{"description":"INVALID_PARAMETER: At least one of the given asset classes is invalid."},"404":{"description":"No account(s) with the given ID(s) found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public accounts.","IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access to accounts that are declared as publicly visible by the BusinessToBusiness user holding them."}}},"/v1/users/{id}/premiumSubscription":{"get":{"tags":["users"],"summary":"Gets current user premium (stripe) subscription","description":"","operationId":"users/premiumSubscription","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of user trying to access his subscription","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StripeSubscription"}},"401":{"description":"Unauthorized. You have no access to the resource"},"404":{"description":"Not found. The user does not have a stripe subscription"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/public/{publicId}/accounts":{"get":{"tags":["publicAccounts"],"summary":"Get the public accounts of a user.","description":"","operationId":"listPublicAccounts","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PublicAccountList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: A User with the given publicId was not found"},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/bookings":{"get":{"tags":["bookings"],"summary":"Get or search a list of bookings","description":"","operationId":"publicListAndSearchAllBookings","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"id","in":"query","description":"Retrieve Bookings with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve Bookings for the given Accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve Bookings for the given investments","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"finApiId","in":"query","description":"(Deprecated - use externalId) Retrieve Bookings with the given finAPI IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"externalId","in":"query","description":"Retrieve Bookings with the given external IDs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Retrieve Bookings having the given type, allowed values are buy, sell, dividend. Note that kupons also have types dividend; and retained dividends have type buy (check subtype here)","required":false,"type":"array","items":{"type":"string","enum":["buy","sell","book_in","book_out","dividend","retained_dividend","purchase_right"]},"collectionFormat":"multi"},{"name":"wkn","in":"query","description":"Retrieve Bookings belonging to Investments with the given WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve Bookings belonging to Investments with the given ISINs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isinOrWkn","in":"query","description":"Retrieve Bookings belonging to Investments with the given ISINs or WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"tickerSymbol","in":"query","description":"Retrieve Bookings belonging to Investments with the given ticker symbols","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"currency","in":"query","description":"Retrieve Bookings in the given currencies (3-letter ISO code)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"minAmount","in":"query","description":"Retrieve Bookings with amount greater or equal than the given minAmount","required":false,"type":"number"},{"name":"maxAmount","in":"query","description":"Retrieve Bookings with amount less or equal than the given maxAmount","required":false,"type":"number"},{"name":"minDate","in":"query","description":"Retrieve Bookings with date after or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"maxDate","in":"query","description":"Retrieve Bookings with date before or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableBookingList"}},"404":{"description":"NOT_FOUND: None of the provided account IDs could be found; or the user has no accounts."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error. INVALID_PARAMETER: invalid parameter; see error details."}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/bookings/{id}":{"get":{"tags":["bookings"],"summary":"Get a booking change","description":"","operationId":"publicPortfolioPositions/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the transaction to retrieve","required":true,"type":"integer"},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Booking"}},"404":{"description":"NOT_FOUND: Booking with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/classifications/currencies":{"get":{"tags":["classifications"],"summary":"Get investments by currency","description":"","operationId":"publicListCurrencyClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by type for selected account ids. Returns classification for\n all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InvestmentTypeBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/classifications/investmentTypes":{"get":{"tags":["classifications"],"summary":"Get investments by type","description":"","operationId":"publicListTypeClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by type for selected account ids. Returns classification for\n all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/InvestmentTypeBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/classifications/industries":{"get":{"tags":["classifications"],"summary":"Get classifications by industries","description":"","operationId":"publicListIndustryClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by regions for selected account ids. Returns classification\n for all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/IndustryBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/classifications/regions":{"get":{"tags":["classifications"],"summary":"Get classifications by regions","description":"","operationId":"publicListRegionClassificationsForAllInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Retrieves classification by regions for selected account ids. Returns classification\n for all investments if not given. Limited to 500 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RegionBreakdownList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/dividends/history":{"get":{"tags":["dividends"],"summary":"Get the aggregated dividend history by month or year for the given accounts or investments. The operation delivers aggregated dividends in a tree-like structure, with nodes representing years and months, respectively. Each node holds a list of the IDs of all investments that contributed a dividend payment. Investment IDs are assigned to investment references using the investmentReferenceById hash also included in the result. Note that the attribute 'month' starts with zero for January, up to 11 for December.","description":"","operationId":"publicDividendHistory","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"accountId","in":"query","description":"Retrieve the dividend history for the given account(s); limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve the dividend history for the given Investment(s). This parameter is ignored if account IDs are given. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"cutoffDate","in":"query","description":"Only include dividends with payment date after the given cutoff; format is yyyy-MM-dd (US Format).","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendHistoryTree"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if publicId belongs to a public user."}}},"/v1/public/{publicId}/dividends/predict":{"get":{"tags":["dividends"],"summary":"Project future dividend payments for the given accounts or investments. The operation delivers aggregated dividends in a tree-like structure, with nodes representing years and months, respectively. Each node holds a list of the IDs of all investments that contributed a dividend payment. Investment IDs are assigned to investment references using the investmentReferenceById hash also included in the result. Note that the attribute 'month' starts with zero for January, up to 11 for December.","description":"","operationId":"publicDividendPrediction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"accountId","in":"query","description":"Retrieve the dividend history for the given account(s). Either accountIds or InvestmentIds must be provided. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve the dividend history for the given Investment(s). Either accountIds or InvestmentIds must be provided.This parameter is ignored if account IDs are given. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"predictYears","in":"query","description":"Predict dividends for N years into the future, starting with the current year. So if the current year is 2018 and projectYears is 2, we will receive projections for 2018 and 2019.","required":true,"type":"integer"},{"name":"yearlyPortfolioIncrease","in":"query","description":"Include a yearly portfolio increase (in percent) into the projection. Projected dividends will then also grow with the portfolio valuation. The value is given in percent, with 1 = 100%. No increase is added if this parameter is not given.","required":false,"type":"integer"},{"name":"dividendPerShare","in":"query","description":"Calculate the dividend per share if true. If false, the dividend amount will include the respective number of lots. Default is false.","required":false,"type":"boolean"},{"name":"inAccountCurrency","in":"query","description":"Return the dividend estimate in account currency (currently fixed to EUR) if true; in investment currency if false. Note that in case we query values for more then one investment, this will automatically be forced to true to avoid currency conversion related errors","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendHistoryTree"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if publicId belongs to a public user."}}},"/v1/public/{publicId}/dividends/portfolioYield":{"get":{"tags":["dividends"],"summary":"Retrieve the dividend yield for the given account(s).","description":"","operationId":"publicDividendYield","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"accountId","in":"query","description":"Retrieve the dividend yield for the given account(s). Limited to 300 investments.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"calculationType","in":"query","description":"The type of calculation to perform. If 'predicted' is given, the dividend yield will be calculated including the dividend predictions for the current year. Default is 'actual'.","required":false,"type":"string","enum":["actual","predicted"]},{"name":"from","in":"query","description":"Only include dividends with payment date after the given cutoff; Default is 5 years back from today; format is yyyy-MM-dd (US Format).","required":false,"type":"string"},{"name":"cagrYears","in":"query","description":"Calculate the CAGR for the given number of years. Default is 5.","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendYieldList"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details"},"404":{"description":"NOT_FOUND: The requested resource was not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if publicId belongs to a public user."}}},"/v1/public/{publicId}/dividends/calendar":{"get":{"tags":["dividends"],"summary":"Get a dividend calendar / dividend rating for the current year. The calendar consists of a list of all actual and predicted dividend payments. Note that the attribute 'monthOfPayment' starts with zero for January, up to 11 for December.","description":"","operationId":"publicDividendCalendar","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"accountId","in":"query","description":"Retrieve the dividend history for the given account(s). Either accountIds or InvestmentIds must be provided. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve the dividend history for the given Investment(s). Either accountIds or InvestmentIds must be provided.This parameter is ignored if account IDs are given. Limited to 300 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DividendCalendarRecordList"}},"400":{"description":"MISSING_PARAMETER: Missing parameters, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if publicId belongs to a public user."}}},"/v1/public/{publicId}/investments/performance":{"get":{"tags":["investments"],"summary":"Get the time-weighted performance for a set of public investments. Please not that this method is optimized for fast batch use cases and thus does approximate the performance calculation by simply using 'currentValue / previousValue + cashFlow'. Due to cash-flow adjustment, it may produce slightly different results than a performance calculation that considers every single day.","description":"","operationId":"batchPublicInvestmentPerformance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"id","in":"query","description":"Retrieve performance for investments with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"depotId","in":"query","description":"Retrieve performance of investments for the given depots; only active investments with a number of lots greater than zero will be considered. This parameter takes precedence over the id parameter if given.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"A date in format yyyy-MM-dd. Start performance calculation at the given date. Default is 6 years ago.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"to","in":"query","description":"A date in format yyyy-MM-dd. End performance calculation at the given date. Default is today.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"inAccountCurrency","in":"query","description":"Should we keep the investment currency or convert to account currency; default is true what will convert all responses to EUR","required":false,"type":"boolean"},{"name":"includeExpenses","in":"query","description":"Should we include tax and commission in the calculation; default is true","required":false,"type":"boolean"},{"name":"includeDividends","in":"query","description":"Should we include dividends in the calculation; default is false","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BatchSingleInvestmentTwror"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"404":{"description":"NOT_FOUND: No investments for the given query parameters were found"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/public/{publicId}/investments":{"get":{"tags":["investments"],"summary":"Get or search a list of Investments","description":"","operationId":"listAndSearchAllPublicInvestments","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"accountId","in":"query","description":"Retrieve Investments for the given Accounts","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"wkn","in":"query","description":"Retrieve Investments with the given WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve Investments with the given ISINs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isinOrWkn","in":"query","description":"Retrieve Investments with the given ISINs or WKNs.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"tickerSymbol","in":"query","description":"Retrieve Investments with the given ticker symbols","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"name","in":"query","description":"Retrieve Investments matching the given name (like search)","required":false,"type":"string"},{"name":"currency","in":"query","description":"Retrieve Investments with the given currencies (3-letter ISO code)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"industryId","in":"query","description":"Retrieve Investments belonging to the given industries (exact match only)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"regionId","in":"query","description":"Retrieve Investments belonging to the given regions (exact match only)","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"subCategoryId","in":"query","description":"Retrieve investments having the given sub-category ID","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"includeHistoric","in":"query","description":"Include historic Investments (those which were sold and are now not part of the depot) if true. Default values if false.","required":false,"type":"boolean"},{"name":"positiveAmountOrLastTransactionAfter","in":"query","description":"Retrieve Investments having a positive number of lots (they are still in our depot) OR investments that were entirely sold after the given date; date format is yyyy-MM-dd (US Format) This is useful to cover use cases like 'I would like to add a dividend to an investment I sold one month ago.","required":false,"type":"string"},{"name":"quoteQuality","in":"query","description":"A quality setting for quote data. Better quality may lead to slower response times.\n Default is PERFORMANCE. The available option are:\n PERFORMANCE: use a short-time caching layer for optimal response times\n OPTIMAL: request real-time quotes across available stock exchanges and choose the most recent\n quote. This requires a lookup against the quote data provider for each request and might\n does lead to slower response times; depending on your quote provider performance. This\n setting is currently only available for quote provider ovfs.","required":false,"type":"string","enum":["PERFORMANCE","OPTIMAL"]},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableInvestmentList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"CURRENCY_MISMATCH: Incompatible quote currency given; UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: No investments for the given query parameters were found"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v1/public/{publicId}/investments/{id}":{"get":{"tags":["investments"],"summary":"Get an Investment","description":"","operationId":"showPublicInvestment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to retrieve","required":true,"type":"integer"},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"quoteQuality","in":"query","description":"A quality setting for quote data. Better quality may lead to slower response times.\n Default is PERFORMANCE. The available option are:\n PERFORMANCE: use a short-time caching layer for optimal response times\n OPTIMAL: request real-time quotes across available stock exchanges and choose the most recent\n quote. This requires a lookup against the quote data provider for each request and might\n does lead to slower response times; depending on your quote provider performance. This\n setting is currently only available for quote provider ovfs.","required":false,"type":"string","enum":["PERFORMANCE","OPTIMAL"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Investment"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"CURRENCY_MISMATCH: Incompatible quote currency given; UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if the investment resides in a public B2B account."}}},"/v2/public/{publicId}/performance":{"post":{"tags":["performance"],"summary":"Calculate cash flow and performance statistics for the given portfolios.\n By default, only the\n portfolio performance (excluding the net cash position) will be included. Using the flags\n includeCash and assetClasses additional data may be requested. Calculations are limited to 500\n investments across all accounts; including active and historic positions.","description":"","operationId":"publicPortfolioPerformance","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateCashFlowAndPerformanceStatisticsParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PortfolioPerformanceResultList"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"400":{"description":"INVALID_PARAMETER: At least one of the given asset classes is invalid."},"404":{"description":"No account(s) with the given ID(s) found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public accounts.","IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access to accounts that are declared as publicly visible by the BusinessToBusiness user holding them."}}},"/v1/public/{publicId}/riskYieldMetrics/investments":{"get":{"tags":["riskYieldMetrics"],"summary":"Delivers risk and yield for each of the selected investments / the investments contained in the given depots","description":"","operationId":"publicBatchRiskYieldMetrics","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user","required":true,"type":"string"},{"name":"depotId","in":"query","description":"Get risk and yield data for the given accounts; authenticated user required.\n Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Get risk yield data for the given set of investments. Takes precedence over the\n accountIds parameter. Authenticated user required. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Backtrack from the given date; max is 10 years. Default value is 3 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"interval","in":"query","description":"Restrict data retrieval to the given interval. Default is month.","required":false,"type":"string","enum":["day","week","month","year"]},{"name":"intervalPosition","in":"query","description":"Defines which value within the specified interval is used. Default value is current.\n Ignored if interval is day.\n The position is defined as current: current day of week / month / year; \n first: first day of week / month / year; last: last day of week / month / year or\n the current day if the last day would fall after today.","required":false,"type":"string","enum":["current","first","last"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BatchRiskYieldMetrics"}},"403":{"description":"FORBIDDEN: User is not allowed to access the given account(s)"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user.","IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access to accounts that are declared as publicly visible by the BusinessToBusiness user holding them."}}},"/v1/qualityAssurance/deleteAccountsForMockBankConnection":{"delete":{"tags":["qualityAssurance"],"summary":"\"Delete all accounts for the currently configured mock bank connection.","description":"","operationId":"deleteAccountsForMockBankConnection","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Accounts deleted."},"401":{"description":"Bank connection mocking is not enabled"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/qualityAssurance/confirmUser":{"put":{"tags":["qualityAssurance"],"summary":"Confirm the users email address. This endpoint is only available on quality assurance environments.","description":"","operationId":"confirmUserQA","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Email for the currently logged in user was confirmed"},"405":{"description":"Method Not Allowed. Only PUT is allowed; or method is disabled on the current environment"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/qualityAssurance/emailChangeToken":{"get":{"tags":["qualityAssurance"],"summary":"Get the users email confirmation token. This endpoint is only available on quality assurance environments.","description":"","operationId":"emailChangeToken","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"email","in":"query","description":"Get the email confirmation token for the user matching the given email address.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"string"}},"405":{"description":"Method Not Allowed. Only GET is allowed; or method is disabled on the current environment"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/qualityAssurance/configureMockBankingApi":{"get":{"tags":["qualityAssurance"],"summary":"\"Set the configuration for banking API mocking. This endpoint is only available on\n quality assurance environments.","description":"","operationId":"configureMockBankingApi","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"Defines which account to link","required":true,"schema":{"$ref":"#/definitions/MockBankConnectionConfigurationParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Configuration changed."},"405":{"description":"Method Not Allowed. Only PUT is allowed; or method is disabled on the current environment"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/qualityAssurance/vouchers":{"post":{"tags":["qualityAssurance"],"summary":"Programmatically create a new, random voucher that is valid from one year ago to one year from now. The voucher belongs to the given mandator.","description":"","operationId":"createRandomVoucher","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"mandatorPublicId","in":"query","description":"The voucher belongs to the given mandator.","required":true,"type":"string"},{"name":"amount","in":"query","description":"The vouchers amount.","required":true,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TimeDependentProperty"}},"405":{"description":"Method Not Allowed. Only POST is allowed; or method is disabled on the current environment"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/qualityAssurance/users":{"post":{"tags":["qualityAssurance"],"summary":"Programmatically create a new, empty user. The users username, password and user reference are returned. This endpoint is only available on quality assurance environments","description":"","operationId":"createRandomUser","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"Parameters for creating a random user","required":true,"schema":{"$ref":"#/definitions/CreateRandomUserParams"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RandomUser"}},"405":{"description":"Method Not Allowed. Only POST is allowed; or method is disabled on the current environment"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/quotes/{id}":{"get":{"tags":["quotes"],"summary":"Get a quote for the given ticker symbol","description":"","operationId":"getQuote","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Get the quote with the given ticker symbol.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Quote"}},"404":{"description":"NOT_FOUND: Quote with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/quotes":{"get":{"tags":["quotes"],"summary":"Get quotes for the given ticker symbols","description":"","operationId":"getQuotes","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Get quotes with the given ticker symbols. Limit: 1000.","required":true,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/QuoteMap"}},"404":{"description":"NOT_FOUND: Quote with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v2/quotes":{"get":{"tags":["quotes"],"summary":"Get quotes for the given security ids","description":"","operationId":"getQuotesV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"securityId","in":"query","description":"Get quotes with the given security ids. Limit: 1000.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"optimal","in":"query","description":"Get the optimal quotes for the given security ids.Default is true.","required":false,"type":"boolean"},{"name":"preferredCurrency","in":"query","description":"Get the quotes in the given currency. Default is EUR.","required":false,"type":"string"},{"name":"quoteProvider","in":"query","description":"Get the quotes from the given quote provider.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/QuoteList"}},"404":{"description":"NOT_FOUND: Quote with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/performance/realizedGains/{id}":{"get":{"tags":["performance"],"summary":"Calculate the detailed trading gain for an investment. Trading gain is given accumulated and for each of the investments transactions.","description":"","operationId":"tradingGainForInvestment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Calculate the trading gain for the given investment and all of its transactions","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RealizedGainByBooking"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"404":{"description":"NOT_FOUND: Investment not found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user to access all non-public investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Allows anonymous access to gains for investments that reside in accounts that are declared as publicly visible by the BusinessToBusiness user holding them."}},"post":{"tags":["performance"],"summary":"Estimate the trading gain for a new (not yet persisted) transaction.","description":"","operationId":"estimateTradingGainForNewTransaction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to check trading gain for","required":true,"type":"integer"},{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInvestmentParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RealizedGain"}},"400":{"description":"INVALID_PARAMETER: Invalid transaction type provided."},"404":{"description":"NOT_FOUND: Investment with the given ID was not found. INVALID_PARAMETER: Transaction type is not SELL."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"406":{"description":"VALIDATION_ERROR: The given parameters would produce an invalid transaction - tax estimation is not possible"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/performance/realizedGains":{"get":{"tags":["performance"],"summary":"Calculate the yearly realized gains in total and by category. Categories are trading gains, dividend gains, interest gains, other gains and tax refunds. All values (except tax refunds) are available as gross and net values.","description":"","operationId":"/realizedGainsPerYear","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"accountId","in":"query","description":"Calculate gains per year for the given accounts. Limited to 500 investments.","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RealizedGainByYearList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"404":{"description":"No account(s) with the given ID(s) found or insufficient privileges"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/regions":{"get":{"tags":["regions"],"summary":"Search all regions","description":"","operationId":"listAndSearchAllRegions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"germanName","in":"query","description":"German name; will perform a like search","required":false,"type":"string"},{"name":"name","in":"query","description":"Default (English) name; will perform a like search","required":false,"type":"string"},{"name":"threeLetterCode","in":"query","description":"Lookup a region by its ISO 3-letter code","required":false,"type":"string"},{"name":"twoLetterCode","in":"query","description":"Lookup a region by its ISO 2-letter code","required":false,"type":"string"},{"name":"type","in":"query","description":"Only return regions with the given type; supported are continent, subContinent, country","required":true,"type":"string"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableRegionList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/regions/{id}":{"get":{"tags":["regions"],"summary":"Get a region by ID","description":"","operationId":"regions/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the region to retrieve","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Region"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/accounts/remoteAccounts":{"get":{"tags":["accounts"],"summary":"Get and search all remote accounts (stored on finAPI side). Note that the list of remote accounts may differ from the list of locally persisted accounts. Users may e.g. decide to skip an account during import.","description":"","operationId":"listAndSearchAllRemoteAccounts","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve the remote accounts with the given (finAPI) IDs.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve the remote account matching the given (local) IDs.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"bankConnectionId","in":"query","description":"Retrieve the remote accounts belonging to the given bank connection(s).","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"skipImported","in":"query","description":"Only retrieve remote accounts that have not been imported.\n Default is to ignore this parameter.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/FinApiAccountList"}},"400":{"description":"MISSING_PARAMETER: Account does not have a finAPI ID.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: None of the given account IDs could be found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/importRemoteAccount":{"post":{"tags":["accounts"],"summary":"Import the given remote account into local storage. The account must already exist on finAPI side.","description":"","operationId":"importRemoteAccount","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"Defines the remote account to import","required":true,"schema":{"$ref":"#/definitions/ImportRemoteAccountParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Account"}},"404":{"description":"NOT_FOUND: Remote account with the given ID was not found or insufficient privileges"},"406":{"description":"INVALID_PARAMETER: Invalid parameters, see error details
\n VALIDATION_ERROR: Account could not be validated, see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/accounts/{id}/remoteStatus":{"get":{"tags":["accounts"],"summary":"Get the remote status (finAPI status on updates, saved PIN, etc.) for the given account.","description":"","operationId":"remoteStatus","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the remote status for the account with the given ID.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RemoteAccountStatus"}},"400":{"description":"MISSING_PARAMETER: Account does not have a finAPI ID.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: None of the given account IDs could be found."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["accounts"],"summary":"Update the remote status of the given account.","description":"","operationId":"updateRemoteStatus","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the account to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The update parameters","required":true,"schema":{"$ref":"#/definitions/UpdateRemoteAccountStatusParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RemoteAccountStatus"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/remoteDepots/{id}":{"get":{"tags":["remoteDepots"],"summary":"Get remote securities for the given banking provider (finAPI) account ID. Remote securities are all securities that are stored on finAPI side. Use this endpoint to check locally persisted securities against the remote set.","description":"","operationId":"getRemoteSecurities","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Banking provider (finAPI) account ID of the account/depot holding the securities","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableSecurityList"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"PASSWORD_REQUIRED: Failed to acquire finApi session - please authenticate again"},"404":{"description":"UNKNOWN_ENTITY: Given finApi account or contra account could not be found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"406":{"description":"NO_FIN_API_ACCOUNT: The given account is not linked with a bank account (no finApiId)"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"422":{"description":"ENTITY_EXISTS: Account with the given ID has already been imported"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["remoteDepots"],"summary":"Import a remote depot","description":"","operationId":"importRemoteDepot","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the remote depot to import","required":true,"type":"integer"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/ImportRemoteDepotParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DepotSynchronizationLog"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"PASSWORD_REQUIRED: Failed to acquire finApi session - please authenticate again"},"404":{"description":"UNKNOWN_ENTITY: Given finApi account or contra account could not be found"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["remoteDepots"],"summary":"Import all detected remote changes to an accounts investments and return a synchronization log.","description":"","operationId":"updateRemoteDepot","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the remote depot to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/UpdateRemoteDepotParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DepotSynchronizationLog"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"UNKNOWN_ENTITY: Given finApi account or contra account could not be found"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"NO_FIN_API_ACCOUNT: The given account is not linked with a bank account (no finApiId)"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"422":{"description":"ENTITY_EXISTS: Account with the given ID has already been imported"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/remoteDepots/{id}/tppWebForm/{tppWebFormToken}":{"post":{"tags":["remoteDepots"],"summary":"Import a remote depot using the TPP web form flow","description":"","operationId":"importRemoteDepotViaTppWebForm","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the remote depot to import","required":true,"type":"integer"},{"name":"tppWebFormToken","in":"path","description":"Token (ID) of the web form carrying the required user information","required":true,"type":"string"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/ImportRemoteDepotParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DepotSynchronizationLog"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"PASSWORD_REQUIRED: Failed to acquire finApi session - please authenticate again"},"404":{"description":"UNKNOWN_ENTITY: Given finApi account or contra account could not be found"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"May be accessed via anonymously by the web form, but requires a valid web form token."}},"put":{"tags":["remoteDepots"],"summary":"Import all detected remote changes to an accounts investments using the tpp web form flow.","description":"","operationId":"updateRemoteDepotViaTppWebForm","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the remote depot to update","required":true,"type":"integer"},{"name":"tppWebFormToken","in":"path","description":"Token (ID) of the web form carrying the required user information","required":true,"type":"string"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/UpdateRemoteDepotParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DepotSynchronizationLog"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"UNKNOWN_ENTITY: Given finApi account or contra account could not be found"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"NO_FIN_API_ACCOUNT: The given account is not linked with a bank account (no finApiId)"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"422":{"description":"ENTITY_EXISTS: Account with the given ID has already been imported"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"May be accessed via anonymously by the web form, but requires a valid web form token."}}},"/v1/remoteDepots/bookingsForInitialImport/{id}":{"get":{"tags":["remoteDepots"],"summary":"DEPRECATED: List changes required for an account import","description":"","operationId":"importDepot","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Banking API provider ID (finApi) of the remote account (depot or others) to import.","required":true,"type":"integer"},{"name":"remoteContraAccountId","in":"query","description":"Banking API provider ID (finAPI) of the according remote contra account; import will be done without transaction data if not provided","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/AccountImportOrSynchronizationResult"}},"400":{"description":"NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"401":{"description":"PASSWORD_REQUIRED: Failed to acquire finApi session - please authenticate again"},"404":{"description":"UNKNOWN_ENTITY: Given finApi account or contra account could not be found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"},"417":{"description":"EXPECTATION_FAILED: The depot has been imported before; use the recurring import feature."},"422":{"description":"ENTITY_EXISTS: Account with the given ID has already been imported"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/remoteDepots/{id}/saas":{"put":{"tags":["remoteDepots"],"summary":"Import changes as detected based on the given SEPA transactions and securities. In case\n an empty list of SEPA transaction is provided, this endpoint will do only tracking error resolution.\n This endpoint is intended for backend communication used together with our API v3 and should not be called by a fronted or third-party application.","description":"","operationId":"saas/updateRemoteDepot","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the remote depot to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The account details","required":true,"schema":{"$ref":"#/definitions/BatchSynchronizationParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DepotSynchronizationLog"}},"404":{"description":"NOT_FOUND: given depot ID is invalid"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/reservations":{"post":{"tags":["reservations"],"summary":"Create a reservation.","description":"","operationId":"createReservation","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateReservationParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Email sent"},"400":{"description":"MISSING_PARAMETER: You did not specify mandatory parameters, see error details; INVALID_PARAMETER: Invalid parameters, see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/retirementCalculator":{"get":{"tags":["retirementCalculator"],"summary":"Calculate required capital at the start of retirement.","description":"","operationId":"pensionGap","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"monthlyStatePension","in":"query","description":"The monthly state pension (current value, not inflation adjusted); anything >= 0","required":true,"type":"number"},{"name":"monthlyPrivatePension","in":"query","description":"The monthly private pension; e.g. a live insurance (current value, not inflation adjusted); anything >= 0","required":true,"type":"number"},{"name":"requiredPension","in":"query","description":"The monthly required / desired pension (current value, not inflation adjusted); anything > 0","required":true,"type":"number"},{"name":"inflationRate","in":"query","description":"The expected inflation rate (YOY); anything >= 0","required":true,"type":"number"},{"name":"yearsToRetirement","in":"query","description":"The number of years until the user wants to retire (= number of years he is still working); anything >= 0","required":true,"type":"integer"},{"name":"pensionPaymentYears","in":"query","description":"The number of years we want to receive the pension; anything > 0","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PensionGap"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters were given; see error details. Also make sure not to provide any negative values; see documentation."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/performance/riskYieldEstimates":{"get":{"tags":["performance"],"summary":"DEPRECATED. Use the new riskYieldMetrics endpoints.\n Get risk yield statistics for the selected accounts or investments","description":"","operationId":"riskYieldStatistics","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"investmentId","in":"query","description":"Retrieve statistics for the given investments; Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve statistics for all investments held by the given accounts; Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"interval","in":"query","description":"Use the given time interval for statistics calculation. Supported values are 'day | week | month | year; default is month.","required":false,"type":"string"},{"name":"numIntervals","in":"query","description":"The number of intervals to include in the calculation. Default is 36; minimum value is 5 and the maximum value is 252, the number of trading days per year.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RiskYieldStatistics"}},"400":{"description":"INVALID_PARAMETER: Invalid parameter given, see error details"},"404":{"description":"NOT_FOUND: No investments matching the given search parameters were found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user for all other investments.","IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication if investments belong to a public B2B account."}}},"/v1/riskYieldMetrics/correlationToReference":{"get":{"tags":["riskYieldMetrics"],"summary":"Get the correlation of the given investments to the given reference ticker or to the entire portfolio.","description":"","operationId":"correlationToReference","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"depotId","in":"query","description":"Calculate the correlation to the reference for all investments inside the given\n portfolio. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Calculate the correlation to the reference for the given investments. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"referenceTicker","in":"query","description":"This is the reference for calculation; default is PORTFOLIO meaning to correlate each\n investment to the entire portfolio","required":false,"type":"string"},{"name":"referenceQuoteProvider","in":"query","description":"The quote provider of the reference quote; default is none (for PORTFOLIO).","required":false,"type":"string"},{"name":"from","in":"query","description":"Backtrack from the given date; max is 10 years. Default value is 3 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Backtrack to the given date. Default value is today. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CorrelationToReference"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/riskYieldMetrics/portfolioCorrelation":{"get":{"tags":["riskYieldMetrics"],"summary":"Get the inner correlation in the portfolio, a good measure for how similar individual positions behave.","description":"","operationId":"portfolioCorrelation","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"depotId","in":"query","description":"Calculate the correlation to the reference for all investments inside the given\n portfolio. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Calculate the correlation to the reference for the given investments. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Backtrack from the given date; max is 10 years. Default value is 3 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Backtrack to the given date. Default value is today. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PortfolioCorrelation"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/riskYieldMetrics/portfolioBacktracking":{"get":{"tags":["riskYieldMetrics"],"summary":"Backtrack the historic performance using the current portfolio composition. This endpoint allows\n anonymous access when backtracking against a virtual portfolio, provided by the\n virtualInvestmentTickerSymbol. An authenticated user is required if we want to backtrack against\n an existing portfolio or an existing set of investments.","description":"","operationId":"portfolioBacktracking","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"depotId","in":"query","description":"Get backtracking data for the given depots; authenticated user required.\n Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Get backtracking data for the given set of investments. Takes precedence over the\n accountIds parameter. Authenticated user required. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Backtrack from the given date; max is 10 years. Default value is 3 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Backtrack to the given date. Default value is today. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"interval","in":"query","description":"Restrict data retrieval to the given interval. Default is month.","required":false,"type":"string","enum":["day","week","month","year"]},{"name":"intervalPosition","in":"query","description":"Defines which value within the specified interval is used. Default value is current.\n Ignored if interval is day.\n The position is defined as current: current day of week / month / year; \n first: first day of week / month / year; last: last day of week / month / year or\n the current day if the last day would fall after today.","required":false,"type":"string","enum":["current","first","last"]},{"name":"inPercent","in":"query","description":"Convert all the quotes to a performance; default is false.","required":false,"type":"boolean"},{"name":"virtualInvestmentTickerSymbol","in":"query","description":"Use the given ticker symbol as your existing portfolio. \n Only used when depotId is not given.","required":false,"type":"string"},{"name":"virtualInvestmentAmount","in":"query","description":"Investment amount for your virtual investment.\n Only used together with query param virtualInvestmentTickerSymbol.\n ","required":false,"type":"integer"},{"name":"virtualInvestmentQuoteProvider","in":"query","description":"Quote provider to be used for the virtualInvestment quotes.\n Only used together with query param virtualInvestmentTickerSymbol.\n ","required":false,"type":"string"},{"name":"simulatedTickerSymbol","in":"query","description":"Get simulated backtracking data for an investment scenario.\n E.g. Simulate my portfolio backtracking if I had invested 10,000 on TSLA. \n simulatedTickerSymbol = \"TSLA\" \n simulatedAmount = 10000\n simulatedQuoteProvider = TTE","required":false,"type":"string"},{"name":"simulatedAmount","in":"query","description":"Amount to be used for the simulated backtracking data.\n Only used together with query param simulatedTickerSymbol.","required":false,"type":"number"},{"name":"simulatedQuoteProvider","in":"query","description":"Quote provider to be used for the simulated backtracking data.\n Only used together with query param simulatedTickerSymbol.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DateValuePairList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/riskYieldMetrics/investments":{"get":{"tags":["riskYieldMetrics"],"summary":"Delivers risk and yield for each of the selected investments / the investments contained in the given depots","description":"","operationId":"batchRiskYieldMetrics","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"depotId","in":"query","description":"Get risk and yield data for the given accounts; authenticated user required.\n Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Get risk yield data for the given set of investments. Takes precedence over the\n accountIds parameter. Authenticated user required. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Backtrack from the given date; max is 10 years. Default value is 3 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"interval","in":"query","description":"Restrict data retrieval to the given interval. Default is month.","required":false,"type":"string","enum":["day","week","month","year"]},{"name":"intervalPosition","in":"query","description":"Defines which value within the specified interval is used. Default value is current.\n Ignored if interval is day.\n The position is defined as current: current day of week / month / year; \n first: first day of week / month / year; last: last day of week / month / year or\n the current day if the last day would fall after today.","required":false,"type":"string","enum":["current","first","last"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/BatchRiskYieldMetrics"}},"403":{"description":"FORBIDDEN: User is not allowed to access the given account(s)"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/riskYieldMetrics":{"get":{"tags":["riskYieldMetrics"],"summary":"Get historic risk (standard deviation) and yield (annualized return) for the given depots.\n This endpoint allows anonymous access when calculating for against a virtual portfolio, provided by the\n virtualInvestmentTickerSymbol. An authenticated user is required if we want to backtrack against\n an existing portfolio or an existing set of investments.","description":"","operationId":"portfolioRiskYield","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"depotId","in":"query","description":"Get risk / yield data for the given depots; authenticated user required. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Get risk / yield data for the given set of investments. Takes precedence over the\n accountIds parameter. Authenticated user required. Limited to 250 investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"from","in":"query","description":"Backtrack from the given date; max is 10 years. Default value is 3 years ago. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"to","in":"query","description":"Backtrack to the given date. Default value is today. Format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"interval","in":"query","description":"Use the given quote interval for risk / yield calculations. Default value is month.","required":false,"type":"string","enum":["day","week","month","year"]},{"name":"intervalPosition","in":"query","description":"Defines which value within the specified interval is used. Default value is current.\n Ignored if interval is day.\n The position is defined as current: current day of week / month / year; \n first: first day of week / month / year; last: last day of week / month / year or\n the current day if the last day would fall after today.","required":false,"type":"string","enum":["current","first","last"]},{"name":"virtualInvestmentTickerSymbol","in":"query","description":"Use the given ticker symbol as your existing portfolio. \n Only used when depotId is not given.","required":false,"type":"string"},{"name":"virtualInvestmentAmount","in":"query","description":"Investment amount for your virtual investment.\n Only used together with query param virtualInvestmentTickerSymbol\n ","required":false,"type":"integer"},{"name":"virtualInvestmentQuoteProvider","in":"query","description":"Quote provider to be used for the virtualInvestment quotes.\n Only used together with query param virtualInvestmentTickerSymbol\n ","required":false,"type":"string"},{"name":"simulatedTickerSymbol","in":"query","description":"Get simulated risk yield metrics for an investment scenario.\n E.g. Simulate my risk & yield if I had invested 10,000 on TSLA. \n simulatedTickerSymbol = \"TSLA\" \n simulatedAmount = 10000\n simulatedQuoteProvider = TTE","required":false,"type":"string"},{"name":"simulatedAmount","in":"query","description":"Amount to be used for the simulated backtracking data.\n Only used together with query param simulatedTickerSymbol","required":false,"type":"number"},{"name":"simulatedQuoteProvider","in":"query","description":"Quote provider to be used for the simulated backtracking data.\n Only used together with query param simulatedTickerSymbol","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RiskYield"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Investment(s) or account(s) with the given ID was not found or insufficient privileges"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/roles":{"get":{"tags":["roles"],"summary":"Find a Roles matching the given search or belonging to the given user(s).","description":"","operationId":"listAndSearchAllRoles","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Search roles matching the given search string","required":false,"type":"string"},{"name":"userId","in":"query","description":"Get all roles belonging to the given users; will ignore the search parameters.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RoleList"}},"400":{"description":"INVALID_PARAMETER: given parameter is invalid, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ROLE_MANAGEMENT":"Requires an authenticated role manager.","ROLE_USER_MANAGEMENT":"Requires an authenticated user manager."}},"post":{"tags":["roles"],"summary":"Create a new role; only mandator administrators may do so, as this is a very central setting.","description":"","operationId":"createRole","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The user parameters","required":true,"schema":{"$ref":"#/definitions/CreateRoleParams"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Role"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator user administrator."}},"put":{"tags":["roles"],"summary":"Assign a role to a user.","description":"","operationId":"assignRole","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The user parameters","required":true,"schema":{"$ref":"#/definitions/AssignRoleParams"}}],"responses":{"200":{"description":"Role assigned."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The assignment is not possible; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ROLE_MANAGEMENT":"Requires an authenticated role manager.","ROLE_MANDATOR_CREDENTIALS":"Requires client credentials."}}},"/v1/roles/{role}/user/{userId}":{"delete":{"tags":["roles"],"summary":"Remove the given role from the given user.","description":"","operationId":"deleteRoleAssignment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"role","in":"path","description":"Name of the role to remove from the user.","required":true,"type":"string"},{"name":"userId","in":"path","description":"ID of the user to remove the role assignment from.","required":true,"type":"integer"}],"responses":{"200":{"description":"Role assignment deleted."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"406":{"description":"VALIDATION_ERROR: Deleting the assignment is not possible; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ROLE_MANAGEMENT":"Requires an authenticated role manager.","ROLE_MANDATOR_CREDENTIALS":"Requires client credentials."}}},"/v1/roles/{id}":{"get":{"tags":["roles"],"summary":"Get a Role.","description":"","operationId":"roles/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the role to retrieve.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Role"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"Role with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_ROLE_MANAGEMENT":"Requires an authenticated role manager.","ROLE_USER_MANAGEMENT":"Requires an authenticated user manager."}},"delete":{"tags":["roles"],"summary":"Delete the given role. This is only possible if the role is not in use. Only mandator administrators may do so, as this is a very central setting.","description":"","operationId":"deleteRole","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the role to delete.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Role deleted."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"409":{"description":"DATA_INTEGRITY_ERROR: The role is in use."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator user administrator."}}},"/v1/securityCommissions":{"get":{"tags":["securityCommissions"],"summary":"Get or search a list of security commissions. Accountants (ROLE_ACCOUNTING) have access to all all security commissions; normal users only have access to security commissions attached to their respective subscriptions.","description":"","operationId":"listAndSearchAllSecurityCommissions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve the security commissions with the given ID","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"subscriptionId","in":"query","description":"Retrieve security commissions belonging to the given subscriptions","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"internalTransactionId","in":"query","description":"Retrieve security commissions belonging to the given internal transaction","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"startDate","in":"query","description":"Only retrieve security commissions with billing date equal or after the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"endDate","in":"query","description":"Only retrieve security commissions with billing date equal or beforer the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"withoutSubscription","in":"query","description":"Only retrieve security commissions without an assigned subscription; default is false. Such security commissions are inconsistent and require fixing before closing a billing cycle.","required":false,"type":"boolean"},{"name":"withoutSecurity","in":"query","description":"Only retrieve security commissions without an assigned security; default is false. This is a minor issue but should be fixed before closing a billing cycle.","required":false,"type":"boolean"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableSecurityCommissionList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters given, see error details."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user; may only access its own data.","ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}},"put":{"tags":["securityCommissions"],"summary":"Attempt to auto-assign all missing security commission properties.","description":"","operationId":"autoAssignMissingProperties","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Assignment run complete; please check again."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/securityCommissions/securityCommissionsPayedInFollowingYear":{"get":{"tags":["securityCommissions"],"summary":"Get the sum of all security commission for year X payed in year X+1.","description":"","operationId":"securityCommissions/securityCommissionsPayedInFollowingYear","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CommissionPayedInFollowingYearList"}},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}}},"/v1/securityCommissions/taxationStatistics":{"get":{"tags":["securityCommissions"],"summary":"Get taxation statistics based on the securityCommissionsForTaxation table. This table holds raw accounting data that supports taxation.","description":"","operationId":"securityCommissions/taxationStatistics","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SecurityCommissionTaxationStatisticList"}},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}}},"/v1/securityCommissions/batch":{"delete":{"tags":["securityCommissions"],"summary":"Mark all security commissions for the given uploadFilename as deleted.","description":"","operationId":"deleteCommissionsForFilename","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"uploadFilename","in":"query","description":"Delete the security commissions for the given filename","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Security commissions for uploadFilename deleted."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/securityCommissions/{id}":{"get":{"tags":["securityCommissions"],"summary":"Get a security commission. Accountants (ROLE_ACCOUNTING) have access to all all security commissions; normal users only have access to security commissions attached to their respective subscriptions.","description":"","operationId":"getSecurityCommissions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the security commissions with the given ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SecurityCommission"}},"400":{"description":"NOT_FOUND: No security commission with the given ID was found or insufficient privileges."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user; may only access its own data.","ROLE_ACCOUNTING":"A fully authenticated accountant.","ROLE_FINANCIAL_AUDITOR":"A fully authenticated financial auditor."}},"delete":{"tags":["securityCommissions"],"summary":"Mark the given security commission as deleted.","description":"","operationId":"deleteCommissions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Delete the security commissions with the given ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Security commission deleted."},"400":{"description":"NOT_FOUND: No security commission with the given ID was found or insufficient privileges."},"401":{"description":"PASSWORD_REQUIRED: You are not allowed to perform this operation. Please log in."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/securityCommissions/validate":{"get":{"tags":["securityCommissions"],"summary":"Check for problems preventing correct security commission assignment.","description":"","operationId":"validateSecurityCommissions","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object","additionalProperties":{"type":"object"}}},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_ACCOUNTING":"A fully authenticated accountant."}}},"/v1/users/sharingPreferences/{publicId}":{"get":{"tags":["sharingPreferences"],"summary":"Get the sharing preferences of a user using their publicId.","description":"","operationId":"showSharingPreferencesByPublicId","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"publicId","in":"path","description":"Public ID of the user you want to see the sharing preferences for.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SharingPreference"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: A User with the given publicId was not found"},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/users/sharingPreferences":{"get":{"tags":["sharingPreferences"],"summary":"Get the sharing preferences of a user.","description":"","operationId":"showSharingPreferences","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SharingPreference"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: A User with the given publicId was not found"},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["sharingPreferences"],"summary":"Create or update the sharing preferences of a user.","description":"","operationId":"upsertSharingPreferences","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The sharing preferences details","required":true,"schema":{"$ref":"#/definitions/CreateSharingPreferenceParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SharingPreference"}},"403":{"description":"You need a 'shared portfolios' license to use this feature."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: A User with the given publicId was not found"},"400":{"description":"INVALID_PARAMETER: Invalid parameters provided, see error details"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/signup":{"post":{"tags":["signup"],"summary":"Create a new user; attached to the given mandator. By default, the user will receive an email confirmation after registration. This may be skipped using the 'skipEmailConfirmation' parameter; see parameter documentation. Also, users in role 'ROLE_SUBSCRIPTION_MANAGEMENT' may register users without email confirmation. Note that changing a users mandator afterwards requires the executing user to be in role 'ROLE_MANDATOR_ADMIN'.","description":"","operationId":"createUser","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"clientSecret","in":"query","description":"DEPRECATED: Use CreateUserParams.mandatorClientSecret instead.\n The client secret is required for user registration without email confirmation. If\n provided the users email address is considered confirmed. Note that we do not perform\n validation on email addresses for server-to-server use cases. This means it is\n completely save to provide a random hash instead of a valid email address.\n The client secret must match the mandator given in the create user parameters.\n Make sure to never expose your client secret on the web, i.e. do not use it in a publicly\n visible web site or script.","required":false,"type":"string"},{"name":"skipSessionLogin","in":"query","description":"Not relevant for server-to-server use cases. By default, the operations does perform a\n session-based login immediately. If this parameter is set true, no login will be done.","required":false,"type":"boolean"},{"in":"body","name":"body","description":"The user parameters","required":true,"schema":{"$ref":"#/definitions/CreateUserParams"}}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/User"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/socialStatistics/buySellRatio":{"get":{"tags":["socialStatistics"],"summary":"Calculate montly buy/sell ratios. These ratios given the mumber of buys divided buy the number of sells. A high ratio means users are buying, a low ratio means users are selling.","description":"","operationId":"buySellRatio","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"performanceFrom","in":"query","description":"Performance cutoff; only include users with a 12 months performance (TWROR) above the given threshold.","required":true,"type":"number"},{"name":"performanceTo","in":"query","description":"Performance cutoff; only include users with a 12 months performance (TWROR) below the given threshold.","required":true,"type":"number"},{"name":"investmentType","in":"query","description":"Calculate only on the given investment types. Values must match Investment.TYPE.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DateValuePairList"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters given, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/socialStatistics/mostWanted":{"get":{"tags":["socialStatistics"],"summary":"Calculate statistics on the most held and most traded security positions across all active users.","description":"","operationId":"mostWanted","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"performanceFrom","in":"query","description":"Performance cutoff; only include users with a 12 months performance (TWROR) above the given threshold.","required":true,"type":"number"},{"name":"performanceTo","in":"query","description":"Performance cutoff; only include users with a 12 months performance (TWROR) below the given threshold.","required":true,"type":"number"},{"name":"riskFrom","in":"query","description":"Risk bin cutoff; only include users with a 12 months risk bin (0-2) above or equal the given threshold.","required":true,"type":"integer"},{"name":"riskTo","in":"query","description":"Risk bin cutoff; only include users with a 12 months risk bin (0-2) below or equal the given threshold.","required":true,"type":"integer"},{"name":"investmentType","in":"query","description":"Calculate only on the given investment types. Values must match Investment.TYPE.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"cutoffDate","in":"query","description":"A date in format yyyy-MM-dd (US Format). Only consider buy / sell transactions after this date when calculating the buy/sell statistics. Default is 14 days ago.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/MostWantedStatisticsResult"}},"400":{"description":"INVALID_PARAMETER: Invalid parameters given, see error details"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/splits/{isin}":{"get":{"tags":["splits"],"summary":"Note: this is a Server-to-Server operation only! Get split master data for a given ISIN.","description":"","operationId":"getSplits","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"isin","in":"path","description":"The ISIN to retrieve splits for","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SplitList"}},"400":{"description":"INVALID_PARAMETER: Invalid ISIN provided."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SERVER_TO_SERVER":"Requires the X-SaaS-Authorization header to be set with a Bearer token."}}},"/v1/stripe/checkoutSession":{"get":{"tags":["stripe"],"summary":"Get a checkout stripe session","description":"","operationId":"stripe/checkoutSession","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"sessionId","in":"query","description":"Stripe Session ID","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/stripe":{"post":{"tags":["stripe"],"summary":"Stripe webhooks","description":"","operationId":"stripe/webhooks","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The webhook event","required":true,"schema":{"$ref":"#/definitions/Event"}}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"400":{"description":"Invalid Signature"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}}}},"/v1/stripe/createCheckoutSession":{"post":{"tags":["stripe"],"summary":"Create a stripe checkout session","description":"","operationId":"stripe/createCheckoutSession","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"Params for creating Stripe Checkout Session","required":true,"schema":{"$ref":"#/definitions/StripeCheckoutSession"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StripeCheckoutSession"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/stripe/createCustomerPortalSession":{"post":{"tags":["stripe"],"summary":"Create a stripe customer portal session","description":"","operationId":"stripe/createCustomerPortalSession","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StripeCheckoutSession"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/stripe/setup":{"get":{"tags":["stripe"],"summary":"Get Stripe configs","description":"","operationId":"stripe/setup","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/StripeSetup"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/subscriptionAnalytics":{"get":{"tags":["subscriptionAnalytics"],"summary":"Get booking statistics based on the given subscription statues. The result lists the number of subscriptions per month.","description":"","operationId":"subscriptionsByMonth","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"status","in":"query","description":"Filter by the given status(es); allowed values ID of the subscription to retrieve.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"mandatorPublicId","in":"query","description":"Only display data for the given mandator. Requires ROLE_SUBSCRIPTION_ADMIN.","required":false,"type":"string"},{"name":"isChurned","in":"query","description":"Only return 'churned' subscriptions, which are defined as subscriptions that never yielded any payment or for which the last payment is more then 7 months ago.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DateValuePairList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an subscription management administrator to search any subscription."}}},"/v1/subscriptions":{"get":{"tags":["subscriptions"],"summary":"List and search subscriptions.","description":"","operationId":"listAndSearchAllSubscriptions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"IDs of the subscriptions to retrieve.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"userId","in":"query","description":"Retrieve subscriptions for the given users; this requires 'ROLE_SUBSCRIPTION_MANAGEMENT' privileges.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Filter subscriptions by the given types; default is not filter. Allowed values are 02_basic_flatrate, 03_fund_flatrate.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"status","in":"query","description":"Filter subscriptions by the given status; default is no filter.","required":false,"type":"array","items":{"type":"string","enum":["incomplete","in_progress","internal_processing","processing_at_bank","processed","contract_terminated","cancelled"]},"collectionFormat":"multi"},{"name":"isActive","in":"query","description":"Only retrieve active / in-active subscriptions; default is no filter. Note that an in-active subscription does not equal a cancelled subscription. A subscription may become in-active for various reasons; typically the subscription period ended.","required":false,"type":"boolean"},{"name":"isCancelled","in":"query","description":"Only retrieve cancelled / not cancelled subscriptions; default is no filter. Not that an in-active subscription does not equal a cancelled subscription. A subscription may become in-active for various reasons; typically the subscription period ended. Cancellation requires an active cancellation by the user or an administrator.","required":false,"type":"boolean"},{"name":"isCurrent","in":"query","description":"Only retrieve the current / non-current subscriptions; default is no filter. A current subscription is defined as the latest subscription in a row of extended subscriptions.","required":false,"type":"boolean"},{"name":"isTrial","in":"query","description":"Only retrieve trial / non-trial subscriptions.","required":false,"type":"boolean"},{"name":"maxStart","in":"query","description":"Retrieve subscriptions with a start date >= maxStart; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"minStart","in":"query","description":"Retrieve subscriptions with a start date <= minStart; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"maxEnd","in":"query","description":"Retrieve subscriptions with an end date >= maxEnd; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"minEnd","in":"query","description":"Retrieve subscriptions with an end date <= minEnd; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"maxCreationTimestamp","in":"query","description":"Retrieve subscriptions with a creation timestamp >= maxCreationTimestamp; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"minCreationTimestamp","in":"query","description":"Retrieve subscriptions with a creation timestamp <= minCreationTimestamp; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"hasAffiliateTrackingCode","in":"query","description":"Only retrieve subscriptions having a tracking ID; default is any. Setting this value to false is considered equal to 'any'. This option is only available to subscription management administrators.","required":false,"type":"boolean"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableSubscriptionList"}},"404":{"description":"NOT_FOUND: No subscriptions were found or insufficient privileges; see error details."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"A subscription manager may see his mandators subscriptions.","ROLE_USER":"Requires an authenticated user.","ROLE_SUBSCRIPTION_ADMIN":"A subscription administrator may see all subscriptions."}},"post":{"tags":["subscriptions"],"summary":"Create a new subscription. Add affiliate tracking if a tracking code is present and the mandator supports it. Also send out a notification email in case the subscription is in status 'IN_PROGRESS'.
\n A note on creating cashback subscriptions:
\n when creating a cashback subscription, at least the following parameters should be given to allow\n for correct initialization and validation:
\n - type (to indicate this is cashback)
\n - bic (may trigger generation of account identifier for DAB)
\n - customData.isNewDepot
\n ","description":"","operationId":"createSubscription","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateSubscriptionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Subscription"}},"400":{"description":"INVALID_PARAMETER: invalid parameter; see error details."},"405":{"description":"Method Not Allowed. Only POST is allowed; NOT_PERMITTED: The given action is not permitted."},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/subscriptions/validateDiscountCode":{"get":{"tags":["subscriptions"],"summary":"Validate the given discount code. Return OK if valid; or Status 406 (NOT_ACCEPTABLE) if invalid. In the latter case the operation returns an ApiException containing the respective validation error message.","description":"","operationId":"validateDiscountCode","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"discountCode","in":"query","description":"The discount code to validate.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/DiscountCodeValidationResult"}},"404":{"description":"NOT_FOUND: No subscription with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an subscription management administrator to validate a discount code for any subscription.","ROLE_USER":"Requires an authenticated user."}}},"/v1/subscriptions/{id}/validatePrimaryAccountIdentifier":{"get":{"tags":["subscriptions"],"summary":"Validates the given primary account identifier (or customer ID for banks such as comdirect).\n The primary account identifier must not have been assigned to a subscription in the scope of the given bank (BIC).\n The match includes partials, so 'IDENTIFIER123' and 'IDENTIFIER12' would also be considered as already assigned.\n This covers many cases in which banks use base numbers.","description":"","operationId":"validatePrimaryAccountIdentifier","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"The subscription the account identifier (or customer ID) should be assigned to.","required":true,"type":"integer"},{"name":"bic","in":"query","description":"The bic we want to validate for. In case the subscription already has a bic, this value\n should match the subscriptions bic; however, the API will not enforce this.","required":true,"type":"string"},{"name":"accountIdentifier","in":"query","description":"The account identifier we would like to check","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/ValidationResult"}},"404":{"description":"NOT_FOUND: No subscription with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/subscriptions/{id}/affiliateTracking":{"delete":{"tags":["subscriptions"],"summary":"Cancel affiliate tracking for the given subscription. This can only be done for subscriptions belonging to the logged in users mandator domain.","description":"","operationId":"cancelAffiliateTracking","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the subscription to cancel affiliate tracking for.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Affiliate tracking cancelled."},"404":{"description":"NOT_FOUND: No subscription with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"A subscription manager may see his mandators subscriptions.","ROLE_SUBSCRIPTION_ADMIN":"A subscription administrator may see all subscriptions.","ROLE_ACCOUNTING":"Requires a fully authenticated accountant."}}},"/v1/subscriptions/{id}":{"get":{"tags":["subscriptions"],"summary":"Get the given subscription. A two factor authentication is NOT required for a short time after user registration in case the user did not confirm his email address yet. This is a small concession to usability, allowing a smooth transition to the registration process.","description":"","operationId":"getSubscription","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the subscription to retrieve.","required":true,"type":"integer"},{"name":"format","in":"query","description":"Retrieve the subscription in the given format, allowable values are 'json' and 'pdf'. Default is 'json'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Subscription"}},"404":{"description":"NOT_FOUND: No subscription with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"A subscription manager may see his mandators subscriptions.","ROLE_USER":"Requires an authenticated user.","ROLE_SUBSCRIPTION_ADMIN":"A subscription administrator may see all subscriptions."}},"put":{"tags":["subscriptions"],"summary":"Update a subscription. Send out a notification email in case the subscription does transition from a lower status into status 'IN_PROGRESS'. This endpoint does not require email validation to support an interactive booking process also for non-logged in users. As a result of this reduced security requirements, account identifiers in the return object will be masked with an 'XXX' for normal users. This limitation does not apply to subscription managers.","description":"","operationId":"updateSubscription","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the subscription to update.","required":true,"type":"integer"},{"in":"body","name":"body","description":"The comment details","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateSubscriptionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Subscription"}},"400":{"description":"INVALID_PARAMETER: invalid parameter; see error details."},"404":{"description":"NOT_FOUND: No subscription with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only PUT is allowed; NOT_PERMITTED: The given action is not permitted."},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a fully authenticated subscription manager to change the account holder or perform internal, reserved or non-linear status transitions. Also, subscription administrators may edit any subscription.","ROLE_USER":"Requires an authenticated user.","ROLE_SUBSCRIPTION_ADMIN":"Requires a fully authenticated subscription manager to change the account holder or perform internal, reserved or non-linear status transitions. Also, subscription administrators may edit any subscription."}}},"/v1/subscriptionForms":{"get":{"tags":["subscriptionForms"],"summary":"Generate an empty cashback subscription form.","description":"","operationId":"generateEmptySubscriptionForm","consumes":["application/json"],"produces":["application/pdf"],"parameters":[{"name":"isNewDepot","in":"query","description":"Generate forms for new depot (if true) or and advisor change (if false).","required":true,"type":"boolean"},{"name":"bic","in":"query","description":"Generate forms for the given bank.","required":true,"type":"string"},{"name":"formType","in":"query","description":"Generate a form for a single, junior, joint or VL depot. Allowed values are Einzel, Gemeinschaft, Junior, VL","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"type":"object"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}},"/v1/symbols/{isinOrWkn}":{"get":{"tags":["symbols"],"summary":"Search securities by ISIN or WKN","description":"","operationId":"findByIsinOrWkn","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"isinOrWkn","in":"path","description":"Search symbols by the given ISIN or WKN.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SymbolList"}},"400":{"description":"INVALID_PARAMETER: Not a valid ISIN or WKN"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/symbols/{quoteProvider}/{id}":{"get":{"tags":["symbols"],"summary":"Get a symbol by quote provider and ticker","description":"","operationId":"getByQuoteProviderAndTicker","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"quoteProvider","in":"path","description":"The quote provider.","required":true,"type":"string","enum":["tte","ing","none","quandl","rentablo","crypto"]},{"name":"id","in":"path","description":"The ticker symbol.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Symbol"}},"400":{"description":"INVALID_PARAMETER: check error message for details"},"404":{"description":"NOT_FOUND: no such ticker symbol was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/symbols":{"get":{"tags":["symbols"],"summary":"Search securities by the given name (wildcard search)","description":"","operationId":"searchSymbol","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Search symbols by the given Name (wildcard search).","required":false,"type":"string"},{"name":"type","in":"query","description":"Filter by the given investment type.","required":false,"type":"string","enum":["11_stock","21_fund","31_bond","41_cash","51_certos","61_pmetals","71_massets","81_fcurr","22_etf","91_managed"]},{"name":"forceExactMatch","in":"query","description":"Force an exact match.","required":false,"type":"boolean"},{"name":"perAssetType","in":"query","description":"The maximum number of result hits per asset type; default is 255","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SymbolList"}},"400":{"description":"INVALID_PARAMETER: Not a valid ISIN or WKN"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["symbols"],"summary":"Assign a preferred quote to the given create or update investment params. Returns the input data structure, but with the attributes tickerSymbol, quoteProvider and quoteCurrency assigned. Quotes are looked up using the given ISIN or WKN. If you are unsure if handling an ISIN or WKN (e.g. because a user imported data with an unclear mapping) then assign the field as ISIN. This operation will perform a syntax check and thereby separate ISINs from WKNs by format.","description":"","operationId":"assignPreferredQuote","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateInvestmentParamsList"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/CreateOrUpdateInvestmentParamsList"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/symbols":{"get":{"tags":["symbols"],"summary":"Search securities by the given name (wildcard search)","description":"","operationId":"searchSymbolV2","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Search symbols by the given Name (wildcard search). Use only one of the following parameters: search, isinOrWkn","required":false,"type":"string"},{"name":"isinOrWkn","in":"query","description":"Search symbols by the given ISIN or WKN. Use only one of the following parameters: search, isinOrWkn","required":false,"type":"string"},{"name":"type","in":"query","description":"Filter by the given investment type.","required":false,"type":"array","items":{"type":"string","enum":["11_stock","21_fund","31_bond","41_cash","51_certos","61_pmetals","71_massets","81_fcurr","22_etf","91_managed"]},"collectionFormat":"multi"},{"name":"perAssetType","in":"query","description":"The maximum number of result hits per asset type; default is 25","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/SymbolListV2"}},"400":{"description":"INVALID_PARAMETER: Not a valid ISIN or WKN"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/tags":{"get":{"tags":["tags"],"summary":"Search investment tags","description":"","operationId":"listAndSearchAllTags","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Search tags containing the given search string (key-insensitive like query)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Search tags attached to the given investments.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TagList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/tags/{id}":{"get":{"tags":["tags"],"summary":"Get an investment tag","description":"","operationId":"getTag","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Get the given investment tag","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Tag"}},"404":{"description":"UNKNOWN_ENTITY: Tag not found"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/taxation/{id}/investments":{"get":{"tags":["taxation"],"summary":"Estimate the applicable tax if the given booking would be applied to the investment.","description":"","operationId":"estimateTaxForInvestment","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the investment to check tax estimates for","required":true,"type":"integer"},{"in":"body","name":"body","description":"The estimate taxation parameters","required":true,"schema":{"$ref":"#/definitions/EstimateTaxForInvestmentParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/RealizedGain"}},"400":{"description":"INVALID_PARAMETER: Invalid transaction type provided or other error."},"404":{"description":"NOT_FOUND: Investment with the given ID was not found."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given parameters would produce an invalid transaction - tax estimation is not possible"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/timeDependentProperties":{"get":{"tags":["timeDependentProperties"],"summary":"Get a list of time dependent properties. Time dependent properties can be used for dynamic billing, taxation or the generation of vouchers depending on the type. Currently, the only supported type is 'voucher'.","description":"","operationId":"listAndSearchAllTimeDependentProperties","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve time dependent properties with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"property","in":"query","description":"Retrieve all properties matching the given string","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TimeDependentPropertyList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a fully authenticated subscription administrator."}},"post":{"tags":["timeDependentProperties"],"summary":"Add a time dependent property.","description":"","operationId":"createTimeDependentProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateTimeDependentPropertyParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TimeDependentProperty"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The time dependent property is not valid."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a fully authenticated subscription manager."}}},"/v1/timeDependentProperties/{id}":{"get":{"tags":["timeDependentProperties"],"summary":"Get the given time dependent property.","description":"","operationId":"timeDependentProperties/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the given time dependent property","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TimeDependentProperty"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a fully authenticated subscription administrator."}},"put":{"tags":["timeDependentProperties"],"summary":"Update a time dependent property.","description":"","operationId":"updateTimeDependentProperty","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Update the given time dependent property","required":true,"type":"integer"},{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateTimeDependentPropertyParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TimeDependentProperty"}},"404":{"description":"NOT_FOUND: Time dependent property with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The time dependent property is not valid."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires a fully authenticated subscription manager."}}},"/v1/tppCertificates":{"get":{"tags":["tppCertificates"],"summary":"List and search all TPP certificates","description":"","operationId":"listAndSearchAllTppCertificates","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableTppCertificateList"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}},"post":{"tags":["tppCertificates"],"summary":"Upload a client certificate. QWAC certificate is used to verify your identity by the bank during the TLS handshake. QsealC certificate is used to sign the requests to the bank.","description":"","operationId":"createTppCertificate","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create parameters","required":true,"schema":{"$ref":"#/definitions/CreateTppCertificateParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppCertificate"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}}},"/v1/tppCertificates/{id}":{"get":{"tags":["tppCertificates"],"summary":"Get the certificate with the given ID","description":"","operationId":"tppCertificates/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Get the tpp certificate with the given ID","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppCertificate"}},"404":{"description":"NOT_FOUND: Tpp certificate with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}},"delete":{"tags":["tppCertificates"],"summary":"Delete a tpp certificate","description":"","operationId":"deleteTppCertificate","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the tpp certificate to delete","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Tpp certificate deleted"},"404":{"description":"NOT_FOUND: Tpp certificate with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}}},"/v1/tppCredentials":{"get":{"tags":["tppCredentials"],"summary":"List and search all TPP credentials","description":"","operationId":"listAndSearchAllTppCredentials","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Returns only the TPP credentials belonging to those banks whose 'name', 'blz', or 'bic' contains the given search string (the matching works case-insensitive).
Note: If the given search string consists of several terms (separated by whitespace), then ALL of these terms must apply to a bank in order for it to get included into the result.","required":false,"type":"string"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableTppCredentialResources"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}},"post":{"tags":["tppCredentials"],"summary":"Upload TPP credentials for a TPP Authentication Group.","description":"","operationId":"createTppCredential","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateTppCredentialParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppCredentials"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}},"put":{"tags":["tppCredentials"],"summary":"Update TPP credentials for a TPP Authentication Group.","description":"","operationId":"updateTppCredential","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateTppCredentialParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppCredentials"}},"404":{"description":"NOT_FOUND: Tpp credential with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}}},"/v1/tppCredentials/{id}":{"get":{"tags":["tppCredentials"],"summary":"Get the credential set with the given ID","description":"","operationId":"tppCredentials/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Get the tpp credential with the given ID","required":true,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppCredentials"}},"404":{"description":"NOT_FOUND: Tpp credential with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}},"delete":{"tags":["tppCredentials"],"summary":"Delete a tpp credential","description":"","operationId":"deleteTppCredential","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the tpp credential to delete","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Tpp credential deleted"},"404":{"description":"NOT_FOUND: Tpp credential with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}}},"/v1/tppCredentials/tppAuthenticationGroups":{"get":{"tags":["tppCredentials"],"summary":"List and search all TPP authentication groups","description":"","operationId":"listAndSearchAllTppAuthenticationGroups","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"name","in":"query","description":"Only the tpp authentication groups with name matching the given one should appear in the result list.","required":false,"type":"string"},{"name":"bankBlz","in":"query","description":"Search by connected banks: only the banks with BLZ matching the given one should appear in the result list.","required":false,"type":"string"},{"name":"bankName","in":"query","description":"Search by connected banks: only the banks with name matching the given one should appear in the result list.","required":false,"type":"string"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableTppAuthenticationGroupResources"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_FINAPI_MANDATOR_ADMIN":"Requires an authenticated finAPI mandator administrator."}}},"/v1/tppWebForms/{id}":{"get":{"tags":["tppWebForms"],"summary":"Get the given web-form","description":"","operationId":"tppWebForms/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the web form to retrieve (this is a random ID token)","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppWebForm"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: TppWebForm with the given ID was not found or insufficient privileges"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}}},"/v1/tppWebForms":{"post":{"tags":["tppWebForms"],"summary":"Initiate the TPP web-form flow by creating a new web-form. The web-form will contain the redirect\n URL (starting with https://rentablo.de) required to execute the web-form flow. After web-form creation, you must\n redirect the user to the given redirect URL","description":"","operationId":"createTppWebForm","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"A create tpp web form params object. For creating web forms, the bankId must be set\n and the bankConnectionId property should be empty.","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateTppWebFormParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppWebForm"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/tppWebForms/{id}":{"get":{"tags":["tppWebForms"],"summary":"Get the given web-form","description":"","operationId":"v2/tppWebForms/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the web form to retrieve (this is a random ID token)","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppWebForm"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: TppWebForm with the given ID was not found or insufficient privileges"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required."}},"put":{"tags":["tppWebForms"],"summary":"Update a TPP web-form with the import process status. This endpoint is intended for use\n by the wealthAPI import flow and will update the web-form status according to the import progress","description":"","operationId":"v2/updateTppWebForm","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the web form to update (this is a random ID token)","required":true,"type":"string"},{"in":"body","name":"body","description":"An update tpp web form params object. Currently, only updating of the bankConnectionID\n is supported.","required":true,"schema":{"$ref":"#/definitions/UpdateTppWebFormV2Params"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Web-Form updated"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v2/tppWebForms":{"post":{"tags":["tppWebForms"],"summary":"Initiate the TPP web-form flow by creating a new web-form. The web-form will contain the redirect\n URL (starting with https://rentablo.de) required to execute the web-form flow. After web-form creation, you must\n redirect the user to the given redirect URL","description":"","operationId":"v2/createTppWebForm","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"A create tpp web form params object. For creating web forms, the bankId must be set\n and the bankConnectionId property should be empty.","required":true,"schema":{"$ref":"#/definitions/CreateTppWebFormV2Params"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/TppWebForm"}},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/transactions/{externalId}/byExternalId":{"delete":{"tags":["transactions"],"summary":"Delete a cash Transaction by external ID. This is a convenience routine typically used by\n SaaS processes working on booking data.","description":"","operationId":"deleteTransactionByExternalId","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"externalId","in":"path","description":"External ID of the transaction to delete","required":true,"type":"string"},{"name":"keepData","in":"query","description":"Keep the data by just marking the record as deleted, instead of physically deleting it.\n Default is false (i.e. to physically delete).","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Transaction deleted"},"404":{"description":"NOT_FOUND: Transaction with the given external ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"406":{"description":"VALIDATION_ERROR: Deleting this transaction would lead to inconsistencies."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/transactions/assignCategory":{"put":{"tags":["transactions"],"summary":"Assign the given transaction category to the given transaction","description":"","operationId":"assignCategory","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID(s) of the transactions to assign a category to","required":true,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"categoryId","in":"query","description":"ID of the category to assign","required":true,"type":"integer"},{"name":"trainCategorization","in":"query","description":"Controls whether finAPI's categorization system should learn from the given categorization(s). If set to 'true', then the user's categorization rules will be updated so that similar transactions will get categorized accordingly in future. If set to 'false', then the service will simply change the category of the given transaction(s), without updating the user's categorization rules. The field defaults to 'true' if not specified.","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/IdentifierList"}},"404":{"description":"NOT_FOUND: Transaction with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/transactions":{"get":{"tags":["transactions"],"summary":"Get or search a list of Transactions","description":"","operationId":"listAndSearchAllTransaction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve Transactions with the given IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"accountId","in":"query","description":"Retrieve Transactions for the given Accounts","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"depotId","in":"query","description":"Retrieve Transactions related to investments residing inside the given depots. Note that this parameter will be ignored if you also provide investmentIds.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"insuranceId","in":"query","description":"Retrieve Transactions for the given insurance; setting this parameter will ignore the 'accountId' or 'depotId' parameter.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"investmentId","in":"query","description":"Retrieve Transactions for the given investments","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"finApiId","in":"query","description":"(Deprecated - use externalId) Retrieve Transactions with the given finAPI IDs","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"externalId","in":"query","description":"Retrieve Transactions with the given external IDs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"type","in":"query","description":"Retrieve transactions having the given type, allowed values are withdrawal, deposit, interest, tax_refund, other_gains.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"wkn","in":"query","description":"Retrieve Transactions belonging to Investments with the given WKNs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve Transactions belonging to Investments with the given ISINs","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"tickerSymbol","in":"query","description":"Retrieve Transactions belonging to Investments with the given ticker symbols","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"currency","in":"query","description":"Retrieve Transactions in the given currencies (3-letter ISO code)","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"minAmount","in":"query","description":"Retrieve Transactions with amount greater or equal than the given minAmount","required":false,"type":"number"},{"name":"maxAmount","in":"query","description":"Retrieve Transactions with amount less or equal than the given maxAmount","required":false,"type":"number"},{"name":"minDate","in":"query","description":"Retrieve Transactions with date after or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"maxDate","in":"query","description":"Retrieve Transactions with date before or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"skipManuallyCreatedTransactions","in":"query","description":"Skip transactions that were manually created (i.e. not imported from a bank).","required":false,"type":"boolean"},{"name":"includeAdjustingEntries","in":"query","description":"Include adjusting entries. Adjusting entries are cash transactions created whenever the account balance will fall below zero. This is a convenience feature for manually maintained depots.","required":false,"type":"boolean"},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableTransactionList"}},"400":{"description":"INVALID_PARAMETER: invalid parameters given, see error details.
NO_FIN_API_ACCOUNT: The given user does not have a finAPI account yet. Please initiate account creation by importing at least one bank connection."},"404":{"description":"NOT_FOUND: None of the provided account IDs could be found; or the user has no accounts."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error. INVALID_PARAMETER: invalid parameter; see error details."},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["transactions"],"summary":"Create a cash transaction.","description":"","operationId":"createCashTransaction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The transaction parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateTransactionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Transaction"}},"404":{"description":"SC_NOT_FOUND: The given account could not be found."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction is not valid"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/transactions/{id}":{"get":{"tags":["transactions"],"summary":"Get a Transaction","description":"","operationId":"transactions/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the transaction to retrieve","required":true,"type":"integer"},{"name":"format","in":"query","description":"Deliver a CSV file if set to 'csv'; default is JSON.","required":false,"type":"string","enum":["csv","json"]},{"name":"includeRemoteSepaFields","in":"query","description":"Include SEPA transaction data stored on the finApi cloud. Note that this will slow down the request somewhat, as remote data must be polled in.","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Transaction"}},"404":{"description":"NOT_FOUND: Transaction with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["transactions"],"summary":"Update a cash transaction.","description":"","operationId":"updateCashTransaction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the transaction to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The transaction parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateTransactionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Transaction"}},"404":{"description":"SC_NOT_FOUND: The given account could not be found."},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction is not valid"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["transactions"],"summary":"Delete a cash Transaction","description":"","operationId":"deleteTransaction","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the transaction to delete","required":true,"type":"integer"},{"name":"keepData","in":"query","description":"Keep the data by just marking the record as deleted, instead of physically deleting it.\n Default is false (i.e. to physically delete).","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Transaction deleted"},"404":{"description":"NOT_FOUND: Transaction with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"406":{"description":"VALIDATION_ERROR: Deleting this transaction would lead to inconsistencies."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/transactions/{id}/detectIsinOrWkn":{"get":{"tags":["transactions"],"summary":"Detect the ISIN / WKN contained within a transaction purpose.","description":"","operationId":"/{id}/detectIsinOrWkn","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the transaction to detect ISIN or WKN from","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Tag"}},"404":{"description":"NOT_FOUND: Transaction with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/transactions/batch":{"post":{"tags":["transactions"],"summary":"Create a set of cash transactions for the given account.","description":"","operationId":"batchCreateCashTransactions","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The batch transaction creation parameters","required":true,"schema":{"$ref":"#/definitions/CreateBatchTransactionParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Transactions created."},"404":{"description":"SC_NOT_FOUND: The given account could not be found."},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The transaction(s) are not valid"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/transactions/mt940":{"get":{"tags":["transactions"],"summary":"Get transactions for the given cash account in MT940 format; a widely used SWIFT standard. See https://www.sepaforcorporates.com/swift-for-corporates/account-statement-mt940-file-format-overview for details on this format.
Data my be returned in plain format (no brackets) or in the SWIFT message format (with header in brackets).","description":"","operationId":"mt940","consumes":["application/json"],"produces":["text/plain charset=utf-8"],"parameters":[{"name":"accountId","in":"query","description":"Retrieve transactions for the given cash Account","required":true,"type":"integer"},{"name":"minDate","in":"query","description":"Retrieve Transactions with date after or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"},{"name":"maxDate","in":"query","description":"Retrieve Transactions with date before or equal than the given date; format is yyyy-MM-dd (US Format)","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"The transactions in MT940 format (a UTF-8 encoded text file)"},"404":{"description":"NOT_FOUND: None of the provided account IDs could be found; or the user has no accounts."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error. INVALID_PARAMETER: invalid parameter; see error details."},"408":{"description":"REQUEST_TIMEOUT: Request to finAPI server timed out"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/changePassword":{"put":{"tags":["users"],"summary":"Change the logged in users password by supplying the new as well as the current password. A new login (or API token) may be necessary after password change.","description":"","operationId":"changePassword","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The user details","required":true,"schema":{"$ref":"#/definitions/UpdatePasswordParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Password changed"},"401":{"description":"The current password is invalid"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/changeEmail":{"post":{"tags":["users"],"summary":"Finalize the change email workflow for the currently logged in user.","description":"","operationId":"changeEmail","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"emailChangeToken","in":"query","description":"The email change token.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Email changed."},"400":{"description":"INVALID_PARAMETER: The given email address is invalid or already assigned; see error details"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/myself":{"get":{"tags":["users"],"summary":"Get myself (the currently logged in user instance)","description":"","operationId":"users/myself","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/User"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"User with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users":{"get":{"tags":["users"],"summary":"Find a User (as Administrator) belonging to the administrators mandator","description":"","operationId":"listAndSearchAllUsers","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"search","in":"query","description":"Search users matching the given search string (email, firstName, lastName)","required":false,"type":"string"},{"name":"id","in":"query","description":"Retrieve the users with the given ID(s). User IDs must match your mandator scope.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"fullWildcard","in":"query","description":"Perform a full wildcard search (slow); default is false","required":false,"type":"boolean"},{"name":"page","in":"query","description":"Result page that you want to retrieve.","required":false,"type":"integer"},{"name":"perPage","in":"query","description":"Maximum number of records per page. Can be at most 500. NOTE: Due to its validation and visualization, the swagger frontend might show very low performance, or even crashes, when a service responds with a lot of data. It is recommended to use a HTTP client like Postman or DHC instead of our swagger frontend for service calls with large page sizes.","required":false,"type":"integer"},{"name":"order","in":"query","description":"Determines the order of the results. You can use any of the given query parameters for ordering. The default order for all services is 'id asc'.","required":false,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/PageableUserList"}},"400":{"description":"INVALID_PARAMETER: given search parameter is invalid"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an authenticated subscription management administrator.","ROLE_USER_MANAGEMENT":"Requires an authenticated administrator. Scope is limited to your mandator.","ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator.","ROLE_MANDATOR_CREDENTIALS":"Requires client credentials. Scope is limited to your mandator.","ROLE_B2B_ADMIN":"Requires an authenticated B2B administrator."}},"delete":{"tags":["users"],"summary":"Permanently unregister the currently logged in user instance. The user will be logged out upon successful unregistration.","description":"","operationId":"deleteUser","consumes":["application/json"],"produces":["application/json"],"parameters":[],"security":[{"Bearer":[]}],"responses":{"200":{"description":"User unregistered."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"409":{"description":"DATA_INTEGRITY_ERROR: The user is still holding active subscriptions. Please terminate subscriptions before deleting."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/initiateEmailChange":{"post":{"tags":["users"],"summary":"Initiate the email change process by generating a confirmation token and sending it out to the new email address. Note that the email address remains unchanged until the email change flow is complete.","description":"","operationId":"initiateEmailChange","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"email","in":"query","description":"The new email address.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Token sent to new email address"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"409":{"description":"This email address is already assigned."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/{username}":{"put":{"tags":["users"],"summary":"Update the user with the given username. This operation is powerful and thus limited to administrators.\n Note that changing a users mandator requires the executing user to be in role ROLE_MANDATOR_ADMIN.","description":"","operationId":"updateUser","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"username","in":"path","description":"Username or email of the user to update. An update with ID is not possible for security reasons.","required":true,"type":"string"},{"in":"body","name":"body","description":"The user details","required":true,"schema":{"$ref":"#/definitions/UpdateUserParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/User"}},"404":{"description":"NOT_FOUND: User with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER_MANAGEMENT":"Requires an authenticated user administrator.","ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator. Required to change a users mandator.","ROLE_MANDATOR_CREDENTIALS":"Perform this operation with client credentials (mandator level login)."}},"delete":{"tags":["users"],"summary":"Permanently unregister the user identified by the given username / email. This endpoint is\n accessible at mandator level and allows authentication with with mandator credentials.","description":"","operationId":"deleteUserByUsername","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"username","in":"path","description":"Username or email of the user to delete. Deletion with ID is not possible for security reasons.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"User unregistered."},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"409":{"description":"DATA_INTEGRITY_ERROR: The user is still holding active subscriptions. Please terminate subscriptions before deleting."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_MANDATOR_CREDENTIALS":"Requires client credentials."}}},"/v1/users/{id}":{"get":{"tags":["users"],"summary":"Get a User (as Administrator) belonging to the administrators mandator.","description":"","operationId":"users/{id}","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the user to retrieve; use '0' to retrieve the currently logged in user.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/User"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"User with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an authenticated subscription management administrator.","ROLE_USER_MANAGEMENT":"Requires an authenticated administrator. Scope is limited to your mandator.","ROLE_MANDATOR_ADMIN":"Requires an authenticated mandator administrator.","ROLE_MANDATOR_CREDENTIALS":"Requires client credentials. Scope is limited to your mandator.","ROLE_B2B_ADMIN":"Requires an authenticated B2B administrator."}}},"/v1/userProfiles":{"get":{"tags":["userProfiles"],"summary":"Get a user profile","description":"","operationId":"userProfile","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"ID of the profile to retrieve; will retrieve the currently logged in users profile if not specified. For 'standard users' (ROLE_USER) only public data is included unless the user is viewing his own profile","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Profile"}},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"User with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_SUBSCRIPTION_MANAGEMENT":"Requires an authenticated subscription management administrator to include restricted personal information.","ROLE_USER_MANAGEMENT":"Requires an authenticated user administrator to include restricted personal information.","ROLE_USER":"Requires an authenticated user. Restricted personal information will only be included for the users own profile.","ROLE_B2B_ADMIN":"Requires an authenticated B2B administrator to include restricted personal information."}}},"/v1/userProfiles/{id}":{"put":{"tags":["userProfiles"],"summary":"Update a users profile","description":"","operationId":"updateUserProfile","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the profile to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The profile parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateProfileParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Profile"}},"404":{"description":"NOT_FOUND: Profile with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/userProfiles/{id}/profileImage":{"get":{"tags":["userProfiles"],"summary":"Get a users profile image, if present","description":"","operationId":"profileImage","consumes":["application/json"],"produces":["application/json","image/png"],"parameters":[{"name":"id","in":"path","description":"Retrieve the profile image for the profile with the given ID","required":true,"type":"integer"},{"name":"thumbnail","in":"query","description":"Return the image as thumbnail (this is a version with reduced image dimensions); default is false","required":false,"type":"boolean"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"OK, retrieved image"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"},"404":{"description":"User with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["userProfiles"],"summary":"Set or update a users profile image","description":"","operationId":"setUserProfileImage","consumes":["multipart/form-data"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the profile to update","required":true,"type":"integer"},{"name":"image","in":"formData","description":"The profile image to upload","required":true,"type":"file"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Image uploaded"},"404":{"description":"NOT_FOUND: Profile with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["userProfiles"],"summary":"Delete a users profile image","description":"","operationId":"deleteUserProfileImage","consumes":["multipart/form-data"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the profile to update","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Image deleted"},"404":{"description":"NOT_FOUND: Profile with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/userProfiles/{id}/newsletterSubscription":{"get":{"tags":["userProfiles"],"summary":"Get the newsletter subscription status for the given profile","description":"","operationId":"getNewsletterSubscription","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the newsletter subscription for the given profile ID","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/NewsletterSubscriptionStatus"}},"404":{"description":"Profile with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["userProfiles"],"summary":"Subscribe the given profile to the newsletter","description":"","operationId":"subscribeToNewsletter","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the profile to subscribe","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/NewsletterSubscriptionStatus"}},"404":{"description":"NOT_FOUND: Profile with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["userProfiles"],"summary":"Unsubscribe the given profile from the newsletter","description":"","operationId":"unsubscribeFromNewsletter","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the profile to unsubscribe from the newsletter","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"OK: Profile unsubscribed from newsletter"},"404":{"description":"NOT_FOUND: Profile with the given ID was not found or insufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/users/resetPassword":{"post":{"tags":["users"],"summary":"Reset a users password and unlock the account (if required).","description":"","operationId":"resetPassword","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"confirmationToken","in":"query","description":"The user confirmation token; which is sent to the user via email.","required":true,"type":"string"},{"name":"password","in":"query","description":"The new password.","required":true,"type":"string"}],"responses":{"200":{"description":"Password reset and acocunt unlocked."},"401":{"description":"Invalid or expired token"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required"}}},"/v1/users/confirm":{"post":{"tags":["users"],"summary":"Confirm a user using the confirmation token sent via email.","description":"","operationId":"confirmUser","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"confirmationToken","in":"query","description":"The user confirmation token; which is sent to the user via email.","required":true,"type":"string"}],"responses":{"200":{"description":"User confirmed"},"401":{"description":"Invalid or expired token"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"406":{"description":"VALIDATION_ERROR: The given entity is not valid; see error details."},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required"}}},"/v1/users/resendRegistrationConfirmation":{"post":{"tags":["users"],"summary":"Resend the registration confirmation email.","description":"","operationId":"resendRegistrationConfirmation","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"email","in":"query","description":"The users email address.","required":true,"type":"string"}],"responses":{"200":{"description":"Email sent (will also respond with OK if no such email was found)"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required"}}},"/v1/users/initiatePasswordReset":{"post":{"tags":["users"],"summary":"Initiate the password reset process by generating a confirmation token and sending it out to the user by email. Note that the operation will always return status 'OK' to prevent an attacker to systematically screen for valid email addresses.","description":"","operationId":"initiatePasswordReset","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"email","in":"query","description":"The users email address.","required":true,"type":"string"}],"responses":{"200":{"description":"Email sent (will also respond with OK if no such email was found)"},"405":{"description":"Method Not Allowed. Only POST is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"No authentication is required"}}},"/v1/watchlists/{id}":{"get":{"tags":["watchlists"],"summary":"Get a watchlist.","description":"","operationId":"getWatchlist","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the given watchlist.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Watchlist"}},"400":{"description":"NOT_FOUND: No watchlist with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["watchlists"],"summary":"Save the changes to a watchlist.","description":"","operationId":"editWatchlist","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the watchlist to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateWatchlistParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Watchlist"}},"404":{"description":"Watchlist was not found our you do not have sufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: A domain validation error occurred, please refer to error description"},"500":{"description":"UNEXPECTED_ERROR: An unexpected error occurred"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["watchlists"],"summary":"Delete a Watchlist, including all of its entries.","description":"","operationId":"deleteWatchlist","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the watchlist to delete. This will also delete all watchlist entries assigned to the list.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Entity deleted"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"DATA_INTEGRITY_ERROR: Could not delete; please contact support. UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Watchlist with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/watchlists":{"get":{"tags":["watchlists"],"summary":"Get the selected watchlists, or all watchlists for the currently logged in user.","description":"","operationId":"listAndSearchAllWatchlists","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve the given watchlists.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"userId","in":"query","description":"Retrieve all accounts for the given user in anonymized watchlist format. The current user must be a friend of the logged in user in order for this endpoint to work.","required":false,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WatchlistList"}},"400":{"description":"NOT_FOUND: The given entity could not be found or insufficient privileges, see error details."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["watchlists"],"summary":"Create a watchlist.","description":"","operationId":"createWatchlist","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateWatchlistParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/Watchlist"}},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: A domain validation error occurred, please refer to error description. Most likely a watchlist with the same name exits."},"500":{"description":"UNEXPECTED_ERROR: An unexpected error occurred"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/watchlistEntries/{id}":{"get":{"tags":["watchlistEntries"],"summary":"Get a watchlist entry.","description":"","operationId":"getWatchlistEntry","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"Retrieve the given watchlist entry.","required":true,"type":"integer"},{"name":"quoteQuality","in":"query","description":"A quality setting for quote data. Better quality may lead to slower response times.\n Default is PERFORMANCE. The available option are:\n PERFORMANCE: use a short-time caching layer for optimal response times\n OPTIMAL: request real-time quotes across available stock exchanges and choose the most recent\n quote. This requires a lookup against the quote data provider for each request and might\n does lead to slower response times; depending on your quote provider performance. This\n setting is currently only available for quote provider ovfs.","required":false,"type":"string","enum":["PERFORMANCE","OPTIMAL"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WatchlistEntry"}},"400":{"description":"NOT_FOUND: No watchlist entry with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"put":{"tags":["watchlistEntries"],"summary":"Save the changes to a watchlist entry.","description":"","operationId":"editWatchlistEntry","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the watchlist entry to update","required":true,"type":"integer"},{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateWatchlistEntryParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WatchlistEntry"}},"404":{"description":"Watchlist entry was not found our you do not have sufficient privileges"},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: A domain validation error occurred, please refer to error description"},"500":{"description":"UNEXPECTED_ERROR: An unexpected error occurred"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"delete":{"tags":["watchlistEntries"],"summary":"Delete a watchlist entry.","description":"","operationId":"deleteWatchlistEntry","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"path","description":"ID of the watchlist entry.","required":true,"type":"integer"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"Entity deleted"},"405":{"description":"Method Not Allowed. Only DELETE is allowed"},"500":{"description":"DATA_INTEGRITY_ERROR: Could not delete; please contact support. UNEXPECTED_ERROR: Internal error"},"404":{"description":"NOT_FOUND: Watchlist with the given ID was not found or insufficient privileges"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/watchlistEntries":{"get":{"tags":["watchlistEntries"],"summary":"Get the selected watchlist entries.","description":"","operationId":"listAndSearchAllWatchlistEntries","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"id","in":"query","description":"Retrieve the given watchlist entries.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"watchlistId","in":"query","description":"Retrieve watchlist entries belonging to the given watchlists. This filter will be combined with all other given parameters.","required":false,"type":"array","items":{"type":"integer"},"collectionFormat":"multi"},{"name":"isin","in":"query","description":"Retrieve watchlist entries matching the given ISINs.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"tickerSymbol","in":"query","description":"Retrieve watchlist entries with the given ticker symbols.","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi"},{"name":"name","in":"query","description":"Wildcard search - Retrieve watchlist entries matching the given name.","required":false,"type":"string"},{"name":"quoteQuality","in":"query","description":"A quality setting for quote data. Better quality may lead to slower response times.\n Default is PERFORMANCE. The available option are:\n PERFORMANCE: use a short-time caching layer for optimal response times\n OPTIMAL: request real-time quotes across available stock exchanges and choose the most recent\n quote. This requires a lookup against the quote data provider for each request and might\n does lead to slower response times; depending on your quote provider performance. This\n setting is currently only available for quote provider ovfs.","required":false,"type":"string","enum":["PERFORMANCE","OPTIMAL"]}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WatchlistEntryList"}},"400":{"description":"NOT_FOUND: No watchlist with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}},"post":{"tags":["watchlistEntries"],"summary":"Create a watchlist entry.","description":"","operationId":"createWatchlistEntry","consumes":["application/json"],"produces":["application/json"],"parameters":[{"in":"body","name":"body","description":"The create or update parameters","required":true,"schema":{"$ref":"#/definitions/CreateOrUpdateWatchlistEntryParams"}}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WatchlistEntry"}},"405":{"description":"Method Not Allowed. Only PUT is allowed"},"406":{"description":"VALIDATION_ERROR: A domain validation error occurred, please refer to error description."},"500":{"description":"UNEXPECTED_ERROR: An unexpected error occurred"}},"x-roles":{"ROLE_USER":"Requires an authenticated user."}}},"/v1/watchlistEntries/preview":{"get":{"tags":["watchlistEntries"],"summary":"Build a watchlist entry record for previewing.","description":"","operationId":"preview","consumes":["application/json"],"produces":["application/json"],"parameters":[{"name":"name","in":"query","description":"The name of the security.","required":true,"type":"string"},{"name":"isin","in":"query","description":"The ISIN of the security.","required":true,"type":"string"},{"name":"tickerSymbol","in":"query","description":"The ticker symbol of the security; required for quote loockup.","required":true,"type":"string"},{"name":"quoteProvider","in":"query","description":"The quote provider of the security; required for quote lookup.","required":true,"type":"string"}],"security":[{"Bearer":[]}],"responses":{"200":{"description":"successful operation","schema":{"$ref":"#/definitions/WatchlistEntry"}},"400":{"description":"NOT_FOUND: No watchlist entry with the given ID was found or insufficient privileges."},"405":{"description":"Method Not Allowed. Only GET is allowed"},"500":{"description":"UNEXPECTED_ERROR: Internal error"}},"x-roles":{"IS_AUTHENTICATED_ANONYMOUSLY":"Does not require authentication."}}}},"securityDefinitions":{"Bearer":{"description":"JWT token necessary to use API calls","type":"apiKey","name":"Authorization","in":"header"}},"definitions":{"AbsoluteReturn":{"type":"object","properties":{"absoluteReturn":{"type":"number"},"investmentReference":{"$ref":"#/definitions/InvestmentReference"}}},"AbsoluteReturnList":{"type":"object","properties":{"absoluteReturns":{"type":"array","items":{"$ref":"#/definitions/AbsoluteReturn"}}}},"InvestmentReference":{"type":"object","required":["currency","hasValidIsin","hasValidTickerSymbol","id","isin","name","numberOfLots","quoteProvider","standardisedName","tickerSymbol","type"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical Identifier"},"tickerSymbol":{"type":"string","description":"The ticker symbol"},"quoteProvider":{"type":"string","description":"The quote provider belonging to the ticker symbol"},"hasValidTickerSymbol":{"type":"boolean","description":"Is the ticker symbol valid or a dummy (= only user defined quotes)"},"isin":{"type":"string","description":"The ISIN"},"hasValidIsin":{"type":"boolean","description":"Is the ISIN valid or a dummy (= auto-generated)"},"wkn":{"type":"string","description":"The WKN, if defined"},"type":{"type":"string","description":"The investment type"},"standardisedName":{"type":"string","description":"The investments standardised name"},"name":{"type":"string","description":"The investment name"},"numberOfLots":{"type":"number","description":"The number of lots; may be zero"},"currency":{"type":"string","description":"The investment currency"}}},"DateValuePair":{"type":"object","properties":{"date":{"type":"string","format":"date-time"},"value":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"volume":{"type":"number"},"isUserDefined":{"type":"boolean"}}},"DateValuePairList":{"type":"object","properties":{"dateValuePairs":{"type":"array","items":{"$ref":"#/definitions/DateValuePair"}}}},"AggregatedFundCommissionStatistics":{"type":"object","properties":{"portfolioCommissions":{"type":"object","description":"A list of portfolio commissions","additionalProperties":{"$ref":"#/definitions/FundCommissionStatistic"}},"totalPortfolioCommission":{"type":"number","description":"The total portfolio commission"},"cashbackAdvantage":{"description":"The amount a user would receive when using rentablo cashback","$ref":"#/definitions/CashbackAdvantage"}}},"CashbackAdvantage":{"type":"object","properties":{"commissionStatus":{"type":"string","description":"Indicates if action by the user is recommended","enum":["ACTION_REQUIRED","CHECK","OK","OPTIONAL"]},"cashbackAdvantage":{"type":"number","description":"The theoretical cashback advantage"}}},"FundCommissionStatistic":{"type":"object","properties":{"isin":{"type":"string"},"name":{"type":"string"},"bank":{"type":"string"},"amount":{"type":"number"},"percent":{"type":"number"},"discount":{"type":"number"}}},"Account":{"type":"object","required":["currency","iconUrl","id","name","type"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"type":{"type":"string","description":"The high-level account type; as assigned by the Rentablo SaaS platform. This type\n defines the behaviour of and the actions available on this account. I.e. only a depot may have investments and\n only a cash account has a balance.","enum":["01_depot","02_cash","04_insurance","05_material_assets"]},"isHidden":{"type":"boolean","description":"true if this account is marked hidden"},"typeFromBank":{"type":"string","description":"The detailed type of the account as defined by the account holding bank. This will be\n null if not provided or the account is manually maintained.","enum":["CHECKING","SAVINGS","CREDIT_CARD","DEPOT","LOAN","MEMBERSHIP","HOME_PURCHASE_SAVINGS","REFERENCE_ACCOUNT","FOREIGN_CURRENCY_ACCOUNT"]},"contraAccountId":{"type":"integer","format":"int64","description":"The ID of the contra account; only available if this is a depot. Each booking on a depot will result in a transaction on the contra account."},"depotIds":{"type":"array","description":"If this is a contra account: the IDs of all attached depots.","items":{"type":"integer","format":"int64"}},"name":{"type":"string","description":"The literal account name"},"balance":{"type":"number","description":"The account balance"},"currency":{"type":"string","description":"The account currency (3 letter ISO code)"},"taxRate":{"type":"number","description":"A default setting for the accounts tax rate; this may be used when deducting taxes."},"defaultCommission":{"type":"number","description":"A default setting fro the accounts booking commission; this may be used when applying commissions."},"implicitTransactions":{"type":"boolean","description":"Does this account have implicit cash management enabled; in this case bookings resulting in a negative balance will automatically create implicit transactions."},"externalId":{"type":"string","description":"The accounts external ID (finAPI, Netfonds, others); if any."},"finApiId":{"type":"integer","format":"int64","description":"DEPRECATED: use externalId instead! The accounts finAPI ID (if linked to a bank)."},"bankConnectionId":{"type":"integer","format":"int64","description":"The accounts bank connection ID (if linked to a bank via finAPI)."},"bankConnectionType":{"type":"string","description":"The accounts bank connection type (if linked to a bank).","enum":["WEALTH_API","FIN_API","NETFONDS"]},"preferredInterface":{"type":"string","description":"The accounts preferred bank connection interface (if any).","enum":["XS2A","FINTS_SERVER","WEB_SCRAPER"]},"bankName":{"type":"string","description":"The accounts literal bank name; if linked to a bank or defined by the user."},"bankCode":{"type":"string","description":"The accounts BIC; if linked to a bank or defined by the user."},"bankGroup":{"type":"string","description":"DEPRECATED: this field name is misleading; use bicGroup instead.\n A grouping of banks to a common slug like 'SPARKASSE'. Will contain the BIC itself\n if the given bank has only a single BIC."},"bicGroup":{"type":"string","description":"A grouping of banks to a common slug like 'SPARKASSE'. Will contain the BIC itself\n if the given bank has only a single BIC."},"iconUrl":{"type":"string","description":"Url to display the bank icon."},"iban":{"type":"string","description":"The accounts IBAN"},"accountHolderName":{"type":"string","description":"The account holder name"},"accountHolderIdentification":{"type":"string","description":"Bank's internal identification of the account holder."},"accountNumber":{"type":"string","description":"(National) account number"},"subAccountNumber":{"type":"string","description":"Account's sub-account-number"},"initialBalance":{"type":"number","description":"The earliest balance that we got at the start of the very first bank synchronization run"},"initialBalanceDate":{"type":"string","format":"date-time","description":"Date of this very first balance"},"activeAssets":{"type":"integer","format":"int32","description":"The number of active assets; this may be investments, material assets or insurances"},"lastManualSyncDate":{"type":"string","format":"date-time","description":"Date of the last manual synchronization"},"lastAutoSyncDate":{"type":"string","format":"date-time","description":"Date of the last automatic (via background job) synchronization"},"lastSyncDate":{"type":"string","format":"date-time","description":"Date of the last manual or automatic synchronization"},"hasSynchronizationIssues":{"type":"boolean","description":"Does the account have synchronization issues? This is typically a deviation between the security positions maintained locally and those delivered by the bank. Issues will typically resolved using a manual synchronization step"},"bankAccountTypeId":{"type":"integer","format":"int32","description":"DEPRECATED: use typeFromBank instead! Detailed type of the bank account; only available if linked to a bank. Type mappings are 1:checking, 2:savings, 3:creditCard, 4:security, 5:loan, 6:pocket, 7:membership, 8:bausparen.","enum":[1,2,3,4,5,6,7,8,21,22]},"subCategoryId":{"type":"integer","format":"int64","description":"A user defined sub-category"},"visibility":{"type":"string","description":"The visibility status; default is private","enum":["private","public"]},"publicId":{"type":"string","description":"The id for public portfolio sharing"}}},"AccountList":{"type":"object","properties":{"accounts":{"type":"array","description":"A list of accounts","items":{"$ref":"#/definitions/Account"}}}},"SyncStatus":{"type":"object","properties":{"accountId":{"type":"integer","format":"int64","description":"The id of the account"},"manualSyncRequired":{"type":"boolean","description":"Is manual sync required for the account"},"backgroundSyncPossible":{"type":"boolean","description":"Is background sync possible for the account"}},"description":"The sync status of an account"},"SyncStatusList":{"type":"object","properties":{"syncStatuses":{"type":"array","items":{"$ref":"#/definitions/SyncStatus"}}}},"LinkExistingAccountToBankParams":{"type":"object","properties":{"remoteAccountId":{"type":"integer","format":"int64"},"remoteContraAccountId":{"type":"integer","format":"int64"},"localToRemoteInvestmentMappings":{"type":"array","items":{"$ref":"#/definitions/LocalToRemoteInvestmentMapping"}}}},"LocalToRemoteInvestmentMapping":{"type":"object","properties":{"localInvestmentId":{"type":"integer","format":"int64"},"remoteInvestmentId":{"type":"integer","format":"int64"},"remoteInvestmentIsin":{"type":"string"},"remoteInvestmentName":{"type":"string"}}},"CreateOrUpdateAccountParams":{"type":"object","required":["name","type"],"properties":{"bankAccountTypeId":{"type":"integer","format":"int64","description":"The bank account type ID; as provided by the multibanking provider"},"type":{"type":"string","description":"The technical bank account type","enum":["01_depot","02_cash","03_user_defined","04_insurance","05_material_assets"]},"externalId":{"type":"string","description":"An external ID; only available if bankConnectionType is WEALTH_API; \n may only be set when creating the account. Must be unique for this user."},"bankConnectionId":{"type":"integer","format":"int64","description":"Identifier of the bank connection; if any. This attribute should typically be used\n during programmatic account creation when interacting with a multibanking API such as finAPI wor wealthAPI.\n If you find yourself setting this parameter in the frontend, this is most likely a mistake"},"bankConnectionType":{"type":"string","description":"The type of bank connection; if any; may only be set when creating the account","enum":["WEALTH_API"]},"isHidden":{"type":"boolean","description":"Mark this account as hidden, default is false"},"name":{"type":"string","description":"The bank account name"},"iban":{"type":"string","description":"The IBAN; may only be set when creating the account"},"accountNumber":{"type":"string","description":"The account number; a German legacy standard for identifying accounts. May only be set when creating the account"},"bic":{"type":"string","description":"The BIC"},"bankName":{"type":"string","description":"Name of the bank the account belongs to"},"currency":{"type":"string","description":"The account currency as 3-letter ISO code, e.g. EUR; default is EUR"},"defaultCommission":{"type":"number","description":"Pre-set default commission"},"visibility":{"type":"string","description":"Enable visibility for public, default is private","enum":["public","private"]},"enableImplicitTransactions":{"type":"boolean","description":"Enable implicit transactions, default is false"},"taxRate":{"type":"number","description":"A default tax rate"},"contraAccountId":{"type":"integer","format":"int64","description":"Assign the given contra account; or create a new one (the default). Ignored during updates"},"subCategoryId":{"type":"integer","format":"int64","description":"ID of this accounts sub-category (if any)"}}},"DepotTransferParams":{"type":"object","required":["dateOfTransfer","transferToAccountId"],"properties":{"transferToAccountId":{"type":"integer","format":"int64","description":"Transfer all assets into this account"},"dateOfTransfer":{"type":"string","format":"date-time","description":"The date of the transfer"},"transferFullLotsOnly":{"type":"boolean","description":"Restrict transfer to full lots, leaving leaving fractions of shares in the depot; default is false"}}},"AssetCategorization":{"type":"object","properties":{"cashByAccount":{"$ref":"#/definitions/CategoryTreeNode"},"investmentTypeAllocation":{"$ref":"#/definitions/CategoryTreeNode"},"insuranceTypeAllocation":{"$ref":"#/definitions/CategoryTreeNode"},"industryAllocation":{"$ref":"#/definitions/CategoryTreeNode"},"regionAllocation":{"$ref":"#/definitions/CategoryTreeNode"},"customAllocation":{"$ref":"#/definitions/CategoryTreeNode"}}},"CategoryTreeNode":{"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string"},"id":{"type":"string"},"investedCapital":{"type":"number"},"currentMarketValue":{"type":"number"},"children":{"type":"array","items":{"$ref":"#/definitions/CategoryTreeNode"}}}},"AccountHolderMayUpdateName":{"type":"object","required":["mayUpdateName"],"properties":{"mayUpdateName":{"type":"boolean","description":"True if we may update the name of any associated natural person, false otherwise.\n Background is, that we need to prevent name changes for account holders already having active or pending\n subscriptions. Such name changes would lead to inconsistent data between our systems and information\n collected by the bank."}}},"AccountHolderPayoutStatistic":{"type":"object","properties":{"email":{"type":"string","description":"The email under which to reach the account holder"},"accountHolderReference":{"description":"Reference to the account holder","$ref":"#/definitions/AccountHolderReference"},"subscriptionStart":{"type":"string","format":"date-time","description":"Start of the earliest subscription"},"lastPayout":{"type":"string","format":"date-time","description":"Date of the last received payout"},"totalReceivedCommission":{"type":"number","description":"Total commission received so far"},"hasRecentPayouts":{"type":"boolean","description":"Set true if there were recent payouts for this account holder"},"hasPayoutStopped":{"type":"boolean","description":"\"\"Set true if there were payouts before, but no recent ones; indicating payout for\n this account holder has ceded"}}},"AccountHolderPayoutStatisticList":{"type":"object","properties":{"accountHolderPayoutStatistics":{"type":"array","items":{"$ref":"#/definitions/AccountHolderPayoutStatistic"}}}},"AccountHolderReference":{"type":"object","required":["type"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"externalId":{"type":"string","description":"An external reference; e.g. a pool ID."},"type":{"type":"string","description":"The account holder type; default is PRIVATE","enum":["PRIVATE","COMPANY"]},"affiliatePartnerId":{"type":"string","description":"An external affiliate partner reference"},"firstName":{"type":"string","description":"The account holders first name (only primary account holder is considered)"},"lastName":{"type":"string","description":"The account holders last name (only primary account holder is considered)"}}},"AccountHolder":{"type":"object","required":["id","isSyncConsentRequired","isSyncEnabled","numberOfActiveOrTerminatedSubscriptions","type","userReference"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical ID"},"userReference":{"description":"The user the account holder is attached to.","$ref":"#/definitions/UserReference"},"externalId":{"type":"string","description":"An external reference; e.g. a pool ID."},"type":{"type":"string","description":"The account holder type; default is PRIVATE","enum":["PRIVATE","COMPANY"]},"affiliatePartnerId":{"type":"string","description":"An affiliate partner id; e.g. com.rentablo.partnerX."},"isSyncEnabled":{"type":"boolean","description":"Is account synchronization via Netfonds API enabled for this account holder?"},"isSyncConsentRequired":{"type":"boolean","description":"Is the users consent required to enable synchronization for this account holder?"},"lastSyncAttempt":{"type":"string","format":"date-time","description":"Timestamp of the last sync attempt"},"numberOfActiveOrTerminatedSubscriptions":{"type":"integer","format":"int32","description":"The number of subscription contracts that were received by us; the name fields of account holders with active or terminated subscriptions may not be changed."},"naturalPersons":{"type":"array","description":"A list of all natural persons this account holder is made of.","items":{"$ref":"#/definitions/NaturalPerson"}},"referenceAccount":{"description":"The reference account; used for cashback money transfers.","$ref":"#/definitions/BankAccount"},"additionalMailingAddress":{"description":"An optional additional mailing address; e.g. if the account holders have a second residence.","$ref":"#/definitions/Address"},"customFeeAgreement":{"description":"An optional custom fee agreement","$ref":"#/definitions/CustomFeeAgreement"},"investmentExperience":{"description":"The account holders investment experience according to MIFID standard.","$ref":"#/definitions/InvestmentExperience"}}},"Address":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical ID"},"street":{"type":"string","description":"The street name"},"streetNumber":{"type":"string","description":"The street number (alphanumeric)"},"city":{"type":"string","description":"The city"},"zip":{"type":"string","description":"The cities ZIP code"},"region":{"description":"The country","$ref":"#/definitions/Region"},"firstName":{"type":"string","description":"An optional first name linked to this address; useful for alternative mailing addresses"},"lastName":{"type":"string","description":"An optional last name linked to this address; useful for alternative mailing addresses"}}},"BankAccount":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"userReference":{"description":"The user the bank account belongs to","$ref":"#/definitions/UserReference"},"accountHolderReference":{"description":"The account serves as reference account for payments receivable by this account holder. Note that the account holder of the reference account may be different from the referenced account holder. E.g. the reference account holder is a child and commissions flow to the parents account.","$ref":"#/definitions/AccountHolderReference"},"type":{"type":"string","description":"The type / purpose of the account"},"bic":{"type":"string","description":"BIC of the bank account"},"iban":{"type":"string","description":"IBAN of the bank account"},"bankName":{"type":"string","description":"Bank name of the bank account"},"bankLocation":{"type":"string","description":"Bank location of the bank account"},"accountHolderFirstName":{"type":"string","description":"First name of the account holder; must match data provided to the bank"},"accountHolderLastName":{"type":"string","description":"Last name of the account holder; must match data provided to the bank"}}},"CrsTaxLiability":{"type":"object","required":["id","region","taxId"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"naturalPersonId":{"type":"integer","format":"int64","description":"Technical identifier of the natural person being liable to taxation"},"region":{"description":"The country","$ref":"#/definitions/Region"},"taxId":{"type":"string","description":"The country-specific tax-ID"}}},"CustomFeeAgreement":{"type":"object","required":["hasUpperBound"],"properties":{"creator":{"description":"The user who created the fee agreement","$ref":"#/definitions/UserReference"},"accountHolderReference":{"description":"The account holder the custom fee agreement applies to","$ref":"#/definitions/AccountHolderReference"},"type":{"type":"string","description":"The agreement type","enum":["cashback"]},"value":{"type":"number","description":"The value (in percent); 1 = 100%"},"hasUpperBound":{"type":"boolean","description":"Does the custom fee agreement have an upper bound. The rentablo fee will not raise\n above the upper bound; required for creation"},"upperBound":{"type":"number","description":"The upper bound for the custom fee agreement; ignored if hasUpperBound is false.\n If not given, the CASHBACK_100 fee will be considered as the upper bound"},"startsAt":{"type":"string","format":"date-time","description":"Start of the agreement"},"timestamp":{"type":"string","format":"date-time","description":"The creation or update timestamp"}}},"InvestmentExperience":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"accountHolderReference":{"$ref":"#/definitions/AccountHolderReference"},"domesticStocks":{"type":"integer","format":"int32"},"foreignStocks":{"type":"integer","format":"int32"},"domesticBonds":{"type":"integer","format":"int32"},"foreignBonds":{"type":"integer","format":"int32"},"funds":{"type":"integer","format":"int32"},"certificatesAndOptionsWithoutLeverage":{"type":"integer","format":"int32"},"certificatesAndOptionsWithLeverage":{"type":"integer","format":"int32"},"foreignCurrencyInvestments":{"type":"integer","format":"int32"},"otherInvestments":{"type":"integer","format":"int32"},"timestamp":{"type":"string","format":"date-time"}}},"NaturalPerson":{"type":"object","required":["accountHolderReference","countryOfBirth","dateOfBirth","firstName","gender","id","isMinor","isPrimaryAccountHolder","lastName","placeOfBirth"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"accountHolderReference":{"description":"A reference to the account holder the natural person belongs to","$ref":"#/definitions/AccountHolderReference"},"isPrimaryAccountHolder":{"type":"boolean","description":"The natural person is the 'primary' or first account holder, if true"},"gender":{"type":"integer","format":"int32","description":"The persons gender"},"firstName":{"type":"string","description":"The persons first name"},"lastName":{"type":"string","description":"The persons last name"},"academicTitle":{"type":"string","description":"The persons academic title"},"dateOfBirth":{"type":"string","format":"date-time","description":"The persons date of birth"},"isMinor":{"type":"boolean","description":"Is the person a minor (usually below 18 or 21 year)"},"nameAtBirth":{"type":"string","description":"The maiden name, if applicable"},"placeOfBirth":{"type":"string","description":"The place of birth (a city)"},"countryOfBirth":{"description":"The country of birth","$ref":"#/definitions/Region"},"occupationalGroup":{"type":"string","description":"The occupational group (according to the MIFID standard)"},"profession":{"type":"string","description":"The persons profession, if applicable (according to the MIFID standard)"},"sector":{"type":"string","description":"The industry sector the person is working in, if applicable (according to the MIFID standard)"},"countryOfWork":{"description":"The country the person works in, if applicable (according to the MIFID standard)","$ref":"#/definitions/Region"},"hasAccessToInsiderInformation":{"type":"boolean","description":"true if the person has access to (stock market) insider information"},"incomePerYear":{"type":"number","description":"The persons income per year, a MIFID mandatory question"},"regularIncomePerMonth":{"type":"integer","format":"int32","description":"The persons regular income per month, a MIFID mandatory question"},"regularCashTransfersPerMonth":{"type":"integer","format":"int32","description":"The persons regular cash transactions per month, a MIFID mandatory question"},"hasRegularInternationalTransfers":{"type":"boolean","description":"If the person performs regular international transfers, a MIFID mandatory question"},"internationalTransfersCountry1":{"description":"The persons international transfers country 1, a MIFID mandatory question","$ref":"#/definitions/Region"},"internationalTransfersCountry2":{"description":"The persons international transfers country 2, a MIFID mandatory question","$ref":"#/definitions/Region"},"liquidAssets":{"type":"number","description":"The persons liquid assets, a MIFID mandatory question"},"originOfIncome":{"type":"string","description":"The origin of income; allowed values for key MIFID_ORIGIN_OF_INCOME\n can be retrieved via the masterData API."},"originOfAssets":{"type":"string","description":"The origin of current assets; allowed values for key MIFID_PLANNED_ASSETS\n can be retrieved via the masterData API."},"plannedAssets":{"type":"string","description":"The range of planned assets; allowed values for key MIFID_PLANNED_ASSETS\n can be retrieved via the masterData API."},"isPoliticallyExposed":{"type":"boolean","description":"Is the person politically exposed?"},"address":{"description":"The persons address","$ref":"#/definitions/Address"},"primaryNationality":{"description":"The persons primary (first) nationality","$ref":"#/definitions/Region"},"primaryNationalIdentifier":{"type":"string","description":"The national identifier matching the primary nationality, e.g. a passport ID. \n In many cases this field will be set to 'CONCAT' for participating countries"},"secondaryNationality":{"description":"The persons secondary nationality, if any","$ref":"#/definitions/Region"},"secondaryNationalIdentifier":{"type":"string","description":"The national identifier matching the secondary nationality, e.g. a passport ID. \n In many cases this field will be set to 'CONCAT' for participating countries"},"taxResidence":{"description":"The residence relevant for taxation","$ref":"#/definitions/Region"},"taxId":{"type":"string","description":"The tax-ID matching the tax residend"},"usTaxLiability":{"type":"boolean","description":"Is the person liable for taxation in the United States?"},"usTaxId":{"type":"string","description":"The US tax identifier, if liable to taxation in the United States"},"crsTaxLiabilities":{"type":"array","description":"A list of other countries in which the person is liable, if any","items":{"$ref":"#/definitions/CrsTaxLiability"}},"legitimationDocumentType":{"type":"string","description":"Type of the document used for legitimation, if any"},"legitimationDocumentId":{"type":"string","description":"ID of the document used for legitimation (e.g. a passport ID)"},"legitimationDocumentCreationDate":{"type":"string","format":"date-time","description":"Issue / creation date of the legitimation document (e.g. password issued at)"},"legitimationDocumentValidUntil":{"type":"string","format":"date-time","description":"Validity of the legitimation document (e.g. a passport)"},"legitimationDocumentIssuingInstitution":{"type":"string","description":"The issuing institution, e.g. Bürgeramt Prenzlauer-Berg"},"legitimationDocumentIssuingCountry":{"description":"The issuing country, e.g. Germany","$ref":"#/definitions/Region"}}},"PageableAccountHolderList":{"type":"object","properties":{"accountHolders":{"type":"array","items":{"$ref":"#/definitions/AccountHolder"}},"paging":{"$ref":"#/definitions/Paging"}}},"Paging":{"type":"object","properties":{"page":{"type":"integer","format":"int32"},"perPage":{"type":"integer","format":"int32"},"pageCount":{"type":"integer","format":"int32"},"totalCount":{"type":"integer","format":"int64"}}},"Region":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"twoLetterCode":{"type":"string"},"threeLetterCode":{"type":"string"},"isoCode":{"type":"string"},"name":{"type":"string"},"germanName":{"type":"string"},"hasCapital":{"type":"boolean"},"capital":{"type":"string"},"regionType":{"type":"string"},"nationalClientIdentifier":{"type":"string"},"parentId":{"type":"integer","format":"int64"}}},"UserReference":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"ID of the user (technical identifier)"},"email":{"type":"string","description":"email of the user"},"gender":{"type":"integer","format":"int32","description":"Gender of the user"},"name":{"type":"string","description":"Name of the user (first name plus last name)"},"phone":{"type":"string","description":"Phone number of the user"},"mandatorSlug":{"type":"string","description":"The slug / public ID of the users mandator"}},"description":"References a user"},"CreateOrUpdateInvestmentExperienceParams":{"type":"object","properties":{"domesticStocks":{"type":"integer","format":"int32"},"foreignStocks":{"type":"integer","format":"int32"},"domesticBonds":{"type":"integer","format":"int32"},"foreignBonds":{"type":"integer","format":"int32"},"funds":{"type":"integer","format":"int32"},"certificatesAndOptionsWithoutLeverage":{"type":"integer","format":"int32"},"certificatesAndOptionsWithLeverage":{"type":"integer","format":"int32"},"foreignCurrencyInvestments":{"type":"integer","format":"int32"},"otherInvestments":{"type":"integer","format":"int32"}}},"CreateOrUpdateBankAccountParams":{"type":"object","properties":{"accountHolderId":{"type":"integer","format":"int64","description":"The account holders ID; a bank account is always attached to an account holder; required for creation"},"bic":{"type":"string","description":"The accounts BIC; required for creation"},"iban":{"type":"string","description":"The accounts IBAN; required for creation"},"bankName":{"type":"string","description":"The bank name; required for creation"},"bankLocation":{"type":"string","description":"The bank location; required for creation"},"accountHolderFirstName":{"type":"string","description":"First name of the account holder; required for creation. As this serves as reference account, the actual account holder may be different from the account holder entity. E.g. a father decides to pay cashback to his childs account."},"accountHolderLastName":{"type":"string","description":"Last name of the account holder; required for creation. As this serves as reference account, the actual account holder may be different from the account holder entity. E.g. a father decides to pay cashback to his childs account."}}},"CreateOrUpdateCustomFeeAgreementParams":{"type":"object","properties":{"type":{"type":"string","description":"The agreement type; required for creation","enum":["cashback"]},"value":{"type":"number","description":"The value (in percent; 1 = 100%); required for creation; must be greater then 0.5 which is equal to Cashback-50"},"hasUpperBound":{"type":"boolean","description":"Does the custom fee agreement have an upper bound. The rentablo fee will not raise\n above the upper bound; required for creation"},"upperBound":{"type":"number","description":"The upper bound for the custom fee agreement; ignored if hasUpperBound is false.\n If not given, the CASHBACK_100 fee will be considered as the upper bound"},"startsAt":{"type":"string","format":"date-time","description":"Start of the agreement; optional"}}},"CreateOrUpdateAccountHolderParams":{"type":"object","properties":{"userId":{"type":"integer","format":"int64","description":"Allows to assign the account holder to another user; including all of its subscriptions. This functionality is only available to subscription administrators"},"externalId":{"type":"string","description":"An optional external ID; e.g. assigned by a pool"},"type":{"type":"string","description":"The account holder type; default is PRIVATE","enum":["PRIVATE","COMPANY"]},"isSyncEnabled":{"type":"boolean","description":"Is account synchronization via Netfonds API enabled for this account holder?"},"createOrUpdateNaturalPersonParamsList":{"type":"array","description":"An list of natural persons belonging to this account holder; max size is 2; required for creation","items":{"$ref":"#/definitions/CreateOrUpdateNaturalPersonParams"}},"createOrUpdateAdditionalMailingAddressParams":{"description":"An optional mailing address","$ref":"#/definitions/CreateOrUpdateAddressParams"}}},"CreateOrUpdateAddressParams":{"type":"object","properties":{"street":{"type":"string","description":"The street; required for creation"},"streetNumber":{"type":"string","description":"The street number (alphanumeric); required for creation"},"city":{"type":"string","description":"The city; required for creation"},"zip":{"type":"string","description":"The cities ZIP code; required for creation"},"regionId":{"type":"integer","format":"int64","description":"Region ID of the country; use the regions endpoint to retrieve valid region IDs; required for creation"},"firstName":{"type":"string","description":"An optional first name linked to this address; useful for alternative mailing addresses"},"lastName":{"type":"string","description":"An optional last name linked to this address; useful for alternative mailing addresses"}}},"CreateOrUpdateCrsTaxLiabilityParams":{"type":"object","required":["regionId"],"properties":{"regionId":{"type":"integer","format":"int64","description":"ID of the CRS country; use the regions API to retrieve valid identifiers"},"taxId":{"type":"string","description":"Tax ID of the CRS region"}}},"CreateOrUpdateNaturalPersonLegitimationParams":{"type":"object","properties":{"legitimationDocumentType":{"type":"string"},"legitimationDocumentId":{"type":"string"},"legitimationDocumentCreationDate":{"type":"string","format":"date-time"},"legitimationDocumentValidUntil":{"type":"string","format":"date-time"},"legitimationDocumentIssuingInstitution":{"type":"string"},"legitimationDocumentIssuingCountryRegionId":{"type":"integer","format":"int64"}}},"CreateOrUpdateNaturalPersonMifidParams":{"type":"object","properties":{"occupationalGroup":{"type":"string","description":"The persons occupational group (Berufsgruppe)"},"profession":{"type":"string","description":"The persons profession"},"sector":{"type":"string","description":"The sector the person works in; allowed values for key OCCUPATIONAL_GROUP\n can be retrieved via the masterData API."},"countryOfWorkId":{"type":"integer","format":"int64","description":"Region ID of the country of work"},"hasAccessToInsiderInformation":{"type":"boolean","description":"Does this person have access to insider information?"},"incomePerYear":{"type":"number","description":"Average yearly income"},"liquidAssets":{"type":"number","description":"Average liquid assets"},"originOfIncome":{"type":"string","description":"The origin of income; allowed values for key MIFID_ORIGIN_OF_INCOME\n can be retrieved via the masterData API."},"originOfAssets":{"type":"string","description":"The origin of current assets; allowed values for key MIFID_PLANNED_ASSETS\n can be retrieved via the masterData API."},"plannedAssets":{"type":"string","description":"The range of planned assets; allowed values for key MIFID_PLANNED_ASSETS\n can be retrieved via the masterData API."},"isPoliticallyExposed":{"type":"boolean","description":"Is the person politically exposed?"},"regularIncomePerMonth":{"type":"integer","format":"int32","description":"The persons regular income per month"},"regularCashTransfersPerMonth":{"type":"integer","format":"int32","description":"The persons regular cash transactions per month"},"hasRegularInternationalTransfers":{"type":"boolean","description":"If the person performs regular international transfers"},"internationalTransfersCountry1Id":{"type":"integer","format":"int64","description":"Region ID of the international transfers country 1"},"internationalTransfersCountry2Id":{"type":"integer","format":"int64","description":"Region ID of the international transfers country 2"}}},"CreateOrUpdateNaturalPersonParams":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier; required when updated in the context of an account holder"},"accountHolderId":{"type":"integer","format":"int64","description":"ID of the account holder this natural person belongs to"},"isPrimaryAccountHolder":{"type":"boolean","description":"Is this natural person the primary account holder?"},"gender":{"type":"integer","format":"int32","description":"The gender, 1 = male, 2 = female","enum":[1,2]},"firstName":{"type":"string","description":"The natural persons first name"},"lastName":{"type":"string","description":"The natural persons last name"},"academicTitle":{"type":"string","description":"The natural persons academic title"},"dateOfBirth":{"type":"string","format":"date-time","description":"The natural persons date of birth"},"isMinor":{"type":"boolean","description":"Is the natural person a minor (younger than 18 years)"},"nameAtBirth":{"type":"string","description":"The natural persons name at birth"},"placeOfBirth":{"type":"string","description":"The natural persons place of birth"},"countryOfBirthRegionId":{"type":"integer","format":"int64","description":"ID of the country the natural person was born in"},"createOrUpdateAddressParams":{"description":"The natural persons address","$ref":"#/definitions/CreateOrUpdateAddressParams"},"createOrUpdateNaturalPersonMifidParams":{"description":"The natural persons MIFID information","$ref":"#/definitions/CreateOrUpdateNaturalPersonMifidParams"},"createOrUpdateNaturalPersonTaxationParams":{"description":"The natural persons taxation data","$ref":"#/definitions/CreateOrUpdateNaturalPersonTaxationParams"},"createOrUpdateNaturalPersonLegitimationParams":{"description":"The natural persons legitimation data","$ref":"#/definitions/CreateOrUpdateNaturalPersonLegitimationParams"}}},"CreateOrUpdateNaturalPersonTaxationParams":{"type":"object","properties":{"primaryNationalityRegionId":{"type":"integer","format":"int64"},"primaryNationalIdentifier":{"type":"string"},"secondaryNationalityRegionId":{"type":"integer","format":"int64"},"secondaryNationalIdentifier":{"type":"string"},"taxResidenceRegionId":{"type":"integer","format":"int64"},"taxId":{"type":"string"},"usTaxLiability":{"type":"boolean"},"usTaxId":{"type":"string"},"createOrUpdateCrsTaxLiabilityParamsList":{"type":"array","items":{"$ref":"#/definitions/CreateOrUpdateCrsTaxLiabilityParams"}}}},"AccountSelectGroup":{"type":"object","properties":{"name":{"type":"string","description":"The group name"},"accountIds":{"type":"array","description":"The assigned accounts","items":{"type":"integer","format":"int64"}}}},"CreateOrUpdateAccountSelectGroupParams":{"type":"object","properties":{"name":{"type":"string"},"accountIds":{"type":"array","items":{"type":"integer","format":"int64"}}}},"ApplicationProperty":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"parent":{"description":"The parent property, if any","$ref":"#/definitions/ApplicationPropertyReference"},"propertyName":{"type":"string","description":"the property key (mandatory)"},"isCritical":{"type":"boolean","description":"Indicates that this property is application critical; critical properties may not be deleted. Un-mark this property prior to deletion."},"value":{"type":"string","description":"The string value of this property (optional)"},"valueNumeric":{"type":"number","description":"The numeric value of this property (optional)"},"status":{"type":"string","description":"The property status"},"icon":{"type":"string","description":"An icon URL or CSS"},"iconImageSrc":{"type":"string","description":"The image src attribute"},"validFrom":{"type":"string","format":"date-time","description":"Valid from this date"},"validTo":{"type":"string","format":"date-time","description":"Valid until this date"},"comment":{"type":"string","description":"A comment field"},"commentIsHtml":{"type":"boolean","description":"Indicates if the comment should be interpreted as HTML by the UX"},"commentHtmlLink":{"type":"string","description":"A link (href) attribute; telling the UX to wrap the comment into a link"},"teaser":{"type":"string","description":"A custom plain-text teaser; e.g. to provide additional information in a newsletter"}}},"ApplicationPropertyList":{"type":"object","properties":{"applicationProperties":{"type":"array","items":{"$ref":"#/definitions/ApplicationProperty"}}}},"ApplicationPropertyReference":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"propertyName":{"type":"string"},"isCritical":{"type":"boolean"}}},"CreateOrUpdateApplicationPropertyParams":{"type":"object","properties":{"parentId":{"type":"integer","format":"int64","description":"The parent property, if any; allows creating property trees"},"propertyName":{"type":"string","description":"the property key (mandatory)"},"isCritical":{"type":"boolean","description":"Indicates that this property is application critical; critical properties may not be deleted. Un-mark this property prior to deletion."},"value":{"type":"string","description":"The string value of this property (optional)"},"valueNumeric":{"type":"number","description":"The numeric value of this property (optional)"},"status":{"type":"string","description":"The property status"},"icon":{"type":"string","description":"An icon URL or CSS"},"iconImageSrc":{"type":"string","description":"The image src attribute"},"validFrom":{"type":"string","format":"date-time","description":"Valid from this date"},"validTo":{"type":"string","format":"date-time","description":"Valid until this date"},"comment":{"type":"string","description":"A comment field"},"commentIsHtml":{"type":"boolean","description":"Indicates if the comment should be interpreted as HTML by the UX"},"commentHtmlLink":{"type":"string","description":"A link (href) attribute; telling the UX to wrap the comment into a link"},"teaser":{"type":"string","description":"A custom plain-text teaser; e.g. to provide additional information in a newsletter"}}},"AssetsUnderManagement":{"type":"object","properties":{"date":{"type":"string","format":"date","description":"Assets at the given date"},"totalAssets":{"type":"number","description":"The total assets in EUR"},"assetsByBic":{"type":"object","description":"The assets per BIC","additionalProperties":{"type":"number"}}}},"AssetsUnderManagementList":{"type":"object","properties":{"assetsUnderManagement":{"type":"array","description":"Assets under management by date","items":{"$ref":"#/definitions/AssetsUnderManagement"}}}},"MandatorReference":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"The technical mandator identifier."},"publicId":{"type":"string","description":"A publicly visible ID of this mandator. This ID may be used to identify a mandator but not to acquire mandator level tokens."}}},"UserAuthorization":{"type":"object","properties":{"isLoggedIn":{"type":"boolean","description":"Is the user logged in?"},"requiresSecondAuthenticationFactor":{"type":"boolean","description":"Does the user require a second authentication factor? This field will be true if a) The user does not have a second authentication factor yet and b) the mandator configuration enabled two factor authentication for this mandators users. "},"hasSecondAuthenticationFactor":{"type":"boolean","description":"Did the user define a second authentication factor already?"},"isTwoFactorAuthenticated":{"type":"boolean","description":"Is the user two factor authenticated?"},"isSecondAuthenticationFactorDisabled":{"type":"boolean","description":"Did the user or the users mandator disable the second authentication factor?"},"roles":{"type":"array","description":"A list of the users roles","items":{"type":"string"}},"thirdPartyAccounts":{"type":"array","description":"A list of the users third party accounts (e.g. finAPI)","items":{"type":"string"}},"mandatorReference":{"description":"The users mandator","$ref":"#/definitions/MandatorReference"}}},"BankGroupWrapper":{"type":"object","required":["id","name"],"properties":{"id":{"type":"integer","format":"int64","description":"The group ID as defined by finAPI"},"name":{"type":"string","description":"The group name"}}},"BankInterface":{"type":"object","required":["health","interface","loginCredentials"],"properties":{"tppAuthenticationGroup":{"description":"TPP Authentication Group which the bank interface is connected to","$ref":"#/definitions/TppAuthenticationGroup"},"loginCredentials":{"type":"array","description":"Login credentials fields which should be shown to the user.","items":{"$ref":"#/definitions/BankInterfaceLoginField"}},"properties":{"type":"array","example":"[\"REDIRECT_APPROACH\"]","description":"Set of interface properties/specifics. Possible values:
• REDIRECT_APPROACH
- means that the interface uses a redirect approach when authorizing the user. It requires you to pass the 'redirectUrl' field in all services which define the field. If the user already has imported a bank connection of the same bank that he is about to import, we recommend to confront the user with the question:
For the selected bank you have already imported successfully the following accounts: <account list>. Are you sure that you want to import another bank connection from <bank name>?•
DECOUPLED_APPROACH
- means that the interface can trigger a decoupled approval during user authorization.DETAILED_CONSENT
- means that the interface requires a list of account references when authorizing the user. It requires you to pass the 'accountReferences' field in all services which define the field.FINTS_SERVER
- means that finAPI will download data via the bank's FinTS server.WEB_SCRAPER
- means that finAPI will parse data from the bank's online banking website.XS2A
- means that finAPI will download data via the bank's XS2A interface.UPDATED
means that the account is up to date from finAPI's point of view. This means that no current import/update is running, and the previous import/update had successfully updated the account's data (e.g. transactions and securities), and the bank given balance matched the transaction's calculated sum, meaning that no adjusting entry ('Zwischensaldo' transaction) was inserted.UPDATED_FIXED
means that the account is up to date from finAPI's point of view (no current import/update is running, and the previous import/update had successfully updated the account's data), BUT there was a deviation in the bank given balance which was fixed by adding an adjusting entry ('Zwischensaldo' transaction).DOWNLOAD_IN_PROGRESS
means that the account's data is currently being imported/updated.DOWNLOAD_FAILED
means that the account data was not successfully imported or updated. Possible reasons: finAPI could not get the account's balance, or it could not parse all transactions/securities, or some internal error has occurred. Also, it could mean that finAPI could not even get to the point of receiving the account data from the bank server, for example because of incorrect login credentials or a network problem. Note however that when we get a balance and just an empty list of transactions or securities, then this is regarded as valid and successful download. The reason for this is that for some accounts that have little activity, we may actually get no recent transactions but only a balance.DEPRECATED
means that the account could no longer be matched with any account from the bank server. This can mean either that the account was terminated by the user and is no longer sent by the bank server, or that finAPI could no longer match it because the account's data (name, type, iban, account number, etc.) has been changed by the bank.","enum":["UPDATED","UPDATED_FIXED","DOWNLOAD_IN_PROGRESS","DOWNLOAD_FAILED","DEPRECATED"]},"capabilities":{"type":"array","example":"[\"DATA_DOWNLOAD\",\"IBAN_ONLY_SEPA_MONEY_TRANSFER\",\"IBAN_ONLY_SEPA_DIRECT_DEBIT\",\"SEPA_MONEY_TRANSFER\",\"SEPA_COLLECTIVE_MONEY_TRANSFER\",\"SEPA_BASIC_DIRECT_DEBIT\",\"SEPA_BASIC_COLLECTIVE_DIRECT_DEBIT\",\"SEPA_B2B_DIRECT_DEBIT\",\"SEPA_B2B_COLLECTIVE_DIRECT_DEBIT\"]","description":"List of account capabilities that this interface supports. Possible values are:DATA_DOWNLOAD
- download of balance and transactions/securitiesIBAN_ONLY_SEPA_MONEY_TRANSFER
- money transfer where the recipient's account is defined just by the IBANIBAN_ONLY_SEPA_DIRECT_DEBIT
- direct debit where the debitor's account is defined just by the IBANSEPA_MONEY_TRANSFER
- single money transferSEPA_COLLECTIVE_MONEY_TRANSFER
- collective money transferSEPA_BASIC_DIRECT_DEBIT
- single basic direct debitSEPA_BASIC_COLLECTIVE_DIRECT_DEBIT
- collective basic direct debitSEPA_B2B_DIRECT_DEBIT
- single Business-To-Business direct debitSEPA_B2B_COLLECTIVE_DIRECT_DEBIT
- collective Business-To-Business direct debitFINTS_SERVER
- finAPI will download account data via the bank's FinTS interface.WEB_SCRAPER
- finAPI will parse account data from the bank's online banking website.XS2A
- finAPI will download account data via the bank's XS2A interface.FINTS_SERVER
- means that finAPI will download data via the bank's FinTS interface.WEB_SCRAPER
- means that finAPI will parse data from the bank's online banking website.XS2A
- means that finAPI will download data via the bank's XS2A interface.PRESENT
, it means that finAPI has a consent stored and can use it to connect to the bank. If NOT_PRESENT
, finAPI will need to acquire a consent when connecting to the bank, which may require login credentials (either passed by the client, or stored in finAPI), and/or user involvement. Note that even when a consent is PRESENT
, it may no longer be valid and finAPI will still have to acquire a new consent.","enum":["PRESENT","NOT_PRESENT"]},"expiresAt":{"type":"string","example":"2019-07-20 09:05:10.546","description":"Expiration time of the consent in the format 'YYYY-MM-DD HH:MM:SS.SSS' (german time)."}},"description":"Bank consent information"},"ClearingAccountData":{"type":"object","required":["clearingAccountId","clearingAccountName"],"properties":{"clearingAccountId":{"type":"string","example":"BA-TUYEF7D24CGK6","description":"Technical identifier of the clearing account"},"clearingAccountName":{"type":"string","example":"BA-TUYEF7D24CGK6","description":"Name of the clearing account"}}},"FinApiAccount":{"type":"object","required":["accountNumber","accountTypeId","accountTypeName","bankConnectionId","id","isNew","status","supportedOrders"],"properties":{"id":{"type":"integer","format":"int64","example":1,"description":"Account identifier"},"bankConnectionId":{"type":"integer","format":"int64","example":1,"description":"Identifier of the bank connection that this account belongs to"},"accountName":{"type":"string","example":"Testaccount","description":"Account name"},"iban":{"type":"string","example":"DE89370400440532013000","description":"Account's IBAN. Note that this field can change from 'null' to a value - or vice versa - any time when the account is being updated. This is subject to changes within the bank's internal account management."},"accountNumber":{"type":"string","example":"12345678","description":"(National) account number. Note that this value might change whenever the account is updated (for example, leading zeros might be added or removed)."},"subAccountNumber":{"type":"string","example":"1234","description":"Account's sub-account-number. Note that this field can change from 'null' to a value - or vice versa - any time when the account is being updated. This is subject to changes within the bank's internal account management."},"accountHolderName":{"type":"string","example":"Herr Max Mustermann","description":"Name of the account holder"},"accountHolderId":{"type":"string","example":"XXXXX","description":"Bank's internal identification of the account holder. Note that if your client has no license for processing this field, it will always be 'XXXXX'"},"accountCurrency":{"type":"string","example":"EUR","description":"Account's currency"},"accountTypeId":{"type":"integer","format":"int64","example":1,"description":"Identifier of the account's type. Note that, in general, the type of an account can change any time when the account is being updated. This is subject to changes within the bank's internal account management. However, if the account's type has previously been changed explicitly (via the PATCH method), then the explicitly set type will NOT be automatically changed anymore, even if the type has changed on the bank side. UPDATED
means that the account is up to date from finAPI's point of view. This means that no current import/update is running, and the previous import/update could successfully update the account's data (e.g. transactions and securities), and the bank given balance matched the transaction's calculated sum, meaning that no adjusting entry ('Zwischensaldo' transaction) was inserted.UPDATED_FIXED
means that the account is up to date from finAPI's point of view (no current import/update is running, and the previous import/update could successfully update the account's data), BUT there was a deviation in the bank given balance which was fixed by adding an adjusting entry ('Zwischensaldo' transaction).DOWNLOAD_IN_PROGRESS
means that the account's data is currently being imported/updated.DOWNLOAD_FAILED
means that the account data could not get successfully imported or updated. Possible reasons: finAPI could not get the account's balance, or it could not parse all transactions/securities, or some internal error has occurred. Also, it could mean that finAPI could not even get to the point of receiving the account data from the bank server, for example because of incorrect login credentials or a network problem. Note however that when we get a balance and just an empty list of transactions or securities, then this is regarded as valid and successful download. The reason for this is that for some accounts that have little activity, we may actually get no recent transactions but only a balance.DEPRECATED
means that the account could no longer get matched with any account from the bank server. This can mean either that the account was terminated by the user and is no longer sent by the bank server, or that finAPI could no longer match it because the account's data (name, type, iban, account number, etc.) has been changed by the bank.","enum":["UPDATED","UPDATED_FIXED","DOWNLOAD_IN_PROGRESS","DOWNLOAD_FAILED","DEPRECATED"]},"supportedOrders":{"type":"array","example":"[\"SEPA_MONEY_TRANSFER\",\"SEPA_COLLECTIVE_MONEY_TRANSFER\",\"SEPA_BASIC_DIRECT_DEBIT\",\"SEPA_BASIC_COLLECTIVE_DIRECT_DEBIT\",\"SEPA_B2B_DIRECT_DEBIT\",\"SEPA_B2B_COLLECTIVE_DIRECT_DEBIT\"]","description":"THIS FIELD IS DEPRECATED AND WILL BE REMOVED. Refer to the 'capabilities' in 'interfaces' field instead.SEPA_MONEY_TRANSFER
- single money transferSEPA_COLLECTIVE_MONEY_TRANSFER
- collective money transferSEPA_BASIC_DIRECT_DEBIT
- single basic direct debitSEPA_BASIC_COLLECTIVE_DIRECT_DEBIT
- collective basic direct debitSEPA_B2B_DIRECT_DEBIT
- single Business-To-Business direct debitSEPA_B2B_COLLECTIVE_DIRECT_DEBIT
- collective Business-To-Business direct debitTEXT
- the challenge will be a text that contains instructions for the user on how to proceed with the authorization.PHOTO
- the challenge will contain a BASE-64 string depicting a photo (or any kind of QR-code-like data) that must be shown to the user.FLICKER_CODE
- the challenge will contain a BASE-64 string depicting a flicker code animation that must be shown to the user.OK
, this field may contain an error message with details about why the update failed (it is not guaranteed that a message is available though). In case the update result is OK
, the field will always be null."},"errorType":{"type":"string","example":"TECHNICAL","description":"In case the update result is not OK
, this field contains the type of the error that occurred. BUSINESS means that the bank server responded with a non-technical error message for the user. TECHNICAL means that some internal error has occurred in finAPI or at the bank server.","enum":["BUSINESS","TECHNICAL"]},"timestamp":{"type":"string","example":"2018-01-01 00:00:00.000","description":"Time of the update. The value is returned in the format 'YYYY-MM-DD HH:MM:SS.SSS' (german time)."}},"description":"Container for a status of bank connection update"},"SynchronizationBatchJob":{"type":"object","required":["externalAccountIds","externalDepotIds"],"properties":{"externalDepotIds":{"type":"array","description":"Lists the external IDs of all depots to import","items":{"type":"string"}},"externalAccountIds":{"type":"array","description":"Lists the external IDs of all cash accounts to import","items":{"type":"string"}}},"description":"A cashback account synchronization batch job via the netfonds API"},"EditBankConnectionParams":{"type":"object","properties":{"bankingInterface":{"type":"string","example":"XS2A","description":"The interface to use for connecting with the bank."},"loginCredentials":{"type":"array","example":"null","description":"Set of login credentials. Must be passed in combination with the 'interface' field. For mandators requiring a web form, no matter the passed login credentials, the web form will contain all login fields defined by the bank for the respective interface.","items":{"$ref":"#/definitions/LoginCredentials"}},"defaultTwoStepProcedureId":{"type":"string","description":"New default two-step-procedure. Must match the 'procedureId' of one of the procedures that are listed in the bank connection. If you do not want to change this field let it remain unset. If you want to clear the current default two-step-procedure, set the field's value to an empty string (\"\")."}},"description":"Container for bank connection edit params"},"LoginCredentials":{"type":"object","required":["label","value"],"properties":{"label":{"type":"string","example":"Onlinebanking-ID","description":"The login field label, as defined by the respective bank interface."},"value":{"type":"string","example":"max.mustermann","description":"The value for the login field"}},"description":"Login credential data"},"AddOrUpdateBankConnectionParams":{"type":"object","required":["bankId"],"properties":{"bankId":{"type":"integer","format":"int64","example":277672,"description":"ID of the bank; assigned by banking API provider"},"bankingInterface":{"type":"string","example":"XS2A","description":"The interface to use for connecting with the bank."},"loginCredentials":{"type":"array","example":"null","description":"Set of login credentials. Must be passed in combination with the 'interface' field. For mandators requiring a web form, no matter the passed login credentials, the web form will contain all login fields defined by the bank for the respective interface.","items":{"$ref":"#/definitions/LoginCredentials"}},"storeSecrets":{"type":"boolean","example":true,"description":"Whether to store the secrets (PIN, etc.). If the Secrets are stored, it is not required to pass them again when updating this bank connection. Default is false. The notification that finAPI sends to the clients' callback URLs will be a POST request, with this body:
{ \"userId\" : string // contains the identifier of the deleted user \"event\" : string // this will always be \"DELETED\" }
The maximum allowed length of the URL is 512. If you have previously set a callback URL and now want to clear it (thus disabling user-related notifications altogether), you can pass an empty string (\"\")."},"userSynchronizationCallbackUrl":{"type":"string","example":"https://bank.server.com/notification","description":"Callback URL to which finAPI sends the notification messages that are triggered from the automatic batch update of the users' bank connections. This field is only relevant if the automatic batch update is enabled for your client. For details about what the notification messages look like, please see the documentation in the 'Notification Rules' section. finAPI will call this URL with HTTP method POST. Note that the response of the call is not processed by finAPI. Also note that while the callback URL may be a non-secured (http) URL on the finAPI sandbox or alpha environment, it MUST be a SSL-secured (https) URL on the finAPI live system."},"refreshTokensValidityPeriod":{"type":"integer","format":"int32","example":3600,"description":"The validity period that newly requested refresh tokens initially have (in seconds). A value of 0 means that the tokens never expire (Unless explicitly invalidated, e.g. by revocation, or when a user gets locked, or when the password is reset for a user)."},"userAccessTokensValidityPeriod":{"type":"integer","format":"int32","example":3600,"description":"The validity period that newly requested access tokens for users initially have (in seconds). A value of 0 means that the tokens never expire (Unless explicitly invalidated, e.g. by revocation, or when a user gets locked, or when the password is reset for a user)."},"clientAccessTokensValidityPeriod":{"type":"integer","format":"int32","example":3600,"description":"The validity period that newly requested access tokens for clients initially have (in seconds). A value of 0 means that the tokens never expire (Unless explicitly invalidated, e.g. by revocation)."},"finTSProductRegistrationNumber":{"type":"string","example":"XXXXX","description":"The FinTS product registration number. If a value is stored, this will always be 'XXXXX'."},"betaBanksEnabled":{"type":"boolean","example":true,"description":"Enabled beta banks if true"}},"description":"Params to modify the configuration of the finAPI client"},"FinancialGoal":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"initialWealth":{"type":"number"},"wealthTarget":{"type":"number"},"savingsPerMonth":{"type":"number"},"requiredYieldPerYear":{"type":"number"},"estimatedInflationRate":{"type":"number"},"adjustInflation":{"type":"boolean"},"name":{"type":"string"},"description":{"type":"string"},"icon":{"type":"string"},"isDefault":{"type":"boolean"},"accountIds":{"type":"array","items":{"type":"integer","format":"int64"}},"isOnTrack":{"type":"boolean"},"expectedAssets":{"type":"number"},"actualAssets":{"type":"number"},"percentDeviation":{"type":"number"},"absoluteDeviation":{"type":"number"}}},"WealthProjectionItem":{"type":"object","properties":{"date":{"type":"string","format":"date-time","description":"Project for the given date"},"projectedWealth":{"type":"number","description":"Projected wealth at the given date"},"projectedReturnOnInvestment":{"type":"number","description":"Projected return on investment at the given date"},"projectedSavings":{"type":"number","description":"Projected savings at the given date"}}},"WealthProjectionItemList":{"type":"object","properties":{"wealthProjectionItems":{"type":"array","description":"The wealth projections","items":{"$ref":"#/definitions/WealthProjectionItem"}},"requiredYieldPerYear":{"type":"number","description":"The year-on-year interest rate required to meet the projected goal"}}},"CreateOrUpdateFinancialGoalParams":{"type":"object","properties":{"startDate":{"type":"string","format":"date-time","description":"The start date; required for creation"},"endDate":{"type":"string","format":"date-time","description":"The end date; required for creation"},"initialWealth":{"type":"number","description":"The initial wealth; required for creation"},"wealthTarget":{"type":"number","description":"The wealth target; required for creation"},"savingsPerMonth":{"type":"number","description":"The savings per month; will be set to zero if not given at creation time"},"requiredYieldPerYear":{"type":"number","description":"The required yield per year to achieve the goal; required for creation"},"estimatedInflationRate":{"type":"number","description":"The estimated inflation rate; will only be set if 'adjust inflation' is true"},"adjustInflation":{"type":"boolean","description":"Should we adjust for inflation, required for creation"},"name":{"type":"string","description":"A literal name for the goal, required for creation"},"description":{"type":"string","description":"An optional literal description of the goal; send a blank or empty string to clear"},"icon":{"type":"string","description":"An icon CSS or icon identifier; send a blank or empty string to clear"},"isDefault":{"type":"boolean","description":"Set this goal to the default goal; setting this option will clear the default flag for all other financial goals. If this is the only goal, isDefault is set true automatically."},"accountIds":{"type":"array","description":"The accounts assigned to the goal; required for creation.","items":{"type":"integer","format":"int64"}}}},"Courtage":{"type":"object","properties":{"bankName":{"type":"string"},"bic":{"type":"string"},"agio":{"type":"number"},"discountOnAgio":{"type":"number"},"portfolioCommission":{"type":"number"},"hasSavingsPlan":{"type":"boolean"},"savingsPlanMinAmount":{"type":"number"},"hasVl":{"type":"boolean"}}},"Fund":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"type":{"type":"string","description":"Type of the fund"},"isin":{"type":"string","description":"The funds ISIN"},"wkn":{"type":"string","description":"The funds WKN"},"name":{"type":"string","description":"The funds literal name"},"emitter":{"type":"string","description":"The funds emitter (KAG)"},"category":{"type":"string","description":"The literal fund category"},"subCategory":{"type":"string","description":"The literal fund sub-category"},"fundCurrency":{"type":"string","description":"The fund currency"},"riskClass":{"type":"integer","format":"int32","description":"The funds risk classification"},"popularity":{"type":"integer","format":"int32","description":"The funds popularity; this is the fund count divided by the number of users. This field is only available when using the 'mostPopular' enpdoint. Popularity rage is from 3 (highest) to 1 (lowest).","enum":[1,2,3]},"courtages":{"type":"array","description":"A list of bank-specific courtages (commissions)","items":{"$ref":"#/definitions/Courtage"}},"riskLevelFww":{"type":"integer","format":"int64","description":"FWW risk level"},"riskLevelSrri":{"type":"integer","format":"int64","description":"SRRI risk level"},"lastUpdatedAt":{"type":"string","format":"date","description":"last updated fundamental data"},"volume":{"type":"number","description":"fund volume"},"volumeDate":{"type":"string","format":"date","description":"last updated volume data"},"launchDate":{"type":"string","format":"date","description":"Launch Date of a fund"},"focusRegion":{"description":"Focus region","$ref":"#/definitions/Region"},"ratingFwwFundstars":{"type":"integer","format":"int32","description":"FwwFundstars Rating"}}},"PageableFundList":{"type":"object","properties":{"funds":{"type":"array","items":{"$ref":"#/definitions/Fund"}},"paging":{"$ref":"#/definitions/Paging"}}},"Security":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical Identifier"},"externalId":{"type":"integer","format":"int64","description":"External technical identifier"},"isin":{"type":"string","description":"The securities ISIN"},"wkn":{"type":"string","description":"The securities WKN"},"currency":{"type":"string","description":"The securities currency (three letter ISO code)"},"name":{"type":"string","description":"The security name"},"slug":{"type":"string","description":"The securities slug / short name"},"country":{"description":"The country the company is based in","$ref":"#/definitions/Region"},"sector":{"description":"The industrial sector the company is active in","$ref":"#/definitions/Industry"},"lastBalanceUpdate":{"type":"string","format":"date-time","description":"Last update to the security or its fundamentals"},"isActive":{"type":"boolean","description":"Is this security still active? We never delete records, but mark them as inactive in case the stock is no longer available or no longer traded. This happens e.g. due to mergers, acquisitions or bankruptcies."},"stockIndexes":{"type":"array","description":"A list of stock indexes the company is active in","items":{"$ref":"#/definitions/StockIndex"}},"fund":{"description":"Fund fundamentals. Attached if security is a fund.","$ref":"#/definitions/Fund"}}},"Statistic":{"type":"object","properties":{"date":{"type":"string","format":"date-time","description":"(Daily) Date the value applies to."},"fScore":{"type":"number","description":"The fscore (a measure of financial health of a company) calculated by finanzoo."},"priceToBook":{"type":"number","description":"Companies use the price-to-book ratio (P/B ratio) to compare a firm's market\n capitalization to its book value. It's calculated by dividing the company's stock price per share by its book\n value per share (BVPS). An asset's book value is equal to its carrying value on the balance sheet,\n and companies calculate it netting the asset against its accumulated depreciation."},"priceToCashflow":{"type":"number","description":"The price-to-cash flow (P/CF) ratio is a stock valuation indicator or multiple that\n measures the value of a stock's price relative to its operating cash flow per share. The ratio uses operating\n cash flow which adds back non-cash expenses such as depreciation and amortization to net income. It is\n especially useful for valuing stocks that have positive cash flow but are not profitable because of\n large non-cash charges."},"priceToFreeCashflow":{"type":"number","description":"Price to free cash flow is an equity valuation metric used to compare a company's\n per-share market price to its per-share amount of free cash flow (FCF). This metric is very similar to the\n valuation metric of price to cash flow but is considered a more exact measure, owing to the fact that it uses\n free cash flow, which subtracts capital expenditures (CAPEX) from a company's total operating cash flow,\n thereby reflecting the actual cash flow available to fund non-asset-related growth. Companies use this metric\n when they need to expand their asset bases either in order to grow their businesses or simply to maintain\n acceptable levels of free cash flow."},"priceToSales":{"type":"number","description":"The price-to-sales (P/S) ratio is a valuation ratio that compares a company's stock\n price to its revenues. It is an indicator of the value placed on each euro of a company's sales or revenues."},"priceToEarnings":{"type":"number","description":"The price-to-earnings ratio (P/E ratio) is the ratio for valuing a company that\n measures its current share price relative to its per-share earnings (EPS). The price-to-earnings ratio is also\n sometimes known as the price multiple or the earnings multiple."}}},"StatisticList":{"type":"object","properties":{"security":{"description":"The security the fundamentals belong to","$ref":"#/definitions/Security"},"statistics":{"type":"array","description":"A list of daily fundamental data","items":{"$ref":"#/definitions/Statistic"}}},"description":"A list of fundamental data calculated daily"},"StockIndex":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"name":{"type":"string","description":"Name of the index"},"slug":{"type":"string","description":"Slug / short name of the index"},"isin":{"type":"string","description":"Stock index ISIN"}}},"Financial":{"type":"object","properties":{"year":{"type":"integer","format":"int32","description":"The year this data applies to."},"eps":{"type":"number","description":"Earnings per share (EPS) is calculated as a company's profit divided by the outstanding\n shares of its common stock. The resulting number serves as an indicator of a company's profitability.\n It is common for a company to report EPS that is adjusted for extraordinary items and potential share dilution.\n The higher a company's EPS, the more profitable it is considered."},"totalLiabilities":{"type":"number","description":"Total liabilities are the aggregate debt and financial obligations\n owed by a business to individuals and organizations at any specific period of time. Total liabilities are\n reported on a company's balance sheet and are a component of the general accounting equation:\n Assets = Liabilities + Equity."},"operatingCashflow":{"type":"number","description":"Operating cash flow (OCF) is a measure of the amount of cash generated by a company's\n normal business operations. Operating cash flow indicates whether a company can generate sufficient positive\n cash flow to maintain and grow its operations, otherwise, it may require external financing for\n capital expansion"},"capEx":{"type":"number","description":"Capital expenditures (CapEx) are funds used by a company to acquire, upgrade, and\n maintain physical assets such as property, plants, buildings, technology, or equipment. CapEx is often used to\n undertake new projects or investments by a company. Making capital expenditures on fixed assets can include\n repairing a roof, purchasing a piece of equipment, or building a new factory. This type of financial outlay is\n also made by companies to maintain or increase the scope of their operations."},"freeCashflow":{"type":"number","description":"Free cash flow (FCF) represents the cash a company generates after accounting for cash\n outflows to support operations and maintain its capital assets. Unlike earnings or net income, free cash flow\n is a measure of profitability that excludes the non-cash expenses of the income statement and includes spending\n on equipment and assets as well as changes in working capital from the balance sheet."},"totalEquity":{"type":"number","description":"Total equity (or total capital) is all interest-bearing debt plus shareholders' equity,\n which may include items such as common stock, preferred stock, and minority interest."},"netIncome":{"type":"number","description":"Net income, also called net earnings, is calculated as sales minus cost of goods sold,\n selling, general and administrative expenses, operating expenses, depreciation, interest, taxes, and other\n expenses. It is a useful number for investors to assess how much revenue exceeds the expenses of an organization.\n This number appears on a company's income statement and is also an indicator of a company's profitability."},"netRevenue":{"type":"number","description":"Net revenue is the sales of a company from which returns, discounts, and other items\n are subtracted from. In accounting, Net refers to adjustments made to the original and therefore, it can be\n calculated after adjusting gross revenue with the discounts, returned products or any other direct selling\n expenses."},"outstandingShares":{"type":"number","description":"Shares outstanding refer to a company's stock currently held by all its shareholders,\n including share blocks held by institutional investors and restricted shares owned by the company's officers\n and insiders. A company's number of shares outstanding is not static and may fluctuate wildly over time."},"returnOnAssets":{"type":"number","description":"Return on assets (ROA) is a financial ratio that shows the percentage of profit a\n company earns in relation to its overall resources. It is commonly defined as net income divided by total assets.\n Net income is derived from the income statement of the company and is the profit after taxes."},"returnOnEquity":{"type":"number","description":"Return on equity (ROE) is a measure of financial performance calculated by dividing\n net income by shareholders' equity. Because shareholders' equity is equal to a company's assets minus its debt,\n ROE is considered the return on net assets."}}},"FundamentalList":{"type":"object","properties":{"security":{"description":"The security the fundamentals belong to","$ref":"#/definitions/Security"},"financials":{"type":"array","description":"A list of fundamentals for a given security","items":{"$ref":"#/definitions/Financial"}}},"description":"A list of fundamental data calculated yearly"},"MarketCapitalization":{"type":"object","properties":{"marketCapitalization":{"type":"number","description":"The market capitalization"},"quote":{"type":"number","description":"The quote the market capitalization was based on"},"currency":{"type":"string","description":"The currency the capitalization and the quote are given in"}}},"QuoteBar":{"type":"object","properties":{"dateTime":{"type":"string","format":"date-time"},"open":{"type":"number"},"high":{"type":"number"},"low":{"type":"number"},"close":{"type":"number"},"volume":{"type":"number"},"bid":{"type":"number"},"ask":{"type":"number"}}},"QuoteBarList":{"type":"object","properties":{"quoteBars":{"type":"array","description":"A list of quote bars","items":{"$ref":"#/definitions/QuoteBar"}},"from":{"type":"string","format":"date-time","description":"The from date"},"to":{"type":"string","format":"date-time","description":"The to date"},"period":{"type":"string","description":"The quote period"}}},"HistoricQuoteList":{"type":"object","properties":{"historicQuotes":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/definitions/DateValuePair"}}}}},"AddOrUpdateHistoricQuoteParams":{"type":"object","properties":{"investmentId":{"type":"integer","format":"int64"},"dateValuePairs":{"type":"array","items":{"$ref":"#/definitions/DateValuePair"}}}},"AddOrUpdateProductQuoteParams":{"type":"object","properties":{"isin":{"type":"string","description":"The products ISIN"},"tickerSymbol":{"type":"string","description":"The products ticker symbol"},"currency":{"type":"string","description":"The products currency"},"dateValuePairs":{"type":"array","description":"The list of historic quotes","items":{"$ref":"#/definitions/DateValuePair"}}}},"GainLoss":{"type":"object","required":["changeAbs","changeAbsCashFlowAdjusted","changePercent","performance"],"properties":{"performance":{"type":"number","description":"The performance compared to the reference data."},"changePercent":{"type":"number","description":"The change in percent compared to the reference date. Note that this may yield high\n numbers results in case the start value is close to zero. Thus usually performance should be the \n preferred value for display."},"changeAbs":{"type":"number","description":"The absolute change in EUR compared to the reference date. Note that this value\n strongly depends on external flows and thus does not reflect the\n depots performance."},"changeAbsCashFlowAdjusted":{"type":"number","description":"The absolute cash-flow adjusted change in EUR compared to the reference date.\n This value directly relates to the performance."}}},"HistoricQuoteWithRiskYieldStatistics":{"type":"object","required":["annualizedReturn","annualizedReturnClass","annualizedReturnClassComplex","annualizedRiskClass","annualizedRiskClassComplex","annualizedStandardDeviation","changeToday","changeTotal","historicQuotes"],"properties":{"historicQuotes":{"type":"array","description":"The list of quotes; today is the last record","items":{"$ref":"#/definitions/DateValuePair"}},"annualizedReturn":{"type":"number","description":"The annualized return on investment"},"annualizedReturnClass":{"type":"integer","format":"int32","description":"The annualized return class, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedReturnClassComplex":{"type":"number","description":"The annualized return class in a more complex classification, ranging from 0.0 (lowest) to 6 (highest) in 0.01 interval steps (e.g. 1.04)"},"annualizedStandardDeviation":{"type":"number","description":"The annualized standard deviation"},"annualizedRiskClass":{"type":"integer","format":"int32","description":"The annualized risk class based on the standard deviation, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedRiskClassComplex":{"type":"number","description":"The annualized risk class in a more complex classification, ranging from 0.0 (lowest) to 6 (highest) in 0.01 interval steps (e.g. 1.04)"},"changeToday":{"description":"The change compared to yesterdays End-of-Day value","$ref":"#/definitions/GainLoss"},"changeYTD":{"description":"The change compared to the Jan 1st End-of-Day value; if sufficient data was requested","$ref":"#/definitions/GainLoss"},"changeOneYear":{"description":"The change compared to the End-of-Day value one year ago; if sufficient data was requested","$ref":"#/definitions/GainLoss"},"changeTotal":{"description":"The change compared to the first value in the requested time series","$ref":"#/definitions/GainLoss"}}},"TickerSymbolWithQuoteProvider":{"type":"object","required":["quoteProvider","tickerSymbol"],"properties":{"tickerSymbol":{"type":"string","description":"The quotes ticker symbol"},"quoteProvider":{"type":"string","description":"The according quote provider"}}},"HistoricQuoteListWithRiskYieldStatistics":{"type":"object","required":["annualizedReturn","annualizedReturnClass","annualizedReturnClassComplex","annualizedRiskClass","annualizedRiskClassComplex","annualizedStandardDeviation","changeToday","changeTotal","historicQuotes"],"properties":{"historicQuotes":{"type":"object","description":"The list of quotes; today is the last record","additionalProperties":{"type":"array","items":{"$ref":"#/definitions/DateValuePair"}}},"annualizedReturn":{"type":"number","description":"The annualized return on investment"},"annualizedReturnClass":{"type":"integer","format":"int32","description":"The annualized return class, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedReturnClassComplex":{"type":"number","description":"The annualized return class in a more complex classification, ranging from 0.0 (lowest) to 6 (highest) in 0.01 interval steps (e.g. 1.04)"},"annualizedStandardDeviation":{"type":"number","description":"The annualized standard deviation"},"annualizedRiskClass":{"type":"integer","format":"int32","description":"The annualized risk class based on the standard deviation, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedRiskClassComplex":{"type":"number","description":"The annualized risk class in a more complex classification, ranging from 0.0 (lowest) to 6 (highest) in 0.01 interval steps (e.g. 1.04)"},"changeToday":{"description":"The change compared to yesterdays End-of-Day value","$ref":"#/definitions/GainLoss"},"changeYTD":{"description":"The change compared to the Jan 1st End-of-Day value; if sufficient data was requested","$ref":"#/definitions/GainLoss"},"changeOneYear":{"description":"The change compared to the End-of-Day value one year ago; if sufficient data was requested","$ref":"#/definitions/GainLoss"},"changeTotal":{"description":"The change compared to the first value in the requested time series","$ref":"#/definitions/GainLoss"}}},"AccessToken":{"type":"object","properties":{"authorities":{"type":"array","items":{"$ref":"#/definitions/GrantedAuthority"}},"details":{"type":"object"},"authenticated":{"type":"boolean"},"accessToken":{"type":"string"},"accessTokenJwt":{"$ref":"#/definitions/JWT"},"expiration":{"type":"integer","format":"int32"},"refreshToken":{"type":"string"},"refreshTokenJwt":{"$ref":"#/definitions/JWT"},"principal":{"$ref":"#/definitions/UserDetails"},"credentials":{"type":"object"},"name":{"type":"string"}}},"Algorithm":{"type":"object","properties":{"name":{"type":"string"},"requirement":{"type":"string","enum":["REQUIRED","RECOMMENDED","OPTIONAL"]}}},"Base64URL":{"type":"object"},"GrantedAuthority":{"type":"object","properties":{"authority":{"type":"string"}}},"Header":{"type":"object","properties":{"customParams":{"type":"object","additionalProperties":{"type":"object"}},"parsedBase64URL":{"$ref":"#/definitions/Base64URL"},"criticalParams":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"includedParams":{"type":"array","uniqueItems":true,"items":{"type":"string"}},"contentType":{"type":"string"},"algorithm":{"$ref":"#/definitions/Algorithm"},"type":{"$ref":"#/definitions/JOSEObjectType"}}},"JOSEObjectType":{"type":"object","properties":{"type":{"type":"string"}}},"JWT":{"type":"object","properties":{"parsedParts":{"type":"array","items":{"$ref":"#/definitions/Base64URL"}},"jwtclaimsSet":{"$ref":"#/definitions/JWTClaimsSet"},"parsedString":{"type":"string"},"header":{"$ref":"#/definitions/Header"}}},"JWTClaimsSet":{"type":"object","properties":{"claims":{"type":"object","additionalProperties":{"type":"object"}},"audience":{"type":"array","items":{"type":"string"}},"notBeforeTime":{"type":"string","format":"date-time"},"issueTime":{"type":"string","format":"date-time"},"jwtid":{"type":"string"},"expirationTime":{"type":"string","format":"date-time"},"issuer":{"type":"string"},"subject":{"type":"string"}}},"UserDetails":{"type":"object","properties":{"accountNonExpired":{"type":"boolean"},"credentialsNonExpired":{"type":"boolean"},"accountNonLocked":{"type":"boolean"},"authorities":{"type":"array","items":{"$ref":"#/definitions/GrantedAuthority"}},"username":{"type":"string"},"enabled":{"type":"boolean"},"password":{"type":"string"}}},"PageableIndustryList":{"type":"object","properties":{"industries":{"type":"array","items":{"$ref":"#/definitions/Industry"}},"paging":{"$ref":"#/definitions/Paging"}}},"Quote":{"type":"object","properties":{"ask":{"type":"number"},"askDateTime":{"type":"string","format":"date-time"},"bid":{"type":"number"},"bidDateTime":{"type":"string","format":"date-time"},"last":{"type":"number"},"lastDateTime":{"type":"string","format":"date-time"},"changeToday":{"type":"number"},"changePercentToday":{"type":"number"},"changeAbs":{"type":"number"},"changePercentAbs":{"type":"number"},"decimals":{"type":"integer","format":"int32"},"upDown":{"type":"integer","format":"int32"}}},"AccountReference":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"name":{"type":"string","description":"The literal account name"},"currency":{"type":"string","description":"The account currency (3 letter ISO code)"},"initialBalanceDate":{"type":"string","format":"date-time","description":"Date of this very first balance"},"bic":{"type":"string","description":"The accounts BIC; if linked to a bank or defined by the user."},"taxRate":{"type":"number","description":"A default setting for the accounts tax rate; this may be used when deducting taxes."},"defaultCommission":{"type":"number","description":"A default setting fro the accounts booking commission; this may be used when applying commissions."}}},"ContractId":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"The (DB-level) ID"},"contractId":{"type":"string","description":"The contract ID"},"isContractIdCurated":{"type":"boolean","description":"Is the contract ID curated (i.e. modified or confirmed by the user)?"},"type":{"type":"string","description":"The type of ID; this may be a contract ID, a customer ID or something else","enum":["contract_id","customer_id","other_id"]},"isTypeCurated":{"type":"boolean","description":"Is the type curated (i.e. modified or confirmed by the user)?"},"score":{"type":"number","description":"A probabilistic score giving the quality of the automatically detected ID; the higher the better. Scores above 1 are highly reliable, scores below 0.5 should make you suspicious. A scoe is only available if the entity was automatically detected and not manually created."},"wasDetected":{"type":"boolean","description":"Has the ID been automatically detected (true) or was it manually assigned (false)?"}}},"Insurance":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"otherProvider":{"type":"string"},"contractId":{"type":"string"},"contractHolder":{"type":"string"},"planName":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"status":{"type":"string"},"noticeAlertEnabled":{"type":"boolean"},"lastClassificationRun":{"type":"string","format":"date-time"},"comment":{"type":"string"},"account":{"$ref":"#/definitions/AccountReference"},"category":{"$ref":"#/definitions/InsuranceCategory"},"subCategory":{"$ref":"#/definitions/InsuranceCategory"},"provider":{"$ref":"#/definitions/InsuranceProvider"},"contractIds":{"type":"array","items":{"$ref":"#/definitions/ContractId"}},"latestPaymentAmount":{"type":"number"},"latestPaymentDate":{"type":"string","format":"date-time"},"paymentInterval":{"type":"integer","format":"int32"},"totalPaymentPerYear":{"type":"number"},"yearOnYearPaymentIncrease":{"type":"number"},"balance":{"type":"number"},"balanceLastUpdate":{"type":"string","format":"date-time"},"insuredAmount":{"type":"number"},"isPensionScheme":{"type":"boolean"},"guaranteedDeathBenefit":{"type":"number"},"guaranteedMaturityPayment":{"type":"number"},"expectedMaturityPayment":{"type":"number"},"guaranteedMonthlyPension":{"type":"number"},"expectedMonthlyPension":{"type":"number"},"hasOneTimePayment":{"type":"boolean"},"hasOccupationalDisabilityException":{"type":"boolean"},"hasOccupationalDisabilityPension":{"type":"boolean"},"hasOccupationalInvalidityException":{"type":"boolean"},"isTaxFree":{"type":"boolean"},"hasGuaranteedMaturityPayment":{"type":"boolean"},"hasGuaranteedMonthlyPension":{"type":"boolean"},"isFundBased":{"type":"boolean"},"isFundBasedWithoutGuarantee":{"type":"boolean"},"isHybrid":{"type":"boolean"}}},"InsuranceCategory":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"description":{"type":"string"},"type":{"type":"string"},"parent":{"$ref":"#/definitions/InsuranceCategory"},"hasInsuredAmount":{"type":"boolean"},"isPensionScheme":{"type":"boolean"},"calculatorUrl":{"type":"string"}}},"InsuranceProvider":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"nameTag":{"type":"string"},"description":{"type":"string"},"providerId":{"type":"string"},"externalReference":{"type":"string"},"isAlias":{"type":"boolean"},"aliasFor":{"$ref":"#/definitions/InsuranceProvider"},"automaticDetection":{"type":"boolean"},"status":{"type":"string"}}},"PageableInsuranceList":{"type":"object","properties":{"insurances":{"type":"array","items":{"$ref":"#/definitions/Insurance"}},"paging":{"$ref":"#/definitions/Paging"}}},"CreateOrUpdateContractIdParams":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"The (DB-level) ID; in case this is an update"},"contractId":{"type":"string","description":"The contract ID, required for creation"},"isContractIdCurated":{"type":"boolean","description":"Is the contract ID curated (i.e. modified or confirmed by the user)? This flag will be forced true for manual creation; and also if the contract ID is manually changed."},"type":{"type":"string","description":"The type of ID; this may be a contract ID, a customer ID or something else; required for creation","enum":["contract_id","customer_id","other_id"]},"isTypeCurated":{"type":"boolean","description":"Is the type curated (i.e. modified or confirmed by the user)? This flag will be forced true for manual creation; and also if the type is manually changed."},"isDeleted":{"type":"boolean","description":"Mark the contract ID as deleted"}}},"CreateOrUpdateInsuranceParams":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"The insurance ID, only required for a batch update"},"accountId":{"type":"integer","format":"int64"},"subCategoryId":{"type":"integer","format":"int64"},"providerId":{"type":"integer","format":"int64"},"createOrUpdateContractIdParamsList":{"type":"array","description":"A list of contract or customer IDs to create or update. Include the ID for an update","items":{"$ref":"#/definitions/CreateOrUpdateContractIdParams"}},"paymentInterval":{"type":"integer","format":"int32"},"status":{"type":"string"},"comment":{"type":"string"},"balance":{"type":"number"},"contractId":{"type":"string"},"contractHolder":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":"string","format":"date-time"},"noticeAlertEnabled":{"type":"boolean"},"planName":{"type":"string"},"insuredAmount":{"type":"number"},"guaranteedDeathBenefit":{"type":"number"},"guaranteedMaturityPayment":{"type":"number"},"expectedMaturityPayment":{"type":"number"},"guaranteedMonthlyPension":{"type":"number"},"expectedMonthlyPension":{"type":"number"},"hasOneTimePayment":{"type":"boolean"},"hasOccupationalDisabilityException":{"type":"boolean"},"hasOccupationalDisabilityPension":{"type":"boolean"},"hasOccupationalInvalidityException":{"type":"boolean"},"isTaxFree":{"type":"boolean"},"hasGuaranteedMaturityPayment":{"type":"boolean"},"hasGuaranteedMonthlyPension":{"type":"boolean"},"isFundBased":{"type":"boolean"},"isFundBasedWithoutGuarantee":{"type":"boolean"},"isHybrid":{"type":"boolean"}}},"CreateOrUpdateInsuranceParamsList":{"type":"object","properties":{"createOrUpdateInsuranceParamsList":{"type":"array","items":{"$ref":"#/definitions/CreateOrUpdateInsuranceParams"}}}},"MergeInsuranceParams":{"type":"object","required":["targetId","toMergeIds"],"properties":{"targetId":{"type":"integer","format":"int64","description":"ID of the insurance we will merge into"},"toMergeIds":{"type":"array","description":"ID of the insurance that will be merged into 'target'; this insurance will be deleted after successful merge","items":{"type":"integer","format":"int64"}}}},"PageableInsuranceCategoryList":{"type":"object","properties":{"insuranceCategories":{"type":"array","items":{"$ref":"#/definitions/InsuranceCategory"}},"paging":{"$ref":"#/definitions/Paging"}}},"PageableInsuranceProviderList":{"type":"object","properties":{"insuranceProviders":{"type":"array","items":{"$ref":"#/definitions/InsuranceProvider"}},"paging":{"$ref":"#/definitions/Paging"}}},"CreateOrUpdateInsuranceProviderParams":{"type":"object","properties":{"name":{"type":"string","description":"The provider name; a search will try to match the name; required for creation"},"nameTag":{"type":"string","description":"An optional short pre-filter tag for the search algorithm; the tag must be matched in order to count as a valid search result. Send an empty or blank string to clear."},"description":{"type":"string","description":"An optional description (informative only); send an empty or blank string to clear."},"providerId":{"type":"string","description":"A unique ID of the insurance company; send an empty or blank string to clear."},"externalReference":{"type":"string","description":"A unique external reference, e.g. to link to third party master data; send an empty or blank string to clear."},"isAlias":{"type":"boolean","description":"Is this an alias entry?"},"aliasFor":{"type":"integer","format":"int64","description":"ID of the insurance provider for which this entry is an alias; will be cleared if isAlias is set to false."},"automaticDetection":{"type":"boolean","description":"Is automatic detection enabled? Required for creation"},"status":{"type":"string","description":"The status; will default to active if not given","enum":["active","deleted","under_review"]}}},"InsuranceProviderSpecificContractIdPattern":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"insuranceProviderId":{"type":"integer","format":"int64","description":"ID of the insurance provider the pattern belongs to"},"pattern":{"type":"string","description":"The pattern for ID detection"},"replacementPattern":{"type":"string","description":"Should we replace parts after ID detection?"},"type":{"type":"string","description":"The type of ID","enum":["contract_id","customer_id","other_id"]},"enabled":{"type":"boolean","description":"Is the pattern enabled?"}}},"InsuranceProviderSpecificContractIdPatternList":{"type":"object","properties":{"insuranceProviderSpecificContractIdPatterns":{"type":"array","items":{"$ref":"#/definitions/InsuranceProviderSpecificContractIdPattern"}}}},"CreateOrUpdateInsuranceProviderSpecificContractIdPatternParams":{"type":"object","required":["type"],"properties":{"insuranceProviderId":{"type":"integer","format":"int64","description":"ID of the insurance provider the pattern belongs to; required for creation"},"pattern":{"type":"string","description":"The pattern for ID detection; required for creation"},"replacementPattern":{"type":"string","description":"Should we replace parts after ID detection? Optional field."},"type":{"type":"string","description":"The type of ID; required for creation","enum":["contract_id","customer_id","other_id"]},"enabled":{"type":"boolean","description":"Is the pattern enabled? Required for creation."}}},"InterfaceSelectionOption":{"type":"object","required":["bicGroup","id","interfaces","optionKey"],"properties":{"id":{"type":"integer","format":"int64","example":1,"description":"Technical identifier"},"bicGroup":{"type":"string","example":"COMDIRECT","description":"The BIC / BIC Group this import option belongs to"},"optionKey":{"type":"string","example":"depots.and.other.accounts","description":"The key of the import option, for internationalization","enum":["checking.accounts","depots.and.reference.accounts","depots.and.other.accounts","other.accounts","credit.cards"]},"interfaces":{"type":"array","example":"['XS2A', 'FINTS_SERVER']","description":"The interfaces this import option applies to. If the option is selected,\n these interfaces should be imported","items":{"type":"string"}}}},"InterfaceSelectionOptionList":{"type":"object","required":["interfaceSelectionOptions"],"properties":{"interfaceSelectionOptions":{"type":"array","description":"Available options","items":{"$ref":"#/definitions/InterfaceSelectionOption"}}}},"UpdateInterfaceSelectionOptionParams":{"type":"object","properties":{"optionKey":{"type":"string","example":"depots.and.other.accounts","description":"The key of the import option, for internationalization.","enum":["checking.accounts","depots.and.reference.accounts","depots.and.other.accounts","other.accounts","credit.cards"]},"interfaces":{"type":"array","example":"['XS2A', 'FINTS_SERVER']","description":"The interfaces this import option applies to. If the option is selected,\n these interfaces should be imported.","items":{"type":"string"}}}},"CreateInterfaceSelectionOptionParams":{"type":"object","required":["bicGroup","interfaces","optionKey"],"properties":{"bicGroup":{"type":"string","example":"COMDIRECT","description":"The BIC / BIC Group this import option belongs to."},"optionKey":{"type":"string","example":"depots.and.other.accounts","description":"The key of the import option, for internationalization.","enum":["checking.accounts","depots.and.reference.accounts","depots.and.other.accounts","other.accounts","credit.cards"]},"interfaces":{"type":"array","example":"['XS2A', 'FINTS_SERVER']","description":"The interfaces this import option applies to. If the option is selected,\n these interfaces should be imported.","items":{"type":"string"}}}},"InternalTransactionList":{"type":"object","properties":{"internalTransactions":{"type":"array","description":"The internal transactions","items":{"$ref":"#/definitions/InternalTransaction"}},"internalTransactionStatistics":{"description":"Aggregated statistics on the list of transactions","$ref":"#/definitions/InternalTransactionStatistics"}}},"InternalTransactionStatistics":{"type":"object","properties":{"totalGrossTransactionAmount":{"type":"number","description":"The total transaction amount before discounting"},"totalDiscountAmount":{"type":"number","description":"The sum of all given discounts"},"totalChargedAmount":{"type":"number","description":"The sum of charges that result from previous 'negative' discounts; e.g. if we \n reimbursed too much in a previous billing cycle"},"totalNetTransactionAmount":{"type":"number","description":"The total transaction amount after discounting"},"numberOfTransactions":{"type":"integer","format":"int32","description":"The number of transactions"}}},"UpdateInternalTransactionParams":{"type":"object","properties":{"receiverName":{"type":"string","description":"Update the receiver name if present"},"receiverIban":{"type":"string","description":"Update the receiver's IBAN if present"},"receiverBic":{"type":"string","description":"Update the receiver's BIC if present"},"purpose":{"type":"string","description":"Update the transactions purpose if present"},"status":{"type":"string","description":"Update the transaction status if present","enum":["planned","executed","transferFailed"]}}},"Investment":{"type":"object","required":["account","className","currency","currentMarketPriceWithDividend","currentMarketPriceWithDividendAC","currentMarketValue","currentMarketValueAC","currentMarketValueWithDividend","currentMarketValueWithDividendAC","exchangeRate","hasDividend","hasValidIsin","hasValidTickerSymbol","id","isNameUserDefined","isin","jsCompatibleName","literalType","name","numberOfLots","purchasePrice","purchasePriceAC","purchaseValue","purchaseValueAC","quote","quoteProvider","receivedAverageDividend","receivedAverageDividendAC","receivedAverageDividendPercent","receivedTotalDividend","receivedTotalDividendAC","returnOnInvestment","returnOnInvestmentAC","returnOnInvestmentInPercent","returnOnInvestmentInPercentAC","returnOnInvestmentPerLot","returnOnInvestmentPerLotAC","returnOnInvestmentWithDividend","returnOnInvestmentWithDividendAC","returnOnInvestmentWithDividendInPercent","returnOnInvestmentWithDividendInPercentAC","returnOnInvestmentWithDividendPerLot","returnOnInvestmentWithDividendPerLotAC","socialStatistics","standardisedName","tickerSymbol","tickerSymbolWithCurrency","type"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"standardisedName":{"type":"string","description":"The investments standardised name"},"finApiId":{"type":"string","description":"DEPRECATED: use externalId instead. The investment ID as assigned by the banking API provider"},"externalId":{"type":"string","description":"ID assigned by the bank or the multi-banking provider"},"className":{"type":"string","description":"DEPRECATED: The class name of the investment domain; useful in some cases to distinguish between investments and watchlist entries"},"tickerSymbol":{"type":"string","description":"The investments ticker symbol. A ticker symbol is a direct reference to a quote at a certain stock exchange. The ticker symbols structure depends on the respective quote provider."},"tickerSymbolWithCurrency":{"type":"string","description":"Same as the ticker symbol, but with the quote currency attached. This allows to distinguish investments with the same ticker symbol but a different currency. This may happen in cases where we do not have quote data in the investments currency and thus use quote conversion based on exchange rates."},"additionalSymbol":{"type":"string","description":"DEPRECATED: An addition ticker symbol."},"quoteProvider":{"type":"string","description":"The investments quote provider; which always comes together with the ticker symbol. A quote provider is a third-party API that delivers quote data based on a given ticker symbol. Rentablo supports different quote providers; which quote providers are available depends on your license agreement."},"type":{"type":"string","description":"The investment type","enum":["11_stock","21_fund","31_bond","41_cash","51_certos","61_pmetals","71_massets","81_fcurr","22_etf","91_managed"]},"literalType":{"type":"string","description":"A literal investment type; e.g. 11_stock will have literal type 'Aktien'"},"name":{"type":"string","description":"The name of the investment"},"isNameUserDefined":{"type":"boolean","description":"Did the user define or change the name?"},"jsCompatibleName":{"type":"string","description":"DEPRECATED: The name of the investment cleared from characters that could confuse a JS library"},"isin":{"type":"string","description":"The investments ISIN"},"hasValidIsin":{"type":"boolean","description":"true if the investment has a valid ISIN, false otherwise. Non-valid ISINs may exist if the investment does not have quote data assigned."},"wkn":{"type":"string","description":"The investments WKN (if provided); the API internally uses the ISIN as primary identifier."},"hasValidTickerSymbol":{"type":"boolean","description":"true if the investment has a valid ticker symbol, false otherwise. Non-valid ticker symbols exist if the investment does not have quote data assigned."},"currency":{"type":"string","description":"The investments currency. Note that the investment currency may be different from the (native) quote currency if quote currency conversion based on exchange rates is applied."},"numberOfLots":{"type":"number","description":"The number of lots currently in the depot. This value is calculated based on the booking history of an investment."},"numberOfLotsFromBank":{"type":"number","description":"The number of lots that the bank delivered during import. This should typically match the numberOfLots as we perform delta resolution in case of mismatches. Manual user intervention '\n might lead to differences."},"exchangeRate":{"type":"number","description":"The current average exchange rate; if sales are present, the value depends on the gain calculation method (FiFo or average)."},"yield":{"type":"number","description":"The interest per year (yield)."},"dueDate":{"type":"string","format":"date-time","description":"The bond due date; if a bond and entered by the user"},"bondYield":{"type":"number","description":"The bond yield in percent (1 = 100%) based on the current quote; if yield is not known."},"hasDividend":{"type":"boolean","description":"True if the investment has at least one dividend attached"},"receivedAverageDividend":{"type":"number","description":"The average dividend per lot; average over all dividend payments so far"},"receivedTotalDividend":{"type":"number","description":"The total received dividend (the sum of all dividend payments received so far)"},"receivedAverageDividendPercent":{"type":"number","description":"The average dividend per lot in percent of the purchase price; average over all dividend payments so far. The value may depend on the gain calculation method (FiFo or average)."},"receivedAverageDividendAC":{"type":"number","description":"The average dividend per lot in percent of the purchase price in ACCOUNT currency. This value equals receivedAverageDividend if the investment currency equals the account currency. The value may depend on the gain calculation method (FiFo or average)."},"receivedTotalDividendAC":{"type":"number","description":"The total received dividend (the sum of all dividend payments received so far) in ACCOUNT currency. This value equals receivedAverageDividend if the investment currency equals the account currency."},"receivedAverageDividendPercentAC":{"type":"number","description":"The average dividend per lot in percent of the purchase price in ACCOUNT currency. This value equals receivedAverageDividendPercent if the investment currency equals the account currency. The value may depend on the gain calculation method (FiFo or average)."},"quote":{"description":"The current quote in investment currency","$ref":"#/definitions/InvestmentQuote"},"purchasePrice":{"type":"number","description":"The investments purchase price per lot.\n This is the theoretical value calculated based on the booking history for this investment. As multibanking data may be incomplete or estimated, this value may differ from the value delivered by the bank."},"purchasePriceAC":{"type":"number","description":"The investments purchase price per lot in ACCOUNT currency.\n This is the theoretical value calculated based on the booking history for this investment. As multibanking data may be incomplete or estimated, this value may differ from the value delivered by the bank."},"purchasePriceFromBank":{"type":"number","description":"The purchase price as delivered by the bank. Only available if imported from a bank"},"purchaseValue":{"type":"number","description":"The investments purchase value (the price for all lots)"},"purchaseValueAC":{"type":"number","description":"The investments purchase value (the price for all lots) in ACCOUNT currency"},"currentMarketValue":{"type":"number","description":"The current market value per lot"},"currentMarketValueAC":{"type":"number","description":"The current market value per lot in ACCOUNT currency"},"returnOnInvestment":{"type":"number","description":"The return on investment so far; this is purchaseValue - marketValue"},"returnOnInvestmentAC":{"type":"number","description":"The return on investment so far; this is purchaseValue - marketValue; in ACCOUNT currency"},"returnOnInvestmentPerLot":{"type":"number","description":"The return on investment per lot so far; this is purchasePrice - quote"},"returnOnInvestmentPerLotAC":{"type":"number","description":"The return on investment per lot so far; this is purchasePrice - quote; in ACCOUNT currency"},"returnOnInvestmentInPercent":{"type":"number","description":"The current return on investment in percent"},"returnOnInvestmentInPercentAC":{"type":"number","description":"The current return on investment in percent; in ACCOUNT currency"},"currentMarketPriceWithDividend":{"type":"number","description":"The current market price per lot if we included dividends received so far. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"currentMarketPriceWithDividendAC":{"type":"number","description":"The current market price per lot if we included dividends received so far; in ACCOUNT currency. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"currentMarketValueWithDividend":{"type":"number","description":"The current market value (all lots) if we included dividends received so far. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"currentMarketValueWithDividendAC":{"type":"number","description":"The current market value (all lots) if we included dividends received so far; in ACCOUNT currency. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"returnOnInvestmentWithDividend":{"type":"number","description":"Same as return on investment, but including all dividends received so far. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"returnOnInvestmentWithDividendAC":{"type":"number","description":"Same as return on investment AC, but including all dividends received so far. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"returnOnInvestmentWithDividendPerLot":{"type":"number","description":"The return on investment so far; if we include received dividends. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"returnOnInvestmentWithDividendPerLotAC":{"type":"number","description":"The return on investment so far in ACCOUNT currency; if we include received dividends. Note that this value is mainly illustrative, as we would have to consider re-investment of dividends from a statistical point."},"returnOnInvestmentWithDividendInPercent":{"type":"number","description":"Same as returnOnInvestmentWithDividend; but in percent of the purchase value."},"returnOnInvestmentWithDividendInPercentAC":{"type":"number","description":"Same as returnOnInvestmentWithDividendAC; but in percent of the purchase value."},"account":{"description":"Reference to the account (depot) holding the investment","$ref":"#/definitions/AccountReference"},"tag":{"description":"A user defined tag; used for custom classification","$ref":"#/definitions/Tag"},"subCategoryId":{"type":"integer","format":"int64","description":"A user defined sub-category"},"region":{"description":"The investments region","$ref":"#/definitions/Region"},"industry":{"description":"The investments industry sector (GICS classification)","$ref":"#/definitions/Industry"},"socialStatistics":{"description":"Social statistics on the investment","$ref":"#/definitions/InvestmentSocialStatistics"}}},"InvestmentQuote":{"type":"object","required":["changeAbs","changeAbsEUR","changePercentAbs","currency","isToday","last","lastDateTime","lastEUR","quoteProvider"],"properties":{"currency":{"type":"string","description":"The quote currency; 3-letter ISO code"},"quoteProvider":{"type":"string","description":"The quote provider"},"last":{"type":"number","description":"The 'last' quote; this is the price of the last actual transaction that occurred"},"lastEUR":{"type":"number","description":"The 'last' quote converted to EUR; this equals last if quote currency is EUR"},"lastDateTime":{"type":"string","format":"date-time","description":"Timestamp of the 'last' quote"},"isToday":{"type":"boolean","description":"true if the quote is from today"},"changeAbs":{"type":"number","description":"The change as absolute value"},"changeAbsEUR":{"type":"number","description":"The change as absolute value converted to EUR"},"changePercentAbs":{"type":"number","description":"The change in percent"},"stockExchangeName":{"type":"string","description":"The stock exchange name if present"},"stockExchangeId":{"type":"integer","format":"int32"}}},"InvestmentSocialStatistics":{"type":"object","properties":{"percentOfUsersHoldingInvestment":{"type":"number"},"recentBuys":{"type":"number"},"recentSells":{"type":"number"},"numberOfComments":{"type":"integer","format":"int32"},"latestCommentDate":{"type":"string","format":"date-time"},"hasUnreadComments":{"type":"boolean"}}},"PageableInvestmentList":{"type":"object","required":["cashBalance","investments","totalMarketValueAC"],"properties":{"investments":{"type":"array","description":"List of investments","items":{"$ref":"#/definitions/Investment"}},"cashBalance":{"type":"number","description":"The cash balance of all reference accounts / included cash accounts. This value will be zero unless you provided the accountId parameter."},"totalMarketValueAC":{"type":"number","description":"The total market value of all investments; in account currency"},"paging":{"description":"Paging parameters","$ref":"#/definitions/Paging"}}},"Tag":{"type":"object","properties":{"value":{"type":"string"}}},"InvestmentBatchTransferParams":{"type":"object","required":["id"],"properties":{"id":{"type":"integer","format":"int64","description":"Transfer the investment with the given ID"},"numberOfLots":{"type":"number","description":"How many lots will be transferred. If not given, all lots will be transferred"}}},"InvestmentBatchTransferParamsList":{"type":"object","required":["dateOfTransfer","transferToAccountId"],"properties":{"transferToAccountId":{"type":"integer","format":"int64","description":"Transfer all assets into this account"},"dateOfTransfer":{"type":"string","format":"date-time","description":"The date of the transfer"},"investmentBatchTransferParamsList":{"type":"array","description":"A list of all investments to transfer to the given depot","items":{"$ref":"#/definitions/InvestmentBatchTransferParams"}}}},"RegionAndIndustryClassification":{"type":"object","properties":{"region":{"$ref":"#/definitions/Region"},"industry":{"$ref":"#/definitions/Industry"}}},"BatchSingleInvestmentTwror":{"type":"object","properties":{"singleInvestmentTwrorRecords":{"type":"array","items":{"$ref":"#/definitions/SingleInvestmentTwrorRecord"}}}},"SingleInvestmentTwrorRecord":{"type":"object","properties":{"investmentReference":{"description":"A reference to the investment this TWROR belongs to","$ref":"#/definitions/InvestmentReference"},"from":{"type":"string","description":"Calculation start; if the investment was purchased after this date, the calculation starts at the purchase date. Format is US-date format (YYYY-MM-DD)."},"to":{"type":"string","description":"Calculation end; if the investment was sold before this date, the calculation ends at the sell date. Format is US-date format (YYYY-MM-DD)."},"twror":{"type":"number","description":"The Time Weighted Rate of Return (Performance). Instead of using daily dates, we use a simplified calculation defined as purchaseValue / (currentMarketValue + cashFlow)."},"purchaseValue":{"type":"number","description":"The valuation at the beginning of the calculation (number of lots * market price)"},"currentMarketValue":{"type":"number","description":"The valuation at the end of the calculation (number of lots * market price)"},"valuationGainAbs":{"type":"number","description":"The absolute gain in valuation; cash-flow adjusted. This is currentMarketValue - purchaseValue + cashFlow."},"cashFlow":{"type":"number","description":"The aggregated cash flows in the calculation period"}}},"InvestmentTransferParams":{"type":"object","required":["dateOfTransfer","transferToAccountId"],"properties":{"transferToAccountId":{"type":"integer","format":"int64","description":"Transfer all assets into this account"},"dateOfTransfer":{"type":"string","format":"date-time","description":"The date of the transfer"},"numberOfLots":{"type":"number","description":"How many lots will be transferred. If not given, all lots will be transferred"}}},"BankConnectionEventWrapper":{"type":"object","required":["mandatorId","userId"],"properties":{"userId":{"type":"integer","format":"int64","example":1,"description":"User identifier"},"mandatorId":{"type":"integer","format":"int64","example":1,"description":"User mandator identifier"},"severity":{"type":"string","example":"error","description":"Log severity level","enum":["info","debug","error"]},"bankName":{"type":"string","description":"Bank name"},"bankSlug":{"type":"string","description":"Bank slug"},"bic":{"type":"string","description":"Bank Identifier Code"},"multiBankingProvider":{"type":"string","example":"FIN_API","description":"Multibanking provider","enum":["FIN_API","NETFONDS","WEALTH_API"]},"logResponseBody":{"type":"object","description":"Logged error response body","additionalProperties":{"type":"object"}},"createdAt":{"type":"string","description":"Created at"}},"description":"A wrapper around finAPIs bank connection event"},"BankConnectionLEventWrapper":{"type":"object","required":["bankConnectionEvents"],"properties":{"bankConnectionEvents":{"type":"array","description":"The list of bank connection events","items":{"$ref":"#/definitions/BankConnectionEventWrapper"}}},"description":"A wrapper around finAPIs bank connection event/log list"},"EmailParams":{"type":"object","properties":{"senderName":{"type":"string"},"receiverName":{"type":"string"},"receiverEmail":{"type":"string"},"emailTitle":{"type":"string"},"emailBody":{"type":"string"},"challengeToken":{"type":"string"}}},"ContactUsParams":{"type":"object","required":["challengeToken","email"],"properties":{"firstName":{"type":"string","description":"The contacting persons first name"},"lastName":{"type":"string","description":"The contacting persons last name"},"title":{"type":"string","description":"The contacting persons title or position"},"email":{"type":"string","description":"The contacting persons email"},"phone":{"type":"string","description":"The contacting persons phone number"},"company":{"type":"string","description":"The contacting persons company"},"message":{"type":"string","description":"The contacting persons peronal message to us"},"registerToNewsletter":{"type":"boolean","description":"Should we subscribe the contacting person to our B2B newsletter; default is false"},"challengeToken":{"type":"string","description":"A challenge token; required for captcha validation"}}},"CreateOrUpdateManagedDepotParams":{"type":"object","required":["amount","depotValuationAfterBooking"],"properties":{"amount":{"type":"number","description":"The amount moved in the transaction; sign is ignored"},"depotValuationAfterBooking":{"type":"number","description":"The depot valuation after the transaction; sign is ignored. A value of zero means\n all lots have been sold."},"createOrUpdateInvestmentParams":{"description":"The investment including the booking params. Note that number of lots and security\n price are not required and will be overwritten if provided.","$ref":"#/definitions/CreateOrUpdateInvestmentParams"}}},"Mandator":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"clientId":{"type":"string"},"publicId":{"type":"string"},"clientSecret":{"type":"string"}}},"CreateOrUpdateMandatorParams":{"type":"object","properties":{"clientSecret":{"type":"string"},"clientId":{"type":"string"},"publicId":{"type":"string"}}},"MandatorList":{"type":"object","properties":{"mandators":{"type":"array","items":{"$ref":"#/definitions/Mandator"}}}},"MandatorConfiguration":{"type":"object","properties":{"supportsNewUserRegistration":{"type":"boolean","description":"Does this mandator support the registration of new users? This property should be set to false in case this mandator is a container for a single B2B user, e.g. a blogger using our B2B features to report his depot performance to his readers."},"secondAuthenticationFactorEnabled":{"type":"boolean","description":"Is the second authentication factor enabled for this mandators users?"},"secondAuthenticationFactorPattern":{"type":"string","description":"The pattern to use for the second authentication factor. Only required, if secondAuthenticationFactorEnabled is set true for this mandator."},"refreshTokenExpirationInSeconds":{"type":"integer","format":"int32","description":"The number of seconds after which a refresh token expires. Default is no expiry."},"oauthClientCredentialsEnabled":{"type":"boolean","description":"Does server side oauth require client credentials? This should be enabled for\n all server-to-server use cases."},"investmentReportEnabled":{"type":"boolean","description":"Is the sending of investment reports enabled? Note that currently no mandator-specific templating for investment reports is supported."},"anonymousCommentsEnabled":{"type":"boolean","description":"Are anonymous comments enabled? Usually, this should be disabled to prevent SPAM. However, in special cases - especially when used by Bloggers, anonymous comments may make sense."},"commentChallengeTokenEnabled":{"type":"boolean","description":"Do we require a challenge token for comments. If enabled, a google challenge captcha validation is enforced prior to submitting a comment."},"finApiClientId":{"type":"string","description":"The finAPI client ID of the mandator."},"finApiClientSecret":{"type":"string","description":"The finAPI client Secret of the mandator"},"finApiAdminClientId":{"type":"string","description":"The finAPI admin client ID of the mandator"},"finApiAdminClientSecret":{"type":"string","description":"The finAPI admin client secret of the mandator"},"finApiDataDecryptionKey":{"type":"string","description":"The finAPI data decryption key of the mandator."},"isTppWebFormRequired":{"type":"boolean","description":"Does the mandator have to use the TPP web form flow. This is always the case if the mandator does not have its own BaFIN (or other national regulators) license as an account information service provider."},"batchSyncPersistsEstimatedBookings":{"type":"boolean","description":"Should the finAPI batch synchronization job persist bookings that have estimated dates and / or prices?"},"supportsSubscriptions":{"type":"boolean","description":"Does this mandator support API-level subscriptions to payed services? In case\n subscriptions are supported, certain features will be blocked or restricted on API level unless the user\n subscribes to the respective feature."},"stockFundamentalsLicense":{"type":"boolean","description":"Does this mandator have a license to access stock fundamentals? No access will\n be granted if false or undefined."},"fundFundamentalsLicense":{"type":"boolean","description":"Does this mandator have a license to access fund fundamentals? No access will\n be granted if false or undefined."},"cryptoLicense":{"type":"boolean","description":"Does this mandator have a license to access crypto currency quotes?"},"publicPortfoliosLicense":{"type":"boolean","description":"Does this mandator have a license to access public portfolios?"},"dividendPlannerLicense":{"type":"boolean","description":"Does this mandator have a license to access the dividend planner?"}},"description":"A container for a mandator configuration"},"CreateOrUpdateMandatorConfigurationParams":{"type":"object","properties":{"supportsNewUserRegistration":{"type":"boolean","description":"Does this mandator support the registration of new users? This property should be set to false in case this mandator is a container for a single B2B user, e.g. a blogger using our B2B features to report his depot performance to his readers."},"secondAuthenticationFactorEnabled":{"type":"boolean","description":"Is the second authentication factor enabled for this mandators users?"},"secondAuthenticationFactorPattern":{"type":"string","description":"The pattern to use for the second authentication factor. Only required, if secondAuthenticationFactorEnabled is set true for this mandator."},"refreshTokenExpirationInSeconds":{"type":"integer","format":"int32","description":"The number of seconds after which a refresh token expires. Default is no expiry."},"oauthClientCredentialsEnabled":{"type":"boolean","description":"Does server side oauth require client credentials? This should be enabled for\n all server-to-server use cases."},"investmentReportEnabled":{"type":"boolean","description":"Is the sending of investment reports enabled? Note that currently no mandator-specific templating for investment reports is supported."},"anonymousCommentsEnabled":{"type":"boolean","description":"Are anonymous comments enabled? Usually, this should be disabled to prevent SPAM.\n However, in special cases - especially when used by Bloggers, anonymous comments may make sense."},"commentChallengeTokenEnabled":{"type":"boolean","description":"Do we require a challenge token for comments. If enabled, a google challenge captcha validation is enforced prior to submitting a comment."},"finApiClientId":{"type":"string","description":"The finAPI client ID of the mandator."},"finApiClientSecret":{"type":"string","description":"The finAPI client Secret of the mandator"},"finApiAdminClientId":{"type":"string","description":"The finAPI admin client ID of the mandator"},"finApiAdminClientSecret":{"type":"string","description":"The finAPI admin client secret of the mandator"},"finApiDataDecryptionKey":{"type":"string","description":"The finAPI data decryption key of the mandator."},"isTppWebFormRequired":{"type":"boolean","description":"Does the mandator have to use the TPP web form flow. This is always the case if the mandator does not have its own BaFIN (or other national regulators) license as an account information service provider."},"batchSyncPersistsEstimatedBookings":{"type":"boolean","description":"Should the finAPI batch synchronization job persist bookings that have estimated dates and / or prices?"},"supportsSubscriptions":{"type":"boolean","description":"Does this mandator support API-level subscriptions to payed services? In case\n subscriptions are supported, certain features will be blocked or restricted on API level unless the user\n subscribes to the respective feature. Default is false."},"stockFundamentalsLicense":{"type":"boolean","description":"Does this mandator have a license to access stock fundamentals? No access will\n be granted if false or undefined."},"fundFundamentalsLicense":{"type":"boolean","description":"Does this mandator have a license to access fund fundamentals? No access will\n be granted if false or undefined."},"cryptoLicense":{"type":"boolean","description":"Does this mandator have a license to access crypto currency quotes?"},"publicPortfoliosLicense":{"type":"boolean","description":"Does this mandator have a license to access public portfolios?"},"dividendPlannerLicense":{"type":"boolean","description":"Does this mandator have a license to access the dividend planner?"}},"description":"Create or update a mandator configuration"},"MandatorInvoice":{"type":"object","properties":{"customerId":{"type":"string","description":"The customers ID"},"invoiceId":{"type":"string","description":"the invoice ID"},"activeUsers":{"type":"integer","format":"int64","description":"The number of active users"},"finApiUsers":{"type":"integer","format":"int64","description":"The number of finAPI users"},"year":{"type":"integer","format":"int32","description":"The invoiced year"},"month":{"type":"integer","format":"int32","description":"The invoiced month"}}},"StringList":{"type":"object","properties":{"values":{"type":"array","items":{"type":"string"}}}},"MasterData":{"type":"object","properties":{"type":{"type":"string","description":"The master data type; allows to group records together"},"slug":{"type":"string","description":"A type-wide unique identifier; only used in a few cases"},"value":{"type":"string","description":"The master data value"},"mapping":{"type":"string","description":"The master data value maps to this value"},"isEnabled":{"type":"boolean","description":"Should this master data record still be used? We never delete master data; rather\n records become invalid by setting isEnabled to false."}}},"MasterDataList":{"type":"object","properties":{"masterData":{"type":"array","items":{"$ref":"#/definitions/MasterData"}}}},"CreateOrUpdateMultipleNaturalPersonParams":{"type":"object","properties":{"createOrUpdateNaturalPersonParamsList":{"type":"array","items":{"$ref":"#/definitions/CreateOrUpdateNaturalPersonParams"}}}},"PerformanceInterval":{"type":"object","properties":{"from":{"type":"string","format":"date","description":"Interval start date"},"to":{"type":"string","format":"date","description":"Interval end date"},"intervalTwror":{"type":"number","description":"The TWROR with given interval."}},"description":"Performance metrics for given interval"},"PerformanceIntervalList":{"type":"object","properties":{"performanceIntervalList":{"type":"array","items":{"$ref":"#/definitions/PerformanceInterval"}}}},"CreatePerformanceIntervalsParams":{"type":"object","properties":{"startDate":{"type":"string","format":"date","description":"Start of the performance calculation. The start date is limited to the maximum quote historic, which is currently 10 years. Default is 6 years ago."},"endDate":{"type":"string","format":"date","description":"End of the performance calculation; default is today"},"accountIds":{"type":"array","description":"Calculate the performance on the given accounts or depots.","items":{"type":"integer","format":"int64"}},"interval":{"type":"string","description":"Restrict data points to the given interval. Default: day.","enum":["day","week","month","year"]},"intervalPosition":{"type":"string","description":"Defines which value within the specified interval is used. Default value is current. Ignored if no interval is given or interval is ```day```.\n The interval position is defined as:\n **current**: current day of week / month / year \n **first**: first day of the week / month / year\n **last:** last day of the week / month / year. Note that the last day for an incomplete year, month or week may be today.","enum":["current","first","last"]},"includeCash":{"type":"boolean","description":"Should the calculation be done including the reference accounts cash balance; if this is set true, dividends will be included as well as they are part of the cash balance."},"includeDividends":{"type":"boolean","description":"Should dividends be included in the performance calculation."},"assetClasses":{"type":"array","description":"Should we filter for individual asset classes? If filtering is activated, only quote performance (no cash, no dividends) is supported.","items":{"type":"string"}}}},"PerformanceTimePoint":{"type":"object","properties":{"from":{"type":"string","format":"date","description":"Time point - calculation start date"},"to":{"type":"string","format":"date","description":"Calculation end date (always today)"},"twror":{"type":"number","description":"The TWROR from the given time point to now."},"annualizedTwror":{"type":"number","description":"The annualized TWROR from the given time point to now."},"irr":{"type":"number","description":"The IRR from the given time point to now."}},"description":"Performance from the given time point to now"},"PerformanceTimePointList":{"type":"object","properties":{"performanceTimePointList":{"type":"array","items":{"$ref":"#/definitions/PerformanceTimePoint"}}}},"CashFlowAndPerformanceStatistics":{"type":"object","required":["assetClasses","cashFlowResults","changeToday","changeTotal","hasData","includeCash","includeDividends","irrResults","twrorResults"],"properties":{"includeCash":{"type":"boolean","description":"Did we include cash in the calculation?"},"includeDividends":{"type":"boolean","description":"Did we include dividends in the calculation?"},"assetClasses":{"type":"array","description":"Did we filter for certain asset classes?","items":{"type":"string"}},"twrorResults":{"type":"array","description":"Sorted list of TWROR results; the earliest date comes first.","items":{"$ref":"#/definitions/TwrorResult"}},"irrResults":{"type":"array","description":"Sorted list of IRR results; the earliest date comes first.","items":{"$ref":"#/definitions/IrrResult"}},"cashFlowResults":{"type":"array","description":"Sorted list of cash flow statistics results; the earliest date comes first.","items":{"$ref":"#/definitions/CashFlowResult"}},"inconsistencyWarnings":{"type":"array","description":"DEPRECATED: Sorted list of inconsistency warnings; the earliest date comes first. \n This feature is now deprecated and the list will always be empty","items":{"$ref":"#/definitions/InconsistencyWarning"}},"hasData":{"type":"boolean","description":"True if twrorResults / cashFlowResults contain at least one non-zero value"},"changeToday":{"description":"The change compared to yesterdays End-of-Day value","$ref":"#/definitions/GainLoss"},"changeYTD":{"description":"The change compared to the Jan 1st End-of-Day value; if sufficient data was requested","$ref":"#/definitions/GainLoss"},"changeOneYear":{"description":"The change compared to the End-of-Day value one year ago; if sufficient data was requested","$ref":"#/definitions/GainLoss"},"changeTotal":{"description":"The change compared to the first value in the requested time series","$ref":"#/definitions/GainLoss"}},"description":"Contains performance and cashflow statistics"},"CashFlowAndPerformanceStatisticsList":{"type":"object","required":["cashFlowAndPerformanceStatisticsList"],"properties":{"cashFlowAndPerformanceStatisticsList":{"type":"array","description":"A list containing performance calculation results for each of the given parameter\n sets. E.g. you might want to calculate with and without considering cash on the reference account, or to\n calculate the performance for ETF and stocks separately","items":{"$ref":"#/definitions/CashFlowAndPerformanceStatistics"}}}},"CashFlowResult":{"type":"object","properties":{"date":{"type":"string","format":"date-time","description":"Date of the data point"},"balance":{"type":"number","description":"Accumulated balance of all accounts"},"investedCapital":{"type":"number","description":"Total invested capital (without performance gains)"},"currentPortfolioValue":{"type":"number","description":"The portfolio market valuation at the given point in time"},"cashFlow":{"type":"number","description":"The cash flow at the given point in time"},"cashFlowSum":{"type":"number","description":"The accumulated cash flows at the given point in time; this is the sum of all cash flows that occurred so far. A positive sum means money came in, a negative sum means money was withdrawn. The sum may also become negative if we have large valuation gains and then withdraw more then we put in before, resulting in a negative savings rate."}}},"InconsistencyWarning":{"type":"object","properties":{"investmentId":{"type":"integer","format":"int64"},"investmentIsin":{"type":"string"},"investmentName":{"type":"string"},"transactionId":{"type":"integer","format":"int64"},"date":{"type":"string","format":"date-time"},"expected":{"type":"number"},"actual":{"type":"number"}}},"IrrResult":{"type":"object","properties":{"from":{"type":"string","format":"date-time","description":"IRR calculation start date"},"to":{"type":"string","format":"date-time","description":"IRR calculation end date"},"intervalSizeInMonths":{"type":"integer","format":"int32","description":"The interval size used; this equals to - from in months."},"irr":{"type":"number","format":"double","description":"The respective IRR."}}},"TwrorResult":{"type":"object","properties":{"date":{"type":"string","format":"date-time","description":"Date of the data point"},"twror":{"type":"number","description":"The Time Weighted Rate of Return (TWROR) at the given point in time"},"portfolioValue":{"type":"number","description":"The portfolio value at the given point in time"},"cashFlow":{"type":"number","description":"The cash flow at the given point in time; this is requred for TWROR calculation"}}},"CashFlowAndPerformanceStatisticsParams":{"type":"object","properties":{"includeCash":{"type":"boolean","description":"Should the calculation be done including the reference accounts cash balance; if this is set true, dividends will be included as well as they are part of the cash balance."},"includeDividends":{"type":"boolean","description":"Should dividends be included in the performance calculation."},"assetClasses":{"type":"array","description":"Should we filter for individual asset classes? If filtering is activated, only quote performance (no cash, no dividends) is supported.","items":{"type":"string"}}}},"CreateCashFlowAndPerformanceStatisticsParams":{"type":"object","required":["cashFlowAndPerformanceStatisticsParamsList"],"properties":{"startDate":{"type":"string","format":"date-time","description":"Start of the performance calculation. The start date is limited to the maximum quote history, which is currently 10 years. Default is 6 years ago."},"endDate":{"type":"string","format":"date-time","description":"End of the performance calculation; default is today"},"accountIds":{"type":"array","description":"Calculate the performance on the given accounts or depots.","items":{"type":"integer","format":"int64"}},"cachedQuotesOnly":{"type":"boolean","description":"For faster execution, do not attempt to look up current quotes via web-service."},"interval":{"type":"string","description":"Restrict data points to the given interval. Default: day.","enum":["day","week","month","year"]},"intervalPosition":{"type":"string","description":"Defines which value within the specified interval is used. Default value is current. Ignored if no interval is given or interval is ```day```.\n The interval position is defined as:\n **current**: current day of week / month / year \n **first**: first day of the week / month / year\n **last:** last day of the week / month / year. Note that the last day for an incomplete year, month or week may be today.","enum":["current","first","last"]},"switchToIntervalBefore":{"type":"string","format":"date-time","description":"**DEPRECATED:** Use interval and interval position\n Return aggregated quotes for values coming before the given date; significantly reduces the size of the result data set."},"cashFlowAndPerformanceStatisticsParamsList":{"type":"array","description":"Request several performance calculations with the respective settings in on go.","items":{"$ref":"#/definitions/CashFlowAndPerformanceStatisticsParams"}}}},"TwrorResultList":{"type":"object","properties":{"twrorResults":{"type":"array","items":{"$ref":"#/definitions/TwrorResult"}}}},"HistogramBin":{"type":"object","properties":{"value":{"type":"number"},"from":{"type":"number"},"to":{"type":"number"},"label":{"type":"string"}}},"HistogramBinList":{"type":"object","properties":{"histogramBins":{"type":"array","items":{"$ref":"#/definitions/HistogramBin"}},"lowPerformanceStart":{"type":"number"},"lowPerformanceEnd":{"type":"number"},"mediumPerformanceStart":{"type":"number"},"mediumPerformanceEnd":{"type":"number"},"highPerformanceStart":{"type":"number"},"highPerformanceEnd":{"type":"number"},"upperPercentileCutoff":{"type":"number"},"lowerPercentileCutoff":{"type":"number"}}},"InvestmentPerformance":{"type":"object","properties":{"holdingTimeInYears":{"type":"number"},"inInvestmentCurrency":{"$ref":"#/definitions/InvestmentPerformanceRecord"},"inAccountCurrency":{"$ref":"#/definitions/InvestmentPerformanceRecord"}}},"InvestmentPerformanceRecord":{"type":"object","properties":{"currentMarketValue":{"type":"number"},"cashFlowSum":{"type":"number"},"irr":{"type":"number"},"irrWithDividends":{"type":"number"},"ror":{"type":"number"},"twror":{"type":"number"},"twrorWithDividends":{"type":"number"}}},"AggregatedGainLossStatistics":{"type":"object","required":["aggregatedFrom","aggregatedTo","grossDividendGain","grossInterestGain","grossOtherGain","grossTradingGain","netDividendGain","netInterestGain","netOtherGain","netTradingGain","taxRefund"],"properties":{"aggregatedFrom":{"type":"string","format":"date-time","description":"Data was aggregated from the given date onwards"},"aggregatedTo":{"type":"string","format":"date-time","description":"Data was aggregated until the given date"},"grossTradingGain":{"type":"number","description":"The aggregated trading gain before tax and commissions. Aggregation starts from the calculation start date."},"netTradingGain":{"type":"number","description":"The aggregated trading gain after tax and commissions. Aggregation starts from the calculation start date."},"grossInterestGain":{"type":"number","description":"The aggregated interest gain before tax and commissions. Aggregation starts from the calculation start date."},"netInterestGain":{"type":"number","description":"The aggregated interest gain after tax and commissions. Aggregation starts from the calculation start date."},"grossDividendGain":{"type":"number","description":"The aggregated dividend gain before tax and commissions. Aggregation starts from the calculation start date."},"netDividendGain":{"type":"number","description":"The aggregated dividend gain after tax and commissions. Aggregation starts from the calculation start date."},"grossDividendYield":{"type":"number","description":"The dividend yield before tax and commission."},"netDividendYield":{"type":"number","description":"The dividend yield after tax and commission."},"grossOtherGain":{"type":"number","description":"The aggregated other gain before tax and commissions. Other gains are gains that cannot clearly be associated with any of the standard types, e.g. a gain from a capital measure. Aggregation starts from the calculation start date."},"netOtherGain":{"type":"number","description":"The aggregated other gain after tax and commissions. Other gains are gains that cannot clearly be associated with any of the standard types, e.g. a gain from a capital measure. Aggregation starts from the calculation start date."},"taxRefund":{"type":"number","description":"The aggregated tax refunds received. Aggregation starts from the calculation start date."}},"description":"Contains aggregated gain/loss statistics. Aggregation starts from the calculation start date"},"IrrTotal":{"type":"object","properties":{"from":{"type":"string","format":"date-time","description":"IRR calculation start date"},"to":{"type":"string","format":"date-time","description":"IRR calculation end date"},"irr":{"type":"number","format":"double","description":"The IRR"}}},"PortfolioPerformanceResult":{"type":"object","required":["aggregatedGainLossStatistics","changeLast","changeTotal","irrIntervals","irrTotal","meta","twrorResults"],"properties":{"twrorResults":{"type":"array","description":"Sorted list of TWROR results; the earliest date comes first.","items":{"$ref":"#/definitions/TwrorAndCashFlowResult"}},"irrIntervals":{"type":"array","description":"Sorted list of IRR in 6, 12, 24, ... 120 month intervals; the earliest date\n comes first.","items":{"$ref":"#/definitions/IrrResult"}},"irrTotal":{"description":"The IRR between calculation start and calculation end.","$ref":"#/definitions/IrrTotal"},"changeLast":{"description":"The latest daily change relative to the 'to' date used in the calculation","$ref":"#/definitions/GainLoss"},"changeYTD":{"description":"The year to day change relative to the 'to' date used in the calculation","$ref":"#/definitions/GainLoss"},"changeOneYear":{"description":"The one-year change relative to the 'to' date used in the calculation","$ref":"#/definitions/GainLoss"},"changeTotal":{"description":"The total change between from and to date used in the calculation","$ref":"#/definitions/GainLoss"},"aggregatedGainLossStatistics":{"description":"Aggregated statistics on trading gains, dividend gains and more between the from and to dates used in the calculation.","$ref":"#/definitions/AggregatedGainLossStatistics"},"meta":{"description":"Metadata about the calculation","$ref":"#/definitions/PortfolioPerformanceResultMeta"}},"description":"Contains performance statistics"},"PortfolioPerformanceResultList":{"type":"object","required":["portfolioPerformanceResults"],"properties":{"portfolioPerformanceResults":{"type":"array","description":"A list containing performance calculation results for each of the given parameter sets. E.g. you might want to calculate with and without considering cash on the reference account, or to calculate the performance for ETF and stocks separately","items":{"$ref":"#/definitions/PortfolioPerformanceResult"}}}},"PortfolioPerformanceResultMeta":{"type":"object","required":["assetClasses","from","includeCash","includeDividends","to"],"properties":{"from":{"type":"string","format":"date-time","description":"The date from which we calculated the performance"},"to":{"type":"string","format":"date-time","description":"The date to which we calculated the performance"},"includeCash":{"type":"boolean","description":"Did we include the cash postion of the reference account(s) in the calculation?"},"includeDividends":{"type":"boolean","description":"Did we include dividends in the calculation?"},"assetClasses":{"type":"array","description":"Did we filter for certain asset classes?","items":{"type":"string"}}},"description":"Contains meta data about the calculation"},"TwrorAndCashFlowResult":{"type":"object","properties":{"date":{"type":"string","format":"date-time","description":"Date of the data point"},"twror":{"type":"number","description":"The Time Weighted Rate of Return (TWROR) at the given point in time. A TWROR of 1 means that there is no portfolio change (you have 100 % of the invested capital). A TWROR of less than 1 means negative performance; a TWROR greater than 1 means positive performance.\n Note that the TWROR is a time-series; this is ```current_twror = previous_twror * (1 + current_return)```. The fact that this is a time series also means that high losses at a certain point in time may have a long impact on the TWROR. For example, if you have a TWROR of 0.5, you need a TWROR of 2 to get back to the original value.\n Also keep in mind that the TWROR is cash flow adjusted. This means a 10 % loss in a portfolio of 100 EUR counts equal to a 10 % loss in a portfolio of 100.000 EUR. This is especially relevant if a portfolio fluctuates in value, e.g. an investor will 'get out of the market' and sell most of his assets. In such cases only a few investments may dominate the portfolio performance.\n The latter effects can be mitigated by calculating the TWROR including the cash position on the reference account."},"purchaseValue":{"type":"number","description":"The purchase value of the portfolio at this given point in time. This is the sum of the purchase value for all investments. The purchase value is calculated First-In-First-Out (fifo) by default"},"currentMarketValue":{"type":"number","description":"The current market value of the portfolio at this given point in time. That is what you would have gotten if you had sold the entire portfolio at this date."},"valuationGainInPercent":{"type":"number","description":"The valuation gain, or a simple gain / loss calculation. This is the current market value divided by the purchase value. This value reflects the valuation gains that were present at this given point in time.\n The valuation gain is a percent value; 0 means no gain; a value of less than zero means a loss; a value greater zero a gain."},"valuationGainAbs":{"type":"number","description":"The absolute valuation gain, or a simple gain / loss calculation. This is the current market value minus the purchase value. This value reflects the absolute valuation gains that were present at this given point in time.\n This is an absolute value in currency; 0 means no gain; a value of less than zero means a loss; a value greater zero a gain."},"cashBalance":{"type":"number","description":"The accumulated balance of all reference accounts included in the calculation"},"cashFlow":{"type":"number","description":"The cash flow in currency at this given point in time. A cash flow is any event that adds or removes money from the portfolio. This includes deposits, withdrawals, dividends, interest payments, and so on. How a cash flow is defined depends on the calculation method.\n **with dividends (default):** buys, sells, dividends and other gains are considered cashflows; deposits and withdrawals are ignored\n **with cash:** only deposits and withdrawals are considered cashflows\n **quotes only:** only buys and sells are considered cashflows; dividends, deposits and withdrawals are\n ignored"},"cashFlowSum":{"type":"number","description":"The accumulated cash flows in currency up to the given point in time; this is the sum of all cash flows that occurred so far. A positive sum means money entered the portfolio, a negative sum means money left the portfolio. In edge cases the sum may become negative if we have large valuation gains and then withdraw more then we added before, resulting in a negative savings rate."}}},"StripeSubscription":{"type":"object","required":["active","currentPeriodEndAt","id","productId","productSlug","subscriptionId"],"properties":{"id":{"type":"integer","format":"int32","description":"Subscription id"},"productSlug":{"type":"string","description":"Product slug"},"productId":{"type":"string","description":"Stripe product id"},"currentPeriodEndAt":{"type":"string","format":"date-time","description":"Subscription end date"},"subscriptionId":{"type":"string","description":"Stripe subscription id"},"active":{"type":"boolean","description":"is subscription active"}}},"PublicAccount":{"type":"object","required":["currency","iconUrl","id","name","type"],"properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"type":{"type":"string","description":"The high-level account type; as assigned by the Rentablo SaaS platform. This type\n defines the behaviour of and the actions available on this account. I.e. only a depot may have investments and\n only a cash account has a balance.","enum":["01_depot","02_cash","04_insurance","05_material_assets"]},"isHidden":{"type":"boolean","description":"true if this account is marked hidden"},"typeFromBank":{"type":"string","description":"The detailed type of the account as defined by the account holding bank. This will be\n null if not provided or the account is manually maintained.","enum":["CHECKING","SAVINGS","CREDIT_CARD","DEPOT","LOAN","MEMBERSHIP","HOME_PURCHASE_SAVINGS","REFERENCE_ACCOUNT","FOREIGN_CURRENCY_ACCOUNT"]},"contraAccountId":{"type":"integer","format":"int64","description":"The ID of the contra account; only available if this is a depot. Each booking on a depot will result in a transaction on the contra account."},"depotIds":{"type":"array","description":"If this is a contra account: the IDs of all attached depots.","items":{"type":"integer","format":"int64"}},"name":{"type":"string","description":"The literal account name"},"balance":{"type":"number","description":"The account balance"},"currency":{"type":"string","description":"The account currency (3 letter ISO code)"},"bankConnectionType":{"type":"string","description":"The accounts bank connection type (if linked to a bank).","enum":["WEALTH_API","FIN_API","NETFONDS"]},"bankName":{"type":"string","description":"The accounts literal bank name; if linked to a bank or defined by the user."},"bankGroup":{"type":"string","description":"DEPRECATED: this field name is misleading; use bicGroup instead.\n A grouping of banks to a common slug like 'SPARKASSE'. Will contain the BIC itself\n if the given bank has only a single BIC."},"bicGroup":{"type":"string","description":"A grouping of banks to a common slug like 'SPARKASSE'. Will contain the BIC itself\n if the given bank has only a single BIC."},"iconUrl":{"type":"string","description":"Url to display the bank icon."},"initialBalance":{"type":"number","description":"The earliest balance that we got at the start of the very first bank synchronization run"},"initialBalanceDate":{"type":"string","format":"date-time","description":"Date of this very first balance"},"activeAssets":{"type":"integer","format":"int32","description":"The number of active assets; this may be investments, material assets or insurances"},"lastManualSyncDate":{"type":"string","format":"date-time","description":"Date of the last manual synchronization"},"lastAutoSyncDate":{"type":"string","format":"date-time","description":"Date of the last automatic (via background job) synchronization"},"lastSyncDate":{"type":"string","format":"date-time","description":"Date of the last manual or automatic synchronization"},"subCategoryId":{"type":"integer","format":"int64","description":"A user defined sub-category"}}},"PublicAccountList":{"type":"object","required":["publicAccounts"],"properties":{"publicAccounts":{"type":"array","description":"A list of public accounts","items":{"$ref":"#/definitions/PublicAccount"}}}},"BatchRiskYieldMetrics":{"type":"object","properties":{"riskYieldMetrics":{"type":"array","description":"The risk and yield statistics of a portfolio or a set of investments","items":{"$ref":"#/definitions/RiskYieldWithInvestment"}}},"description":"The risk and yield statistics of investments"},"RiskYieldWithInvestment":{"type":"object","properties":{"investmentReference":{"$ref":"#/definitions/InvestmentReference"},"annualizedStandardDeviation":{"type":"number","description":"The annualized standard deviation; in percent"},"annualizedRiskClass":{"type":"integer","format":"int32","description":"The annualized risk class, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedRiskClassComplex":{"type":"number","description":"The annualized risk class in a more complex classification, ranging from 0 (lowest)\n to 6 (highest) in 0.01 interval steps"},"annualizedReturn":{"type":"number","description":"The annualized yield; in percent"},"annualizedReturnClass":{"type":"integer","format":"int32","description":"The annualized return class, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedReturnClassComplex":{"type":"number","description":"The annualized return class in a more complex classification, ranging from 0 (lowest)\n to 6 (highest) in 0.01 interval steps"}},"description":"The risk and yield statistics of an investment"},"MockBankConnectionConfigurationParams":{"type":"object","required":["mockBic","mockFilename"],"properties":{"mockFilename":{"type":"string","description":"The filename from which to read the mock data"},"mockBic":{"type":"string","description":"The BIC to use"}}},"RandomUser":{"type":"object","properties":{"username":{"type":"string"},"password":{"type":"string"},"userReference":{"$ref":"#/definitions/UserReference"}}},"CreateRandomUserParams":{"type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"mandatorPublicId":{"type":"string"},"isFifo":{"type":"boolean"},"acceptedAgb":{"type":"boolean"}}},"QuoteMap":{"type":"object","properties":{"quotes":{"type":"object","additionalProperties":{"$ref":"#/definitions/Quote"}}}},"QuoteList":{"type":"object","properties":{"quotes":{"type":"array","items":{"$ref":"#/definitions/QuoteV2"}}}},"QuoteV2":{"type":"object","required":["ask","askDateTime","bid","bidDateTime","changeAbs","changePercent","currency","id","last","lastDateTime","tickerSymbol"],"properties":{"id":{"type":"string","description":"The id of the quote"},"tickerSymbol":{"type":"string","description":"The ticker symbol of the quote"},"currency":{"type":"string","description":"The currency of the quote"},"stockExchangeId":{"type":"integer","format":"int32","description":"The stock exchange id of the quote"},"stockExchangeName":{"type":"string","description":"The stock exchange name of the quote"},"ask":{"type":"number","description":"The ask price of the quote"},"askDateTime":{"type":"string","format":"date-time","description":"The ask price date of the quote"},"bid":{"type":"number","description":"The bid price of the quote"},"bidDateTime":{"type":"string","format":"date-time","description":"The bid price date of the quote"},"last":{"type":"number","description":"The price of the last executed trade for this quote"},"lastDateTime":{"type":"string","format":"date-time","description":"The price date with time of the last executed trade for this quote"},"changeAbs":{"type":"number","description":"The change in currency since the last available price"},"changePercent":{"type":"number","description":"The change in percent since the last available price"}},"description":"The quote information of a security"},"RealizedGainByYear":{"type":"object","properties":{"year":{"type":"integer","format":"int32"},"totalGrossGain":{"type":"number"},"totalNetGain":{"type":"number"},"grossTradingGain":{"type":"number"},"netTradingGain":{"type":"number"},"grossInterestGain":{"type":"number"},"netInterestGain":{"type":"number"},"grossDividendGain":{"type":"number"},"netDividendGain":{"type":"number"},"grossOtherGain":{"type":"number"},"netOtherGain":{"type":"number"},"taxRefund":{"type":"number"}}},"RealizedGainByYearList":{"type":"object","properties":{"realizedGainsByYear":{"type":"array","items":{"$ref":"#/definitions/RealizedGainByYear"}}}},"RealizedGainByBooking":{"type":"object","properties":{"accumulatedGain":{"$ref":"#/definitions/RealizedGain"},"accumulatedTradingGain":{"$ref":"#/definitions/RealizedGain"},"accumulatedDividendGain":{"$ref":"#/definitions/RealizedGain"},"gainsByBooking":{"type":"array","items":{"$ref":"#/definitions/Booking"}}}},"PageableRegionList":{"type":"object","properties":{"regions":{"type":"array","items":{"$ref":"#/definitions/Region"}},"paging":{"$ref":"#/definitions/Paging"}}},"FinApiAccountList":{"type":"object","required":["accounts"],"properties":{"accounts":{"type":"array","description":"List of bank accounts","items":{"$ref":"#/definitions/FinApiAccount"}}},"description":"Container for data of multiple bank accounts"},"ImportRemoteAccountParams":{"type":"object","properties":{"remoteAccountId":{"type":"integer","format":"int64"}}},"NotificationRule":{"type":"object","required":["id","includeDetails","triggerEvent"],"properties":{"id":{"type":"integer","format":"int64","example":1,"description":"Notification rule identifier"},"triggerEvent":{"type":"string","example":"NEW_ACCOUNT_BALANCE","description":"Trigger event type","enum":["NEW_ACCOUNT_BALANCE","NEW_TRANSACTIONS","BANK_LOGIN_ERROR","FOREIGN_MONEY_TRANSFER","LOW_ACCOUNT_BALANCE","HIGH_TRANSACTION_AMOUNT","CATEGORY_CASH_FLOW","NEW_TERMS_AND_CONDITIONS"]},"params":{"type":"object","example":"{\"accountIds\":\"1,2,3\"}","description":"Additional parameters that are specific to the trigger event type. Please refer to the documentation for details.","additionalProperties":{"type":"string"}},"callbackHandle":{"type":"string","example":"handle","description":"The string that finAPI includes into the notifications that it sends based on this rule."},"includeDetails":{"type":"boolean","example":true,"description":"Whether the notification messages that will be sent based on this rule contain encrypted detailed data or not"}},"description":"Data of notification rule"},"RemoteAccountStatus":{"type":"object","properties":{"isAutoUpdateEnabled":{"type":"boolean","description":"Is automatic batch update for this account enabled?"},"notificationRules":{"type":"array","description":"A list of notification rules for this account.","items":{"$ref":"#/definitions/NotificationRule"}}}},"UpdateRemoteAccountStatusParams":{"type":"object","properties":{"enableAutoUpdate":{"type":"boolean","description":"Enable the auto update if true, disable if false. The parameter will be ignored if null. Default is null."}}},"ImportRemoteDepotParams":{"type":"object","properties":{"remoteContraAccountId":{"type":"integer","format":"int64","description":"ID of the remote contra account; if null a manually maintained contra account will\n be created"},"batchId":{"type":"string","description":"Use a batch ID to tie several imports together"}}},"UpdateRemoteDepotParams":{"type":"object","properties":{"batchId":{"type":"string","description":"Use a batch ID to tie several imports together"}}},"PageableSecurityList":{"type":"object","required":["paging","securities"],"properties":{"securities":{"type":"array","description":"List of securities","items":{"$ref":"#/definitions/finApiSecurity"}},"paging":{"description":"Information for pagination","$ref":"#/definitions/Paging"}},"description":"Container for page of securities"},"finApiSecurity":{"type":"object","required":["accountId","id"],"properties":{"id":{"type":"integer","format":"int64","example":1,"description":"Identifier. Note: Whenever a security account is being updated, its security positions will be internally re-created, meaning that the identifier of a security position might change over time."},"accountId":{"type":"integer","format":"int64","example":1,"description":"Security account identifier"},"name":{"type":"string","example":"Wertapapierbezeichnung","description":"Name"},"isin":{"type":"string","example":"DE0008404005","description":"ISIN"},"wkn":{"type":"string","example":"840400","description":"WKN"},"quote":{"type":"number","example":99.999999,"description":"Quote"},"quoteCurrency":{"type":"string","example":"EUR","description":"Currency of quote"},"quoteType":{"type":"string","example":"ACTU","description":"Type of quote. 'PERC' if quote is a percentage value, 'ACTU' if quote is the actual amount","enum":["ACTU","PERC"]},"quoteDate":{"type":"string","example":"2018-01-01 00:00:00.000","description":"Quote date in the format 'YYYY-MM-DD HH:MM:SS.SSS' (german time)."},"quantityNominal":{"type":"number","example":99.999999,"description":"Value of quantity or nominal"},"quantityNominalType":{"type":"string","example":"UNIT","description":"Type of quantity or nominal value. 'UNIT' if value is a quantity, 'FAMT' if value is the nominal amount","enum":["UNIT","FAMT"]},"marketValue":{"type":"number","example":99.999999,"description":"Market value"},"marketValueCurrency":{"type":"string","example":"EUR","description":"Currency of market value"},"entryQuote":{"type":"number","example":99.999999,"description":"Entry quote"},"entryQuoteCurrency":{"type":"string","example":"EUR","description":"Currency of entry quote"},"profitOrLoss":{"type":"number","example":99.999999,"description":"Current profit or loss"}},"description":"Container for a security position's data"},"BatchSynchronizationParams":{"type":"object","required":["securities","sepaTransactions","synchronizationType"],"properties":{"securities":{"type":"array","description":"The securities in the current portfolio, as delivered by the bank","items":{"$ref":"#/definitions/SaasSecurity"}},"sepaTransactions":{"type":"array","description":"The total or recent batch of SEPA transactions as delivered by the bank","items":{"$ref":"#/definitions/CreateSepaTransactionParams"}},"synchronizationType":{"type":"string","description":"The synchronization type","enum":["MANUAL","BATCH_UPDATE"]},"synchronizationBatchId":{"type":"string","description":"A batch ID to tie individual synchronization runs together; default is to\n create a unique ID for each run"}}},"CreateSepaTransactionParams":{"type":"object","required":["amount","bankBookingDate","type","valueDate"],"properties":{"externalId":{"type":"string","description":"An external ID; usually provided by the multibanking-API"},"externalReference":{"type":"string","description":"A reference (ID), typically provided by the bank"},"type":{"type":"string","description":"The (technical) transaction type","enum":["withdrawal","deposit","interest","tax_refund","other_gains"]},"literalType":{"type":"string","description":"The (non-technical) transaction type as delivered by the bank. If not provided,\n the given type will be use as literal type."},"typeCodeZka":{"type":"string","description":"The ZKA type code"},"typeCodeSwift":{"type":"string","description":"The SWIFT type code"},"amount":{"type":"number","description":"The transaction amount; required for object creation"},"taxAmount":{"type":"number","description":"The tax amount; default is zero. Only interests and other_gains may have a tax amount"},"valueDate":{"type":"string","format":"date","description":"The transactions value date"},"bankBookingDate":{"type":"string","format":"date","description":"The transactions booking date"},"importDate":{"type":"string","format":"date","description":"The date of transaction import"},"purpose":{"type":"string","description":"The SEPA purpose"},"counterpartName":{"type":"string","description":"The SEPA purpose"},"counterpartAccountNumber":{"type":"string","description":"The SEPA counterpart account number"},"counterpartIban":{"type":"string","description":"The SEPA counterpart IBAN"},"counterpartBlz":{"type":"string","description":"The SEPA counterpart BLZ"},"counterpartBic":{"type":"string","description":"The SEPA counterpart BIC"},"counterpartBankName":{"type":"string","description":"The SEPA counterpart bank name"}}},"SaasQuote":{"type":"object","properties":{"value":{"type":"number"},"date":{"type":"string","format":"date-time"},"currency":{"type":"string"},"inPercent":{"type":"boolean"},"exchangeRate":{"type":"number"}}},"SaasSecurity":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"accountId":{"type":"integer","format":"int64"},"name":{"type":"string"},"isin":{"type":"string"},"wkn":{"type":"string"},"quote":{"$ref":"#/definitions/SaasQuote"},"entryQuote":{"$ref":"#/definitions/SaasQuote"},"quantityNominal":{"type":"number"},"quantityNominalType":{"type":"string","enum":["LOTS","AMOUNT"]},"marketValue":{"type":"number"},"marketValueCurrency":{"type":"string"},"profitOrLoss":{"type":"number"}}},"CreateOrUpdateReservationParams":{"type":"object","required":["challengeToken","customerEmail","customerName","customerPhone","reservationCategory","reservationDate","reservationType"],"properties":{"challengeToken":{"type":"string","description":"A captcha challenge token"},"customerName":{"type":"string","description":"Name of the customer doing the reservation"},"customerEmail":{"type":"string","description":"Email of the customer doing the reservation"},"customerPhone":{"type":"string","description":"Phone number of the customer doing the reservation"},"reservationCategory":{"type":"string","description":"The category; determining the emailing setup","enum":["advising"]},"reservationType":{"type":"string","description":"Type of the reservation; must match the category"},"reservationDate":{"type":"string","format":"date-time","description":"Date (with time) of the reservation"},"comment":{"type":"string","description":"A user comment"}}},"PensionGap":{"type":"object","properties":{"inflationAdjustedGuaranteedPension":{"type":"number"},"inflationAdjustedRequiredPension":{"type":"number"},"inflationAdjustedPensionGap":{"type":"number"},"requiredCapital":{"type":"number"},"requiredSavingsPerMonth":{"type":"number"},"inflationAdjustedRequiredCapital":{"type":"number"},"inflationAdjustedRequiredSavingsPerMonth":{"type":"number"},"pensionGapsPerYear":{"type":"array","items":{"$ref":"#/definitions/PensionGapPerYear"}}}},"PensionGapPerYear":{"type":"object","properties":{"year":{"type":"integer","format":"int32"},"guaranteedPension":{"type":"number"},"requiredPension":{"type":"number"},"pensionGap":{"type":"number"}}},"RiskYieldStatistics":{"type":"object","properties":{"annualizedPortfolioReturn":{"type":"number"},"portfolioReturnClass":{"type":"integer","format":"int32"},"annualizedReturnPerInvestment":{"type":"object","additionalProperties":{"type":"number"}},"perInvestmentReturnClass":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}},"annualizedPortfolioStandardDeviation":{"type":"number"},"portfolioRiskClass":{"type":"integer","format":"int32"},"annualizedPerInvestmentStandardDeviation":{"type":"object","additionalProperties":{"type":"number"}},"perInvestmentRiskClass":{"type":"object","additionalProperties":{"type":"integer","format":"int32"}},"normalizedPortfolioCorrelation":{"type":"number"},"normalizedPortfolioCorrelationClass":{"type":"integer","format":"int32"},"correlationMatrix":{"type":"object","additionalProperties":{"type":"object","additionalProperties":{"type":"number"}}},"tickerSymbolWithCurrencyToInvestmentReference":{"type":"object","additionalProperties":{"type":"array","items":{"$ref":"#/definitions/InvestmentReference"}}}}},"CorrelationBetween":{"type":"object","required":["correlation","tickerSymbol"],"properties":{"tickerSymbol":{"type":"string","description":"The ticker symbol"},"investmentReference":{"description":"Describes this investment; empty in case the ticker is 'PORTFOLIO'","$ref":"#/definitions/InvestmentReference"},"correlation":{"type":"number","description":"The correlation of this investment to the reference"}},"description":"The correlation between an investment and the reference"},"CorrelationToReference":{"type":"object","properties":{"referenceTicker":{"type":"string","description":"The reference ticker symbol. If none provided in the request, the entire portfolio\n with ticker 'PORTFOLIO' will be used as reference"},"referenceQuoteProvider":{"type":"string","description":"The quote provider of the reference quote; default is none for the PORTFOLIO"},"correlationsToReference":{"type":"array","description":"The individual correlations to the reference","items":{"$ref":"#/definitions/CorrelationBetween"}}},"description":"The correlation of the portfolio and the portfolios positions to a reference value"},"PortfolioCorrelation":{"type":"object","properties":{"portfolioCorrelation":{"type":"number","description":"The total correlation of the values within the portfolio. This is a good measure for how\n inter-dependant the values in your portfolio are. A high correlation means that the individual\n investments behave in a similar way and thus will loose or gain together. A high correlation\n does increase the risk for serious drawdowns."},"portfolioCorrelationClass":{"type":"number","description":"The correlation class, ranging 0 (lowest) to 2 (highest)"},"portfolioCorrelationClassComplex":{"type":"number","description":"The correlation class in a more complex classification, ranging from 0 (lowest) to 6 (highest)"}},"description":"The portfolio internal correlation with according correlation classification."},"RiskYield":{"type":"object","properties":{"annualizedStandardDeviation":{"type":"number","description":"The annualized standard deviation; in percent"},"annualizedRiskClass":{"type":"integer","format":"int32","description":"The annualized risk class, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedRiskClassComplex":{"type":"number","description":"The annualized risk class in a more complex classification, ranging from 0 (lowest)\n to 6 (highest) in 0.01 interval steps"},"annualizedReturn":{"type":"number","description":"The annualized yield; in percent"},"annualizedReturnClass":{"type":"integer","format":"int32","description":"The annualized return class, ranging from 0 (lowest) to 2 (highest)","enum":[0,1,2]},"annualizedReturnClassComplex":{"type":"number","description":"The annualized return class in a more complex classification, ranging from 0 (lowest)\n to 6 (highest) in 0.01 interval steps"}},"description":"The risk and yield statistics of a portfolio or a set of investments"},"Role":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical Identifier"},"authority":{"type":"string","description":"The role name"}}},"RoleList":{"type":"object","properties":{"roles":{"type":"array","description":"The list of the users roles","items":{"$ref":"#/definitions/Role"}}}},"AssignRoleParams":{"type":"object","properties":{"roleId":{"type":"integer","format":"int64","description":"DEPRECATED: use 'role' instead. The role ID. Example: 1"},"role":{"type":"string","description":"The role to assign. The field 'roleId' is ignored if given. Example: 'ROLE_PLUS_SUBSCRIPTION'"},"userId":{"type":"integer","format":"int64","description":"Assign the given role to the user with the given ID"}}},"CreateRoleParams":{"type":"object","properties":{"authority":{"type":"string","description":"The role name"}}},"Bank":{"type":"object","properties":{"name":{"type":"string"},"defaultBic":{"type":"string"},"alternativeBics":{"type":"array","items":{"type":"string"}}}},"PageableSecurityCommissionList":{"type":"object","properties":{"securityCommissions":{"type":"array","items":{"$ref":"#/definitions/SecurityCommission"}},"paging":{"$ref":"#/definitions/Paging"}}},"SecurityCommission":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier."},"internalTransactionId":{"type":"integer","format":"int64","description":"The transaction ID is only present if the security commission is included in a billing cycle."},"subscriptionId":{"type":"integer","format":"int64","description":"The security commission is attached to the given subscription; null values indicate inconsistencies that require resolving."},"bank":{"description":"The bank paying the commission (Depotstelle).","$ref":"#/definitions/Bank"},"security":{"description":"The according security; null values indicate issues that require fixing.","$ref":"#/definitions/Fund"},"advisorId":{"type":"string","description":"Our ID; CSV: Overheadvermittler Nr."},"depotId":{"type":"string","description":"CSV: Depotnummer"},"subDepotId":{"type":"string","description":"CSV: Unterdepotnummer; this is just the depot ID plus the WKN; thus a rather useless field"},"externalCustomerId":{"type":"string","description":"CSV: Kundennr."},"customerLastName":{"type":"string","description":"CSV: Kunde Nachname"},"customerFirstName":{"type":"string","description":"CSV: Kunde Vorname"},"wkn":{"type":"string","description":"CSV: WKN"},"isin":{"type":"string","description":"CSV: ISIN"},"securityName":{"type":"string","description":"CSV: Fondsname"},"billingDate":{"type":"string","format":"date-time","description":"CSV: Transaktionsdatum"},"type":{"type":"string","description":"CSV: Anlagebetragtyp"},"valuationBase":{"type":"number","description":"CSV: Bewertungsbasis"},"currency":{"type":"string","description":"CSV: Anlagewährung"},"commissionType":{"type":"string","description":"CSV: Provisionsart"},"storno":{"type":"string","description":"CSV: Stornovermerk"},"overhead":{"type":"string","description":"CSV: Eigen/Overhead"},"netCommission":{"type":"number","description":"CSV: Provision(Netto) (Euro)"},"vat":{"type":"number","description":"CSV: Mwst (Euro)"},"grossCommission":{"type":"number","description":"CSV: Provision(Brutto) (Euro)"},"billingId":{"type":"string","description":"CSV: Abrechnungsnummer"},"uploadTimestamp":{"type":"string","format":"date-time","description":"The file upload timestamp"},"uploadFilename":{"type":"string","description":"Filename of the file used during position CSV upload"}}},"CommissionPayedInFollowingYear":{"type":"object","properties":{"benefitPeriod":{"type":"string"},"netCommission":{"type":"number"},"grossCommission":{"type":"number"},"vat":{"type":"number"}}},"CommissionPayedInFollowingYearList":{"type":"object","properties":{"commissionsPayedInFollowingYear":{"type":"array","items":{"$ref":"#/definitions/CommissionPayedInFollowingYear"}}}},"SecurityCommissionTaxationStatistic":{"type":"object","properties":{"date":{"type":"string","description":"The month of payment, in format YYYY-MM"},"netCommission":{"type":"number","description":"The aggregated received net commission for the given month"},"grossCommission":{"type":"number","description":"The aggregated received gross commission (net plus tax) for the given month"},"vat":{"type":"number","description":"The aggregated vat for the given month; netCommission + vat = grossCommission"}}},"SecurityCommissionTaxationStatisticList":{"type":"object","properties":{"securityCommissionTaxationStatistics":{"type":"array","items":{"$ref":"#/definitions/SecurityCommissionTaxationStatistic"}}}},"SharingPreference":{"type":"object","properties":{"userId":{"type":"integer","format":"int64","description":"The user id"},"firstName":{"type":"string","description":"The name of the user that will be displayed to other users"},"publicId":{"type":"string","description":"The id that identifies this user publicly (e.g. for sharing)"},"visibility":{"type":"string","description":"The visibility setting, which can be one of 'public' or 'private'"},"isAnonymized":{"type":"boolean","description":"If true, the data returned by the public endpoints will be revised to hide the real values"},"name":{"type":"string","description":"A user defined name for the shared portfolios"},"description":{"type":"string","description":"A user defined description for the shared portfolios"}},"description":"The global preferences of a user regarding sharing their portfolios"},"CreateSharingPreferenceParams":{"type":"object","required":["name","visibility"],"properties":{"name":{"type":"string","description":"Name for the public portfolios"},"visibility":{"type":"string","description":"Visibility of the public portfolios. Can be one of 'public' or 'private'","enum":["public","private"]},"description":{"type":"string","description":"Description of the public portfolios"},"isAnonymized":{"type":"boolean","description":"Anonymize data if true; Default is true"}}},"ProfileReference":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"firstName":{"type":"string","description":"The users first name"},"lastName":{"type":"string","description":"The users last name"},"phoneNumber":{"type":"string","description":"The users phone number"}}},"User":{"type":"object","required":["clientCredentialsDisabled"],"properties":{"id":{"type":"integer","format":"int64","description":"The technical identifier"},"email":{"type":"string","description":"The users email address"},"isEmailConfirmed":{"type":"boolean","description":"Is the users email address confirmed?"},"emailDeliveryStatus":{"type":"string","description":"Defines if emails may be delivered to this user; Delivery is\n skipped for any status except 'active'. This flag is only relevant if your mandator uses\n Rentablo as email delivery service.","enum":["hard_bounce","spam","active"]},"gender":{"type":"integer","format":"int32","description":"The users gender (1 = male, 2 = female); will default to male if not given","enum":[1,2]},"name":{"type":"string","description":"The users name (if given)"},"lastLogin":{"type":"string","format":"date-time","description":"Date of the users last login"},"userCreatedAt":{"type":"string","format":"date-time","description":"Date of user creation"},"enabled":{"type":"boolean","description":"A user can only log in if its account was enabled"},"accountLocked":{"type":"boolean","description":"Is the users account locked?"},"accountExpired":{"type":"boolean","description":"Is the users account expired?"},"passwordExpired":{"type":"boolean","description":"Is the users password expired?"},"clientCredentialsDisabled":{"type":"boolean","description":"Are client credentials disabled for this user? If so, the user may obtain an\n access token using credential login without providing client credentials."},"secondAuthenticationFactorDisabled":{"type":"boolean","description":"Is the second authentication factor (security-PIN) for this user disabled?"},"acceptedAgb":{"type":"boolean","description":"Did the user accept the terms and privacy agreement?"},"lastAgbAcceptanceDate":{"type":"string","format":"date-time","description":"When have terms an privacy agreement been accepted?"},"mandatorReference":{"description":"A reference to the users mandator.","$ref":"#/definitions/MandatorReference"},"profileReference":{"description":"A reference to the users profile.","$ref":"#/definitions/ProfileReference"},"thirdPartyAccounts":{"type":"array","description":"Lists the type of third party accounts this user has; e.g. a finAPI account.","items":{"type":"string"}},"roles":{"type":"array","description":"Lists of roles user assigned","items":{"type":"string"}}}},"CreateUserParams":{"type":"object","required":["acceptedAgb","email","mandatorPublicId","password"],"properties":{"email":{"type":"string","description":"The users email address / username. For server-to-server use cases, this may also\n be a random string / hash key."},"password":{"type":"string","description":"The users password (in plain text)"},"acceptedAgb":{"type":"boolean","description":"Did the user accept your terms and privacy agreement?"},"receiveNewsletter":{"type":"boolean","description":"Does the user want to receive a newsletter; defaults to false"},"gender":{"type":"integer","format":"int32","description":"The users gender (1 = male, 2 = female); will default to male if not given","enum":[1,2]},"firstName":{"type":"string","description":"The users first name; will default to 'undefined' if not given"},"lastName":{"type":"string","description":"The users last name; will default to 'undefined' if not given"},"phoneNumber":{"type":"string","description":"The users phone number"},"recoveryPhoneNumber":{"type":"string","description":"An optional recovery phone number; currently not implemented."},"mandatorPublicId":{"type":"string","description":"The mandator under which the user is registering. Note that we require the\n mandator public ID here (something like yourCompanyName) and not the mandator client ID. The reason for\n this is that we also want to support use cases where signups are done directly via our API. In this\n case we do not want to expose the mandator client ID via the frontend request."},"mandatorClientSecret":{"type":"string","description":"The mandators client secret, required for user signup for all server-to-server\n use cases. The signup operation will ensure that mandatorPublicId and mandator secret match"}}},"MostWantedStatisticsResult":{"type":"object","properties":{"insufficientSampleSize":{"type":"boolean"},"stockCounts":{"type":"array","items":{"$ref":"#/definitions/MostWantedStatisticsResultRecord"}},"fundCounts":{"type":"array","items":{"$ref":"#/definitions/MostWantedStatisticsResultRecord"}},"buyTransactionCounts":{"type":"array","items":{"$ref":"#/definitions/MostWantedStatisticsResultRecord"}},"sellTransactionCounts":{"type":"array","items":{"$ref":"#/definitions/MostWantedStatisticsResultRecord"}},"avgRisk":{"type":"number"},"avgPerformance":{"type":"number"}}},"MostWantedStatisticsResultRecord":{"type":"object","properties":{"isin":{"type":"string"},"name":{"type":"string"},"count":{"type":"number"},"countInPercent":{"type":"number"},"transactionType":{"type":"string"},"numberOfComments":{"type":"integer","format":"int32"},"symbol":{"$ref":"#/definitions/Symbol"}}},"Symbol":{"type":"object","properties":{"id":{"type":"string"},"isin":{"type":"string"},"wkn":{"type":"string"},"tickerSymbol":{"type":"string"},"name":{"type":"string"},"stockExchangeId":{"type":"integer","format":"int32"},"stockExchangeName":{"type":"string"},"country":{"type":"string"},"currency":{"type":"string"},"expirationDate":{"type":"string","format":"date-time"},"industryName":{"type":"string"},"marketSegment":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"mappedType":{"type":"string"},"typeName":{"type":"string"},"quoteProvider":{"type":"string"},"quote":{"$ref":"#/definitions/Quote"}}},"Split":{"type":"object","required":["date","isReverse","isin","ratio_from","ratio_to"],"properties":{"isin":{"type":"string","description":"The ISIN of the investment"},"date":{"type":"string","format":"date","description":"The date of the split"},"ratio_to":{"type":"number","description":"Amount of lots after split"},"ratio_from":{"type":"number","description":"Amount of lots before split"},"isReverse":{"type":"boolean","description":"Whether the split is a reverse split"}}},"SplitList":{"type":"object","required":["splits","total"],"properties":{"splits":{"type":"array","description":"The list of splits","items":{"$ref":"#/definitions/Split"}},"total":{"type":"integer","format":"int32","description":"The total number of splits"}}},"Event":{"type":"object","properties":{"lastResponse":{"$ref":"#/definitions/StripeResponse"},"rawJsonObject":{"$ref":"#/definitions/JsonObject"},"account":{"type":"string"},"apiVersion":{"type":"string"},"created":{"type":"integer","format":"int64"},"data":{"$ref":"#/definitions/EventData"},"id":{"type":"string"},"livemode":{"type":"boolean"},"object":{"type":"string"},"pendingWebhooks":{"type":"integer","format":"int64"},"request":{"$ref":"#/definitions/EventRequest"},"type":{"type":"string"},"dataObjectDeserializer":{"$ref":"#/definitions/EventDataObjectDeserializer"}}},"EventData":{"type":"object","properties":{"lastResponse":{"$ref":"#/definitions/StripeResponse"},"rawJsonObject":{"$ref":"#/definitions/JsonObject"},"previousAttributes":{"type":"object","additionalProperties":{"type":"object"}},"object":{"$ref":"#/definitions/StripeObject"}}},"EventDataObjectDeserializer":{"type":"object","properties":{"object":{"$ref":"#/definitions/StripeObject"},"rawJson":{"type":"string"}}},"EventRequest":{"type":"object","properties":{"lastResponse":{"$ref":"#/definitions/StripeResponse"},"rawJsonObject":{"$ref":"#/definitions/JsonObject"},"id":{"type":"string"},"idempotencyKey":{"type":"string"}}},"JsonArray":{"type":"object","properties":{"asNumber":{"$ref":"#/definitions/Number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asShort":{"type":"integer","format":"int32"},"asBoolean":{"type":"boolean"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asDouble":{"type":"number","format":"double"},"empty":{"type":"boolean"},"asJsonPrimitive":{"$ref":"#/definitions/JsonPrimitive"},"asJsonArray":{"$ref":"#/definitions/JsonArray"},"jsonArray":{"type":"boolean"},"jsonObject":{"type":"boolean"},"jsonPrimitive":{"type":"boolean"},"asJsonNull":{"$ref":"#/definitions/JsonNull"},"asJsonObject":{"$ref":"#/definitions/JsonObject"},"jsonNull":{"type":"boolean"}}},"JsonNull":{"type":"object","properties":{"asJsonPrimitive":{"$ref":"#/definitions/JsonPrimitive"},"asJsonArray":{"$ref":"#/definitions/JsonArray"},"jsonArray":{"type":"boolean"},"jsonObject":{"type":"boolean"},"jsonPrimitive":{"type":"boolean"},"asJsonNull":{"$ref":"#/definitions/JsonNull"},"asNumber":{"$ref":"#/definitions/Number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asShort":{"type":"integer","format":"int32"},"asJsonObject":{"$ref":"#/definitions/JsonObject"},"jsonNull":{"type":"boolean"},"asBoolean":{"type":"boolean"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asDouble":{"type":"number","format":"double"}}},"JsonObject":{"type":"object","properties":{"asJsonPrimitive":{"$ref":"#/definitions/JsonPrimitive"},"asJsonArray":{"$ref":"#/definitions/JsonArray"},"jsonArray":{"type":"boolean"},"jsonObject":{"type":"boolean"},"jsonPrimitive":{"type":"boolean"},"asJsonNull":{"$ref":"#/definitions/JsonNull"},"asNumber":{"$ref":"#/definitions/Number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asShort":{"type":"integer","format":"int32"},"asJsonObject":{"$ref":"#/definitions/JsonObject"},"jsonNull":{"type":"boolean"},"asBoolean":{"type":"boolean"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asDouble":{"type":"number","format":"double"}}},"JsonPrimitive":{"type":"object","properties":{"asNumber":{"$ref":"#/definitions/Number"},"asString":{"type":"string"},"asFloat":{"type":"number","format":"float"},"asByte":{"type":"string","format":"byte"},"asCharacter":{"type":"string"},"asBigDecimal":{"type":"number"},"asBigInteger":{"type":"integer"},"asShort":{"type":"integer","format":"int32"},"string":{"type":"boolean"},"boolean":{"type":"boolean"},"asBoolean":{"type":"boolean"},"number":{"type":"boolean"},"asInt":{"type":"integer","format":"int32"},"asLong":{"type":"integer","format":"int64"},"asDouble":{"type":"number","format":"double"},"asJsonPrimitive":{"$ref":"#/definitions/JsonPrimitive"},"asJsonArray":{"$ref":"#/definitions/JsonArray"},"jsonArray":{"type":"boolean"},"jsonObject":{"type":"boolean"},"jsonPrimitive":{"type":"boolean"},"asJsonNull":{"$ref":"#/definitions/JsonNull"},"asJsonObject":{"$ref":"#/definitions/JsonObject"},"jsonNull":{"type":"boolean"}}},"Number":{"type":"object"},"StripeObject":{"type":"object","properties":{"lastResponse":{"$ref":"#/definitions/StripeResponse"},"rawJsonObject":{"$ref":"#/definitions/JsonObject"}}},"StripeResponse":{"type":"object"},"StripeCheckoutSession":{"type":"object","required":["sessionId"],"properties":{"sessionId":{"type":"string","description":"stripe price id of a product"}}},"StripeSetup":{"type":"object","required":["plusMonthlyPriceId","plusYearlyPriceId","proMonthlyPriceId","proYearlyPriceId","publishableKey"],"properties":{"publishableKey":{"type":"string","description":"stripe price id of a product"},"plusMonthlyPriceId":{"type":"string","description":"Stripe monthly price id of rentablo Plus product"},"plusYearlyPriceId":{"type":"string","description":"Stripe yearly price id of rentablo Plus product"},"proMonthlyPriceId":{"type":"string","description":"Stripe monthly price id of rentablo Pro product"},"proYearlyPriceId":{"type":"string","description":"Stripe yearly price id of rentablo Pro product"}}},"CustomData":{"type":"object","properties":{"isNewDepot":{"type":"boolean","description":"Does the user want to open a new depot?"},"isSecondAccountHolderEnabled":{"type":"boolean","description":"Is the second account holder enabled?"},"areAccountHoldersMarried":{"type":"boolean","description":"Are both account holders (joined depot) or both legal guardians (minor depot) married?"},"isVlDepot":{"type":"boolean","description":"Does the user want to open a VL (Vermögenswirksame Leistung) depot?"},"hasDwsDepot":{"type":"boolean","description":"Does the given account include a DWS depot?"},"hasDwsRetirementPlan":{"type":"boolean","description":"Does the given account include a DWS retirement plan?"},"termsIdentifier":{"type":"integer","format":"int32","description":"Did the user opt for a specific terms model"},"mobileForTan":{"type":"string","description":"A mobile number to send TAN's to"},"contraAccountBic":{"type":"string","description":"In case the bank requires a contra account: the BIC"},"contraAccountIban":{"type":"string","description":"In case the bank requires a contra account: the IBAN"},"contraAccountBankName":{"type":"string","description":"In case the bank requires a contra account: the Bank name"},"contraAccountHolderFirstName":{"type":"string","description":"In case the bank requires a contra account: the account holders first name"},"contraAccountHolderLastName":{"type":"string","description":"In case the bank requires a contra account: the account holders last name"}}},"PageableSubscriptionList":{"type":"object","properties":{"subscriptions":{"type":"array","items":{"$ref":"#/definitions/Subscription"}},"paging":{"$ref":"#/definitions/Paging"}}},"Subscription":{"type":"object","required":["onboardingType"],"properties":{"id":{"type":"integer","format":"int64"},"accountHolderReference":{"description":"The account holder this subscription belongs to; only for cashback subscriptions.","$ref":"#/definitions/AccountHolderReference"},"userReference":{"description":"The user this subscription belongs to.","$ref":"#/definitions/UserReference"},"type":{"type":"string","description":"The subscription type.","enum":["02_basic_flatrate","03_fund_flatrate"]},"onboardingType":{"type":"string","description":"The type of onboarding being used; default is INTERNAL.","enum":["internal","external"]},"start":{"type":"string","format":"date-time","description":"The subscription start date; required for creation"},"creationTimestamp":{"type":"string","format":"date-time","description":"The subscription creation timestamp (non editable field)"},"end":{"type":"string","format":"date-time","description":"The subscription end date; not relevant for cashback subscriptions"},"isActive":{"type":"boolean","description":"Is the subscription active? This is relevant for subscriptions the get extended; not for cashback."},"isCurrent":{"type":"boolean","description":"Is this the current subscription? (auto determined; non editable field)"},"isCancelled":{"type":"boolean","description":"Has the subscription been cancelled?"},"isTrial":{"type":"boolean","description":"Is this a trial subscription?"},"status":{"type":"string","description":"The subscription status; will default to 'incomplete' if not given at creation time.","enum":["incomplete","in_progress","internal_processing","processing_at_bank","processed","contract_terminated","cancelled"]},"statusUpdatedAt":{"type":"string","format":"date-time","description":"The last update of the subscription status; may be null if the status was never changed"},"tag":{"type":"string","description":"An optional, custom tag useful for custom subscription processing"},"tagUpdatedAt":{"type":"string","description":"The last update of the subscription flag; may be null if the flag was never updated"},"lastUpdate":{"type":"string","format":"date-time","description":"The last update of either the status or the flag; this is a derived property for convenient UX handling."},"feePayedAt":{"type":"string","format":"date-time","description":"Date of the latest fee payment date (non editable field)."},"currency":{"type":"string","description":"The subscription currency; currently statically set to 'EUR'."},"reason":{"type":"string","description":"A reason, e.g. for cancellation. May be given by business or the customer."},"comment":{"type":"string","description":"A user comment (longtext)."},"primaryAccountIdentifier":{"type":"string","description":"The primary account or depot identifier. This value will be masked during the less secure update operation. Relevant for correct billing."},"additionalAccountIdentifier":{"type":"string","description":"The secondary account or depot identifier. This value will be masked during the less secure update operation. May be relevant for correct billing."},"regularFee":{"description":"The applicable regular fee (if any).","$ref":"#/definitions/TimeDependentProperty"},"oneTimeFee":{"description":"The applicable one time fee (if any).","$ref":"#/definitions/TimeDependentProperty"},"discount":{"description":"The applicable discount (if any).","$ref":"#/definitions/TimeDependentProperty"},"bank":{"description":"The assigned bank; filled for cashback subscriptions.","$ref":"#/definitions/Bank"},"customData":{"description":"Custom data stored with the subscription; as key value pair.","$ref":"#/definitions/CustomData"},"wizardData":{"type":"object","description":"Json data required to restore the cashback wizard state.","additionalProperties":{"type":"object"}}}},"DiscountCodeValidationResult":{"type":"object","properties":{"discountCode":{"type":"string","example":"A1BFDA4","description":"The validated discount code"},"isValid":{"type":"boolean","example":true,"description":"true if the code is valid, false otherwise"},"discount":{"type":"number","example":25.0,"description":"The discount in EUR, only present if valid"},"errorMessage":{"type":"string","example":"Code expired","description":"An error message, only present if invalid"}}},"ValidationResult":{"type":"object","properties":{"isValid":{"type":"boolean","description":"The result of the validation; valid if true, invalid if false"}}},"CreateOrUpdateSubscriptionParams":{"type":"object","properties":{"accountHolderId":{"type":"integer","format":"int64","description":"The account holder this subscription belongs to; required for cashback subscriptions. Once created, an account holder can only be changed by a subscription administrator."},"type":{"type":"string","description":"The subscription type; required for creation. The type cannot be changed afterwards.","enum":["02_basic_flatrate","03_fund_flatrate"]},"start":{"type":"string","format":"date-time","description":"The subscription start date; required for creation"},"end":{"type":"string","format":"date-time","description":"The subscription end date; not relevant for cashback subscriptions"},"onboardingType":{"type":"string","description":"The type of onboarding being used; default is INTERNAL.","enum":["internal","external"]},"isActive":{"type":"boolean","description":"Is the subscription active? This is relevant for subscriptions the get extended; not for cashback."},"isCancelled":{"type":"boolean","description":"Has the subscription been cancelled?"},"isTrial":{"type":"boolean","description":"Is this a trial subscription?"},"status":{"type":"string","description":"The subscription status; will default to 'incomplete' if not given at creation time.","enum":["incomplete","in_progress","internal_processing","processing_at_bank","processed","contract_terminated","cancelled"]},"tag":{"type":"string","description":"An optional, custom tag useful for custom subscription processing"},"discountCode":{"type":"string","description":"A discount code or user recommendation code."},"bic":{"type":"string","description":"Does the subscription belong to a certain bank? Relevant for cashback only."},"reason":{"type":"string","description":"A reason, e.g. for cancellation. May be given by business or the customer; send blank or an empty string to clear"},"comment":{"type":"string","description":"A user comment (longtext); send blank or an empty string to clear."},"primaryAccountIdentifier":{"type":"string","description":"The primary account or depot identifier. Relevant for correct billing; required for cashback only."},"additionalAccountIdentifier":{"type":"string","description":"The secondary account or depot identifier. May be relevant for correct billing; required for a few banks within the cashback product only."},"customData":{"description":"Custom data to store with the subscription; as key value pair.","$ref":"#/definitions/CustomData"},"wizardData":{"type":"object","description":"Data for storing and restoring the subscription wizard page; as key value pair.","additionalProperties":{"type":"object"}}}},"SymbolList":{"type":"object","properties":{"symbols":{"type":"array","items":{"$ref":"#/definitions/Symbol"}}}},"SymbolListV2":{"type":"object","properties":{"symbols":{"type":"array","items":{"$ref":"#/definitions/SymbolV2"}}}},"SymbolV2":{"type":"object","required":["id","name","quoteProvider","type"],"properties":{"id":{"type":"string","description":"The id of the security"},"isin":{"type":"string","description":"The isin of the security"},"wkn":{"type":"string","description":"The wkn of the security"},"name":{"type":"string","description":"The name of the security"},"regionIsoCode":{"type":"integer","format":"int32","description":"The region code of the security"},"regionName":{"type":"string","description":"The region name of the security"},"sectorGicsId":{"type":"integer","format":"int32","description":"The sector gics id of the security"},"sectorName":{"type":"string","description":"The sector name of the security"},"marketSegment":{"type":"string","description":"The market segment of the security"},"type":{"type":"string","description":"The type of the security as assigned by wealthAPI"},"literalType":{"type":"string","description":"The literal type of the security as delivered by the stock exchange"},"quoteProvider":{"type":"string","description":"The quote provider of the security"}},"description":"Meta data about the security"},"TagList":{"type":"object","properties":{"tags":{"type":"array","items":{"$ref":"#/definitions/Tag"}}}},"EstimateTaxForInvestmentParams":{"type":"object","properties":{"bookingId":{"type":"integer","format":"int64","description":"If estimation is to be done for an existing booking; e.g. due to an update then this \n is the ID of the exiting booking."},"createOrUpdateBookingParams":{"description":"Apply the given parameters for the tax estimation.","$ref":"#/definitions/CreateOrUpdateBookingParams"}}},"TimeDependentPropertyList":{"type":"object","properties":{"timeDependentProperties":{"type":"array","items":{"$ref":"#/definitions/TimeDependentProperty"}}}},"CreateOrUpdateTimeDependentPropertyParams":{"type":"object","properties":{"property":{"type":"string","description":"The property name; properties with the same name may only exist if validity dates do not overlap; required for creation."},"code":{"type":"string","description":"An optional code; which can e.g. be handed out as discount code"},"value":{"type":"number","description":"The properties numerical values; required for creation"},"validFrom":{"type":"string","format":"date-time","description":"The property is valid from the given date; required for creation"},"validTo":{"type":"string","format":"date-time","description":"The property expires at the given date; optional"}}},"PageableTppCertificateList":{"type":"object","required":["paging","tppCertificates"],"properties":{"tppCertificates":{"type":"array","description":"List of certificates","items":{"$ref":"#/definitions/TppCertificate"}},"paging":{"description":"Information for pagination","$ref":"#/definitions/Paging"}},"description":"Container for bank certificate information with paging info"},"TppCertificate":{"type":"object","required":["certificateType","id"],"properties":{"id":{"type":"integer","format":"int64","example":1,"description":"A certificate identifier."},"certificateType":{"type":"string","example":"QWAC","description":"Type of certificate.","enum":["QWAC","QSEALC"]},"label":{"type":"string","example":"Global QWAC till 2022","description":"Optional label of certificate."},"validFrom":{"type":"string","example":"2019-07-20","description":"Valid from date in the format 'YYYY-MM-DD'."},"validUntil":{"type":"string","example":"2019-07-20","description":"Valid until date in the format 'YYYY-MM-DD'."}},"description":"A container for the bank certificate's data"},"CreateTppCertificateParams":{"type":"object","required":["label","privateKey","publicKey","type"],"properties":{"type":{"type":"string","description":"A type of certificate submitted","enum":["QWAC","QSEALC"]},"publicKey":{"type":"string","description":"A certificate (public key)"},"privateKey":{"type":"string","description":"A private key in PKCS #8 format. PKCS #8 private keys are typically exchanged in the PEM base64-encoded format (https://support.quovadisglobal.com/kb/a37/what-is-pem-format.aspx) NOTE: The certificate should have one of the following headers: - '-----BEGIN PRIVATE KEY-----'- '-----BEGIN ENCRYPTED PRIVATE KEY-----'
Any other header denotes that the private key is NOT in PKCS #8 format!"},"passphrase":{"type":"string","description":"Optional passphrase for the private key"},"label":{"type":"string","description":"Optional label to certificate to identify in the list of certificates"},"validFromDate":{"type":"string","example":"2019-04-23","description":"Start day of the certificate's validity, in the format 'YYYY-MM-DD'. Default is the passed certificate validFrom date"},"validUntilDate":{"type":"string","example":"2022-04-23","description":"Expiration day of the certificate's validity, in the format 'YYYY-MM-DD'. Default is the passed certificate validUntil date"}},"description":"A container for the new certificate data"},"PageableTppCredentialResources":{"type":"object","required":["paging","tppCredentials"],"properties":{"tppCredentials":{"type":"array","description":"List of TPP client credentials","items":{"$ref":"#/definitions/TppCredentials"}},"paging":{"description":"Information for pagination","$ref":"#/definitions/Paging"}},"description":"Container for TPP client credentials information with paging info"},"TppCredentials":{"type":"object","required":["id"],"properties":{"id":{"type":"integer","format":"int64","example":1,"description":"The credential identifier."},"label":{"type":"string","example":"Credentials for imperial bank","description":"Optional label of tpp client credentials set."},"tppAuthenticationGroupId":{"type":"integer","format":"int64","example":1,"description":"TPP Authentication Group ID"},"validFrom":{"type":"string","example":"2019-07-20","description":"Valid from date in the format 'YYYY-MM-DD'."},"validUntil":{"type":"string","example":"2019-07-20","description":"Valid until date in the format 'YYYY-MM-DD'."}},"description":"A container for the TPP client credentials data"},"CreateOrUpdateTppCredentialParams":{"type":"object","required":["label","tppAuthenticationGroupId","tppClientId"],"properties":{"tppClientId":{"type":"string","example":"a23312","description":"ID of the TPP accessing the ASPSP API, as provided by the ASPSP as the result of registration"},"tppClientSecret":{"type":"string","example":"followTheWhiteRabbitOrSmthLikeThis","description":"Secret of the TPP accessing the ASPSP API, as provided by the ASPSP as the result of registration"},"tppApiKey":{"type":"string","description":"API Key provided by ASPSP as the result of registration"},"label":{"type":"string","description":"Optional label to credentials"},"tppAuthenticationGroupId":{"type":"integer","format":"int64","example":1,"description":"The TPP Authentication Group Id for which the credentials can be used"},"validFromDate":{"type":"string","example":"2019-04-23","description":"Credentials \"valid from\" date in the format 'YYYY-MM-DD'. Default is today's date"},"validUntilDate":{"type":"string","example":"2022-04-23","description":"Credentials \"valid until\" date in the format 'YYYY-MM-DD'. Default is null which means \"indefinite\" (no limit)"}}},"PageableTppAuthenticationGroupResources":{"type":"object","required":["paging","tppAuthenticationGroups"],"properties":{"tppAuthenticationGroups":{"type":"array","description":"List of received TPP authentication groups","items":{"$ref":"#/definitions/TppAuthenticationGroup"}},"paging":{"description":"Information for pagination","$ref":"#/definitions/Paging"}},"description":"TPP Authentication groups with paging information"},"TppWebForm":{"type":"object","required":["bankConnectionInterfaceStatus","bankId","bankSlug","id","mandatorPublicId","multibankingApiProvider","redirectUrl","startWebFormFlowUrl"],"properties":{"id":{"type":"string","description":"Technical identifier (a random ID token); may be used to retrieve the web-form"},"mandatorPublicId":{"type":"string","description":"The public ID (or 'slug') of the mandator the web-form user belongs to"},"bankId":{"type":"integer","format":"int64","description":"Deprecated: use the bank slug; which equals the ID for FIN_API banks.\n This values will be statically set to '0' for non-finapi banks.\n ID of the bank we want to import or update; will match the bank connection"},"bankSlug":{"type":"string","description":"Slug of the bank we want to import or update; equals the bank ID for multibanking\n provider FIN_API."},"multibankingApiProvider":{"type":"string","example":"WEALTH_API","description":"Who provides the multibanking API?","enum":["FIN_API","WEALTH_API"]},"startWebFormFlowUrl":{"type":"string","description":"Redirect the users web-client to this URL to start the web-form flow"},"redirectUrl":{"type":"string","description":"The redirect URL back to the originating client (e.g. https://partner.page/something) to use in this particular form flow"},"bankConnectionId":{"type":"integer","format":"int64","description":"ID of the created or updated bank connection.\n In case import failed or the form flow did not finish yet this field may be empty. Please be aware\n that you must use endpoint v1/bankConnections to request FIN_API bank connections;\n v3 endpoints are not yet available."},"bankConnection":{"description":"FIN_API only: The created or updated bank connection. In case import failed\n or the form flow did not finish yet this field may be empty","$ref":"#/definitions/BankConnectionWrapper"},"bankConnectionInterfaceType":{"type":"string","description":"FIN_API only: The bank connection interface to import or update. If not given, the user will\n be asked to update or import all available interfaces","enum":["XS2A","FINTS_SERVER","WEB_SCRAPER"]},"multiStepAuthentication":{"description":"FIN_API only: A multi-step authentication challenge in case the web-form was created because the\n bank requests a multi-step authentication","$ref":"#/definitions/MultiStepAuthenticationChallenge"},"bankConnectionInterfaceStatus":{"type":"string","description":"The current status of this particular form flow, possible values are
WAITING_FOR_CREDENTIALS: no user input as of yet
WAITING_FOR_MFA: waiting for a second factor or decoupled approach
WAITING_FOR_REDIRECT_RESPONSE: waiting for a redirect back from the bank in case the PSD2 redirect approach is used
IMPORT_SUCCESS: bank connection successfully imported or updated
IMPORT_FAILED: the import failed, check the error message","enum":["WAITING_FOR_CREDENTIALS","WAITING_FOR_MFA","WAITING_FOR_REDIRECT_RESPONSE","IMPORT_SUCCESS","IMPORT_FAILED"]},"bankingApiResponseCode":{"type":"integer","format":"int32","description":"The response code from the banking API, this may be HTTP_OK for a successful import or update or an error code, see https://sandbox.finapi.io/#!/Bank_Connections/importBankConnection for possible error codes"},"bankingApiResponseMessage":{"type":"string","description":"A response from the banking API, this will typically be an error message for failed import or update attempts"}},"description":"Representation of the values and status of a TPP web form flow"},"CreateOrUpdateTppWebFormParams":{"type":"object","properties":{"bankId":{"type":"integer","format":"int64","description":"ID of the bank in case we want to import a new bank connection; optional if bankConnectionId is given."},"bankConnectionId":{"type":"integer","format":"int64","description":"ID of the bank connection in case we want to update an existing bank connection. The parameter bankId "},"bankConnectionInterfaceType":{"type":"string","description":"The bank connection interface to update","enum":["XS2A","FINTS_SERVER","WEB_SCRAPER"]},"redirectUrl":{"type":"string","description":"A custom redirect URL, if not given the mandators default redirect URL will be used"}},"description":"Properties to import a new or update an existing bank connection via the TPP web form flow."},"UpdateTppWebFormV2Params":{"type":"object","properties":{"bankConnectionId":{"type":"integer","format":"int64","description":"ID of the bank connection that was created during import"},"bankConnectionInterfaceStatus":{"type":"string","description":"The current status of this particular import or update form flow, possible values are
WAITING_FOR_CREDENTIALS: no user input as of yet
WAITING_FOR_MFA: waiting for a second factor or decoupled approach
WAITING_FOR_REDIRECT_RESPONSE: waiting for a redirect back from the bank in case the PSD2 redirect approach is used
IMPORT_SUCCESS: bank connection successfully imported or updated
IMPORT_FAILED: the import failed, check the error message","enum":["WAITING_FOR_CREDENTIALS","WAITING_FOR_MFA","WAITING_FOR_REDIRECT_RESPONSE","IMPORT_SUCCESS","IMPORT_FAILED"]},"bankingApiResponseCode":{"type":"integer","format":"int32","description":"The response code from the banking API (if any)"},"bankingApiResponseMessage":{"type":"string","description":"A custom message from the banking API (if any)"}},"description":"Properties to import a new or update an existing bank connection via the TPP web form flow."},"CreateTppWebFormV2Params":{"type":"object","required":["multibankingApiProvider"],"properties":{"bankSlug":{"type":"string","description":"Slug of the bank in case we want to import a new bank connection; optional if bankConnectionId is given."},"multibankingApiProvider":{"type":"string","example":"WEALTH_API","description":"Who provides the multibanking API?","enum":["FIN_API","WEALTH_API"]},"bankConnectionId":{"type":"integer","format":"int64","description":"ID of the bank connection in case we want to update an existing bank connection. The parameter bankId "},"bankConnectionInterfaceType":{"type":"string","description":"The bank connection interface to update; only relevant for banking API provider FIN_API","enum":["XS2A","FINTS_SERVER","WEB_SCRAPER"]},"redirectUrl":{"type":"string","description":"A custom redirect URL, if not given the mandators default redirect URL will be used"}},"description":"Properties to import a new or update an existing bank connection via the TPP web form flow."},"IdentifierList":{"type":"object","properties":{"identifiers":{"type":"array","items":{"type":"integer","format":"int64"}}}},"PageableTransactionList":{"type":"object","properties":{"transactions":{"type":"array","items":{"$ref":"#/definitions/Transaction"}},"paging":{"$ref":"#/definitions/Paging"}}},"CreateBatchTransactionParams":{"type":"object","required":["accountId","balance","createSepaTransactionParams"],"properties":{"accountId":{"type":"integer","format":"int64","description":"Create transactions in the given cash account"},"balance":{"type":"number","description":"The current account balance"},"createSepaTransactionParams":{"type":"array","description":"A list of SEPA transactions to create","items":{"$ref":"#/definitions/CreateSepaTransactionParams"}}}},"CreateOrUpdateTransactionParams":{"type":"object","properties":{"accountId":{"type":"integer","format":"int64","description":"The account this transaction belongs to; required for object creation"},"insuranceId":{"type":"integer","format":"int64","description":"Attach the transaction to the given insurance; default is no insurance"},"type":{"type":"string","description":"The transaction type; required for object creation","enum":["withdrawal","deposit","interest","tax_refund","other_gains"]},"amount":{"type":"number","description":"The transaction amount; required for object creation"},"taxAmount":{"type":"number","description":"The tax amount; default is zero. Only interests and other_gains may have a tax amount"},"comment":{"type":"string","description":"A user comment"},"valueDate":{"type":"string","format":"date-time","description":"The transactions value date; required for object creation"},"purpose":{"type":"string","description":"The SEPA purpose"},"isRegular":{"type":"boolean","description":"Usually, the 'isRegular' flag is set automatically. If you set this explicitly the flag will be marked as 'user defined' and not be changed by our artificial intelligence in the future"},"isInterAccountTransfer":{"type":"boolean","description":"Usually, the 'isInterAccountTransfer' flag is set automatically. If you set this explicitly the flag will be marked as 'user defined' and not be changed by our artificial intelligence in the future"}}},"UpdatePasswordParams":{"type":"object","properties":{"currentPassword":{"type":"string","description":"The current user password"},"newPassword":{"type":"string","description":"The new user password"}}},"PageableUserList":{"type":"object","properties":{"users":{"type":"array","description":"A list of user","items":{"$ref":"#/definitions/User"}},"paging":{"$ref":"#/definitions/Paging"}}},"UpdateUserParams":{"type":"object","properties":{"email":{"type":"string","description":"The users email address"},"isEmailConfirmed":{"type":"boolean","description":"Is the users email address confirmed? Usually, this property should be automatically set be the user confirmation step"},"emailDeliveryStatus":{"type":"string","description":"Reset the users email status defining if emails may be delivered. Delivery is\n skipped for any status except 'active'. This flag is only relevant if your mandator uses\n Rentablo as email delivery service.","enum":["hard_bounce","spam","active"]},"password":{"type":"string","description":"The users password (in plain text)"},"acceptedAgb":{"type":"boolean","description":"Did the user accept your terms and privacy agreement"},"enabled":{"type":"boolean","description":"Manually set a user to enabled. Users are enabled by default, but still require email confirmation."},"accountExpired":{"type":"boolean","description":"Manually set the expiry status of a users account"},"accountLocked":{"type":"boolean","description":"Manually set the account lock of a user"},"passwordExpired":{"type":"boolean","description":"Manually set the password expired status of a users account"},"clientCredentialsDisabled":{"type":"boolean","description":"Enable or disable client credentials for a user. If disabled, the user may obtain an access token using credential login without providing client credentials. You will require ROLE_USER_MANAGEMENT to change this setting. Client credentials should only be disabled for certain management roles / reporting use cases; but never for normal end users."},"secondAuthenticationFactorDisabled":{"type":"boolean","description":"Manually disable or enable the second authentication factor (security-PIN)"},"recoveryPhoneNumber":{"type":"string","description":"An optional recovery phone number; currently not implemented."},"mandatorPublicId":{"type":"string","description":"Change the users mandator. Note that only a user in role ROLE_MANDATOR_ADMIN may change a users mandator."}}},"Profile":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"userId":{"type":"integer","format":"int64","description":"ID of the underlying technical user"},"firstName":{"type":"string","description":"The users first name"},"lastName":{"type":"string","description":"The users last name"},"academicTitle":{"type":"string","description":"The users academic title (Dr., Prof., ...)"},"phoneNumber":{"type":"string","description":"The users phone number"},"fax":{"type":"string","description":"The users fax number"},"address":{"description":"The users address","$ref":"#/definitions/Address"},"profileImage":{"description":"Link to a profile image if uploaded by the user","$ref":"#/definitions/Link"},"gender":{"type":"integer","format":"int32","description":"The users gender"},"motto":{"type":"string","description":"An investment motto, this is a short free text description on how the user likes to invest"},"profileDescription":{"type":"string","description":"A free text self description of the user"},"investmentStrategy":{"type":"string","description":"A free text description of the users investment strategy"},"riskAppetite":{"type":"integer","format":"int32","description":"The self-chosen risk class"},"mayContact":{"type":"boolean","description":"May the user be contacted by others?"},"wantDiscuss":{"type":"boolean","description":"Does the user want to discuss about investments?"},"wantDiscussDescription":{"type":"string","description":"A free text description about what the user likes to discuss about"},"wantToHelp":{"type":"boolean","description":"Does the user like to help stock market noobies?"},"wantToHelpDescription":{"type":"string","description":"A free text description on what the user can help with"},"investmentVisibility":{"type":"string","description":"The visibility of the users investments","enum":["anybody","friends","nobody"]},"isPublic":{"type":"boolean","description":"DEPRECATED: is the users profile marked as publicly visible"},"emailNotification":{"type":"boolean","description":"Does the user receive email notifications?"},"commentNotification":{"type":"boolean","description":"Does the user receive notifications on new comments?"},"isTrackingEnabled":{"type":"boolean","description":"A flag allowing to enable or disable certain tracking settings (must be implemented in the frontend)"},"investmentReportFrequency":{"type":"number","description":"The frequency of the users investment report (1 = weekly, 2 = monthly, 9 = off)"}},"description":"A users profile"},"CreateOrUpdateProfileParams":{"type":"object","properties":{"gender":{"type":"integer","format":"int32","description":"The users gender (1 = male, 2 = female); ignored if not given","enum":[1,2]},"firstName":{"type":"string","description":"The users first name; ignored if not given"},"lastName":{"type":"string","description":"The users last name; ignored if not given"},"academicTitle":{"type":"string","description":"The users academic title (Dr., Prof., ...)"},"phoneNumber":{"type":"string","description":"The users phone number; send a blank or empty string to clear"},"fax":{"type":"string","description":"The users fax number; send a blank or empty string to clear"},"motto":{"type":"string","description":"The users investment motto; send a blank or empty string to clear"},"profileDescription":{"type":"string","description":"The users self description; send a blank or empty string to clear"},"investmentStrategy":{"type":"string","description":"The users investment strategy; send a blank or empty string to clear"},"riskAppetite":{"type":"integer","format":"int32","description":"The users risk appetite; ignored if not given; no size constraints apply"},"mayContact":{"type":"boolean","description":"Allow or prevent others from contacting the user; ignored if not given"},"wantDiscuss":{"type":"boolean","description":"The user wants to discuss about investments; ignored if not given"},"wantDiscussDescription":{"type":"string","description":"Description what discussion topics the user likes; send an empty string to clear"},"wantToHelp":{"type":"boolean","description":"The user will help noobies; ignored if not given"},"wantToHelpDescription":{"type":"string","description":"Description on which topics a user can help; send an empty string to clear"},"investmentVisibility":{"type":"boolean","description":"Are the users investments visible to other users; ignored if not given","enum":[false]},"isPublic":{"type":"boolean","description":"DEPRECATED: Is the profile publicly visible - this flag is used to clear visibility on an administrative level"},"emailNotification":{"type":"boolean","description":"Receive emails on investments (buys, sells) of his friends; ignored if not given"},"commentNotification":{"type":"boolean","description":"Receive emails on new investment related comments; ignored if not given"},"isTrackingEnabled":{"type":"boolean","description":"A flag allowing to enable or disable certain tracking settings (must be implemented in the frontend)"},"investmentReportFrequency":{"type":"integer","format":"int32","description":"The frequency of the investment report (1 = weekly, 2 = monthly, 9 = off); ignored if not given","enum":[1,2,9]}}},"NewsletterSubscriptionStatus":{"type":"object","properties":{"status":{"type":"string","description":"The newsletter subscription status,\n **subscribed**: user is subscribed\n **unsubscribed**: user is unsubscribed\n **not_in_list**: user is not in the list, i.e. was never subscribed.","enum":["subscribed","unsubscribed","not_in_list"]}}},"Watchlist":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"numberOfEntries":{"type":"integer","format":"int32"}}},"CreateOrUpdateWatchlistParams":{"type":"object","properties":{"name":{"type":"string"}}},"WatchlistList":{"type":"object","properties":{"watchlists":{"type":"array","items":{"$ref":"#/definitions/Watchlist"}}}},"WatchlistEntry":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical identifier"},"className":{"type":"string","description":"The class name of the watchlist entry domain; useful in some cases to distinguish between investments and watchlist entries"},"name":{"type":"string","description":"The investments name"},"standardisedName":{"type":"string","description":"The investments name in a standardised form"},"jsCompatibleName":{"type":"string","description":"DEPRECATED - this attribute will be removed soon"},"isin":{"type":"string","description":"The investments ISIN"},"hasValidIsin":{"type":"boolean","description":"true if the investment has a valid ISIN, false otherwise. Non-valid ISINs may exist if the investment does not have quote data assigned."},"tickerSymbol":{"type":"string","description":"The investments ticker symbol. A ticker symbol is a direct reference to a quote at a certain stock exchange. The ticker symbols structure depends on the respective quote provider."},"tickerSymbolWithCurrency":{"type":"string","description":"Same as the ticker symbol, but with the quote currency attached. This allows to distinguish investments with the same ticker symbol but a different currency. This may happen in cases where we do not have quote data in the investments currency and thus use quote conversion based on exchange rates."},"currency":{"type":"string","description":"The investments currency. Note that the investment currency may be different from the (native) quote currency if quote currency conversion based on exchange rates is applied."},"type":{"type":"string","description":"The investment type","enum":["11_stock","21_fund","31_bond","41_cash","51_certos","61_pmetals","71_massets","81_fcurr","22_etf","91_managed"]},"literalType":{"type":"string","description":"A literal investment type; e.g. 11_stock will have literal type 'Aktien'"},"purchaseDate":{"type":"string","format":"date-time","description":"The date of 'virtual purchase'"},"purchasePrice":{"type":"number","description":"The watch price / price of the 'virtual purchase'"},"comment":{"type":"string","description":"A user defined comment"},"returnOnInvestment":{"type":"number","description":"The return on investment so far; this is purchasePrice - marketValue"},"returnOnInvestmentInPercent":{"type":"number","description":"The current return on investment in percent"},"oneWeekAgo":{"type":"number","description":"The quote one week ago"},"oneWeekAgoInPercent":{"type":"number","description":"The percent change now to one week ago"},"oneMonthAgo":{"type":"number","description":"The quote one month ago"},"oneMonthAgoInPercent":{"type":"number","description":"The percent change now to one month ago"},"threeMonthAgo":{"type":"number","description":"The quote three months ago"},"threeMonthAgoInPercent":{"type":"number","description":"The percent change now to three months ago"},"sixMonthAgo":{"type":"number","description":"The quote six months ago"},"sixMonthAgoInPercent":{"type":"number","description":"The percent change now to six months ago"},"oneYearAgo":{"type":"number","description":"The quote one year ago"},"oneYearAgoInPercent":{"type":"number","description":"The percent change now to one year ago"},"twoYearsAgo":{"type":"number","description":"The quote two years ago"},"twoYearsAgoInPercent":{"type":"number","description":"The percent change now to two years ago"},"threeYearsAgo":{"type":"number","description":"The quote three years ago"},"threeYearsAgoInPercent":{"type":"number","description":"The percent change now to three years ago"},"fourYearsAgo":{"type":"number","description":"The quote four years ago"},"fourYearsAgoInPercent":{"type":"number","description":"The percent change now to four years ago"},"fiveYearsAgo":{"type":"number","description":"The quote five years ago"},"fiveYearsAgoInPercent":{"type":"number","description":"The percent change now to five years ago"},"quote":{"description":"The current quote in investment currency","$ref":"#/definitions/InvestmentQuote"},"socialStatistics":{"description":"Social statistics on the investment","$ref":"#/definitions/InvestmentSocialStatistics"},"watchlistReference":{"description":"A reference to the watchlist holding this record","$ref":"#/definitions/WatchlistReference"}}},"WatchlistReference":{"type":"object","properties":{"id":{"type":"integer","format":"int64","description":"Technical Identifier"},"name":{"type":"string","description":"The name of the watchlist"}}},"CreateOrUpdateWatchlistEntryParams":{"type":"object","properties":{"watchlistId":{"type":"integer","format":"int64"},"name":{"type":"string"},"isin":{"type":"string"},"tickerSymbol":{"type":"string"},"currency":{"type":"string"},"type":{"type":"string"},"quoteProvider":{"type":"string"},"purchaseDate":{"type":"string","format":"date-time"},"purchasePrice":{"type":"number"},"comment":{"type":"string"}}},"WatchlistEntryList":{"type":"object","properties":{"watchlistEntries":{"type":"array","items":{"$ref":"#/definitions/WatchlistEntry"}}}}}}