Investboard / Довідник розробника
Аналізуйте свій портфель або запускайте ті самі моделі, що й загальнодоступні калькулятори. Надішліть JSON й отримайте результати з припущеннями, охопленням та обмеженнями. Результати калькуляторів також включають посилання на редаговану сторінку в браузері.
Цей приклад моделює план регулярних вкладень в ETF із припущеною річною дохідністю. Він не прогнозує результатів інвестицій. Для пропущених полів застосовуються значення за замовчуванням із кожної схеми.
curl 'https://investboard.com/api/v1/public/calculators/etf-sparplan' \
-H 'Content-Type: application/json' \
--data '{
"inputs": {
"monthly_rate": 500,
"annual_return": 6,
"annual_increase": 0,
"years": 20
},
"locale": "uk",
"asOf": "2026-10-15"
}'{
"data": {
"calculator": "etf-sparplan",
"modelVersion": "2026-10-15.2",
"inputs": {
"initial_investment": 0,
"monthly_rate": 500,
"annual_increase": 0,
"annual_return": 6,
"years": 20,
"include_tax_drag": false,
"fondstyp": "AKTIENFONDS",
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"asOf": "2026-10-15",
"result": {
"final_value": 232175.55,
"total_contributions": 120000,
"total_growth": 112175.55
},
"links": {
"calculator": "https://investboard.com/uk/calculators/etf-savings-plan?lang=uk&initial_investment=0&monthly_rate=500&annual_increase=0&annual_return=6&years=20&include_tax_drag=false&fondstyp=AKTIENFONDS&taxProfile.bundesland=null&taxProfile.kirchensteuer=false&taxProfile.filing_status=single&taxProfile.sparerpauschbetrag_remaining=1000&asOf=2026-10-15&modelVersion=2026-10-15.2&via=api",
"methodology": "https://investboard.com/calculators/etf-savings-plan",
"documentation": "https://investboard.com/calculators/api"
}
},
"error": null,
"meta": {}
}Кожен приклад і схема вихідних даних нижче створені з контракту перевірки, який використовує кінцева точка. Виконайте GET кінцевої точки, щоб отримати її схему й значення за замовчуванням без розрахунку.
Розрахуйте Kapitalertragsteuer (податок на доходи від капіталу), Solidaritätszuschlag (солідарну надбавку) і Kirchensteuer (церковний податок) із доходів від капіталу.
POST /api/v1/public/calculators/abgeltungssteuer
{
"inputs": {
"kapitalertrag": 5000,
"ertragsart": "general",
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"kapitalertrag": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 5000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"ertragsart": {
"type": "string",
"enum": [
"general",
"aktienverkauf",
"dividende",
"etf"
],
"default": "general"
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"brutto_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"fsa_offset": {
"type": "number",
"description": "EUR, not cents."
},
"steuerpflichtiger_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"kapitalertragsteuer": {
"type": "number",
"description": "EUR, not cents."
},
"solidaritaetszuschlag": {
"type": "number",
"description": "EUR, not cents."
},
"kirchensteuer": {
"type": "number",
"description": "EUR, not cents."
},
"gesamte_steuer": {
"type": "number",
"description": "EUR, not cents."
},
"effektiver_steuersatz": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"netto_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"kirchensteuer_rate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"teilfreistellung_betrag": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"brutto_ertrag",
"fsa_offset",
"steuerpflichtiger_ertrag",
"kapitalertragsteuer",
"solidaritaetszuschlag",
"kirchensteuer",
"gesamte_steuer",
"effektiver_steuersatz",
"netto_ertrag",
"kirchensteuer_rate",
"teilfreistellung_betrag"
],
"additionalProperties": false
}Що залишається від дивіденду після Abgeltungsteuer, солідарної надбавки й церковного податку?
POST /api/v1/public/calculators/netto-dividende
{
"inputs": {
"brutto_dividende": 500,
"quelle": "aktie",
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"brutto_dividende": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 500,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"quelle": {
"type": "string",
"enum": [
"aktie",
"etf_aktien",
"mischfonds"
],
"default": "aktie"
},
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$",
"description": "Optional issuer ISIN used for country-level withholding assumptions; not a live security lookup."
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"brutto_dividende": {
"type": "number",
"description": "EUR, not cents."
},
"teilfreistellung_rate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"teilfreistellung_betrag": {
"type": "number",
"description": "EUR, not cents."
},
"steuerpflichtiger_betrag": {
"type": "number",
"description": "EUR, not cents."
},
"steuer": {
"type": "object",
"properties": {
"brutto_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"fsa_offset": {
"type": "number",
"description": "EUR, not cents."
},
"steuerpflichtiger_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"kapitalertragsteuer": {
"type": "number",
"description": "EUR, not cents."
},
"solidaritaetszuschlag": {
"type": "number",
"description": "EUR, not cents."
},
"kirchensteuer": {
"type": "number",
"description": "EUR, not cents."
},
"gesamte_steuer": {
"type": "number",
"description": "EUR, not cents."
},
"effektiver_steuersatz": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"netto_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"kirchensteuer_rate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
}
},
"required": [
"brutto_ertrag",
"fsa_offset",
"steuerpflichtiger_ertrag",
"kapitalertragsteuer",
"solidaritaetszuschlag",
"kirchensteuer",
"gesamte_steuer",
"effektiver_steuersatz",
"netto_ertrag",
"kirchensteuer_rate"
],
"additionalProperties": false
},
"quellensteuer_rate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"quellensteuer_betrag": {
"type": "number",
"description": "EUR, not cents."
},
"anrechenbare_quellensteuer": {
"type": "number",
"description": "EUR, not cents."
},
"erstattungsfaehige_quellensteuer": {
"type": "number",
"description": "EUR, not cents."
},
"deutsche_reststeuer": {
"type": "number",
"description": "EUR, not cents."
},
"quellensteuer_status": {
"type": "string",
"enum": [
"credited",
"fund_level",
"none",
"unavailable"
],
"description": "unavailable means withholding was omitted because country assumptions are unavailable; none means no modeled investor withholding."
},
"netto_dividende": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"brutto_dividende",
"teilfreistellung_rate",
"teilfreistellung_betrag",
"steuerpflichtiger_betrag",
"steuer",
"quellensteuer_rate",
"quellensteuer_betrag",
"anrechenbare_quellensteuer",
"erstattungsfaehige_quellensteuer",
"deutsche_reststeuer",
"quellensteuer_status",
"netto_dividende"
],
"additionalProperties": false
}Розрахуйте авансовий податок за ETF і фондами за податкові роки з 2024 до 2026, кожен зі сплатою в січні наступного року.
POST /api/v1/public/calculators/vorabpauschale
{
"inputs": {
"wert_jahresanfang": 10000,
"wert_jahresende": 11500,
"ausschuettungen": 0,
"fondstyp": "AKTIENFONDS",
"steuerjahr": 2025,
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"wert_jahresanfang": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 10000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"wert_jahresende": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 11500,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"ausschuettungen": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"fondstyp": {
"type": "string",
"enum": [
"AKTIENFONDS",
"MISCHFONDS",
"IMMOBILIENFONDS",
"IMMOBILIENFONDS_AUSLAND",
"SONSTIGE"
],
"default": "AKTIENFONDS"
},
"steuerjahr": {
"anyOf": [
{
"type": "number",
"enum": [
2023
]
},
{
"type": "number",
"enum": [
2024
]
},
{
"type": "number",
"enum": [
2025
]
},
{
"type": "number",
"enum": [
2026
]
}
],
"default": 2025,
"description": "Only years with published Basiszins in the model are accepted. Single-position, full-year holding."
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"basiszins": {
"type": "number",
"description": "Percentage points: 4 means 4%."
},
"basisertrag": {
"type": "number",
"description": "EUR, not cents."
},
"wertsteigerung": {
"type": "number",
"description": "EUR, not cents."
},
"vorabpauschale_brutto": {
"type": "number",
"description": "EUR, not cents."
},
"teilfreistellung_rate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"teilfreistellung_betrag": {
"type": "number",
"description": "EUR, not cents."
},
"vorabpauschale_steuerpflichtig": {
"type": "number",
"description": "EUR, not cents."
},
"steuer": {
"type": "object",
"properties": {
"brutto_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"fsa_offset": {
"type": "number",
"description": "EUR, not cents."
},
"steuerpflichtiger_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"kapitalertragsteuer": {
"type": "number",
"description": "EUR, not cents."
},
"solidaritaetszuschlag": {
"type": "number",
"description": "EUR, not cents."
},
"kirchensteuer": {
"type": "number",
"description": "EUR, not cents."
},
"gesamte_steuer": {
"type": "number",
"description": "EUR, not cents."
},
"effektiver_steuersatz": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"netto_ertrag": {
"type": "number",
"description": "EUR, not cents."
},
"kirchensteuer_rate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
}
},
"required": [
"brutto_ertrag",
"fsa_offset",
"steuerpflichtiger_ertrag",
"kapitalertragsteuer",
"solidaritaetszuschlag",
"kirchensteuer",
"gesamte_steuer",
"effektiver_steuersatz",
"netto_ertrag",
"kirchensteuer_rate"
],
"additionalProperties": false
}
},
"required": [
"basiszins",
"basisertrag",
"wertsteigerung",
"vorabpauschale_brutto",
"teilfreistellung_rate",
"teilfreistellung_betrag",
"vorabpauschale_steuerpflichtig",
"steuer"
],
"additionalProperties": false
}Який тип ETF дає більше капіталу після німецьких податків? Довгострокове порівняння з Vorabpauschale, частковим звільненням і неоподатковуваним лімітом заощадника.
POST /api/v1/public/calculators/thesaurierer-vs-ausschuetter
{
"inputs": {
"initial_investment": 10000,
"monthly_contribution": 300,
"annual_return": 7,
"distribution_yield": 2,
"years": 20,
"fondstyp": "AKTIENFONDS",
"reinvest_distributions": true,
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"initial_investment": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 10000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"monthly_contribution": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 300,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"annual_return": {
"type": "number",
"minimum": 1,
"maximum": 15,
"default": 7,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"distribution_yield": {
"type": "number",
"minimum": 0,
"maximum": 6,
"default": 2,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"years": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"default": 20
},
"fondstyp": {
"type": "string",
"enum": [
"AKTIENFONDS",
"MISCHFONDS",
"SONSTIGE"
],
"default": "AKTIENFONDS"
},
"reinvest_distributions": {
"type": "boolean",
"default": true
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"yearly_data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 0,
"description": "Year index from the start of the projection."
},
"thesaurierer_value": {
"type": "number",
"description": "EUR, not cents."
},
"thesaurierer_vorabpauschale_tax": {
"type": "number",
"description": "EUR, not cents."
},
"ausschuetter_value": {
"type": "number",
"description": "EUR, not cents."
},
"ausschuetter_distribution_tax": {
"type": "number",
"description": "EUR, not cents."
},
"ausschuetter_distributions_gross": {
"type": "number",
"description": "EUR, not cents."
},
"ausschuetter_distributions_net": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"year",
"thesaurierer_value",
"thesaurierer_vorabpauschale_tax",
"ausschuetter_value",
"ausschuetter_distribution_tax",
"ausschuetter_distributions_gross",
"ausschuetter_distributions_net"
],
"additionalProperties": false
}
},
"thesaurierer_final": {
"type": "number",
"description": "EUR, not cents."
},
"ausschuetter_final": {
"type": "number",
"description": "EUR, not cents."
},
"thesaurierer_advantage_eur": {
"type": "number",
"description": "EUR, not cents."
},
"thesaurierer_advantage_pct": {
"type": "number",
"description": "Percentage points: 4 means 4%."
},
"thesaurierer_total_taxes": {
"type": "number",
"description": "EUR, not cents."
},
"ausschuetter_total_taxes": {
"type": "number",
"description": "EUR, not cents."
},
"total_contributions": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"yearly_data",
"thesaurierer_final",
"ausschuetter_final",
"thesaurierer_advantage_eur",
"thesaurierer_advantage_pct",
"thesaurierer_total_taxes",
"ausschuetter_total_taxes",
"total_contributions"
],
"additionalProperties": false
}Розподіліть неоподатковуваний ліміт заощадника між банками й брокерами, не залишаючи його невикористаним.
POST /api/v1/public/calculators/freistellungsauftrag
{
"inputs": {
"brokers": [
{
"name": "Broker 1",
"zinsen": 0,
"dividenden": 0,
"vorabpauschale": 0,
"realisierte_gewinne": 0,
"current_fsa": 0
},
{
"name": "Broker 2",
"zinsen": 0,
"dividenden": 0,
"vorabpauschale": 0,
"realisierte_gewinne": 0,
"current_fsa": 0
}
],
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"brokers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 60
},
"zinsen": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"dividenden": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"vorabpauschale": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"realisierte_gewinne": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"current_fsa": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
}
},
"required": [
"name"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 6,
"default": [
{
"name": "Broker 1",
"zinsen": 0,
"dividenden": 0,
"vorabpauschale": 0,
"realisierte_gewinne": 0,
"current_fsa": 0
},
{
"name": "Broker 2",
"zinsen": 0,
"dividenden": 0,
"vorabpauschale": 0,
"realisierte_gewinne": 0,
"current_fsa": 0
}
]
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"brokers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"expected_income": {
"type": "number",
"description": "EUR, not cents."
},
"current_fsa": {
"type": "number",
"description": "EUR, not cents."
},
"optimal_fsa": {
"type": "number",
"description": "EUR, not cents."
},
"tax_with_current": {
"type": "number",
"description": "EUR, not cents."
},
"tax_with_optimal": {
"type": "number",
"description": "EUR, not cents."
},
"delta": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"name",
"expected_income",
"current_fsa",
"optimal_fsa",
"tax_with_current",
"tax_with_optimal",
"delta"
],
"additionalProperties": false
}
},
"total_expected_income": {
"type": "number",
"description": "EUR, not cents."
},
"total_fsa_available": {
"type": "number",
"description": "EUR, not cents."
},
"total_fsa_optimal": {
"type": "number",
"description": "EUR, not cents."
},
"total_tax_current": {
"type": "number",
"description": "EUR, not cents."
},
"total_tax_optimal": {
"type": "number",
"description": "EUR, not cents."
},
"savings": {
"type": "number",
"description": "EUR, not cents."
},
"warnings": {
"type": "array",
"items": {
"oneOf": [
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"over_limit"
]
},
"message": {
"type": "string"
},
"allocated": {
"type": "number",
"description": "EUR, not cents."
},
"allowance": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"type",
"message",
"allocated",
"allowance"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"under_utilised"
]
},
"message": {
"type": "string"
},
"brokerIndex": {
"type": "integer",
"minimum": 0
},
"brokerName": {
"type": "string"
},
"allocated": {
"type": "number",
"description": "EUR, not cents."
},
"expected": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"type",
"message",
"brokerIndex",
"brokerName",
"allocated",
"expected"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"type": {
"type": "string",
"enum": [
"january_risk"
]
},
"message": {
"type": "string"
},
"brokerIndex": {
"type": "integer",
"minimum": 0
},
"brokerName": {
"type": "string"
},
"preTax": {
"type": "number",
"description": "EUR, not cents."
},
"allocated": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"type",
"message",
"brokerIndex",
"brokerName",
"preTax",
"allocated"
],
"additionalProperties": false
}
]
}
}
},
"required": [
"brokers",
"total_expected_income",
"total_fsa_available",
"total_fsa_optimal",
"total_tax_current",
"total_tax_optimal",
"savings",
"warnings"
],
"additionalProperties": false
}Розрахуйте капітал через 10, 20 або 30 років, за вибором із відрахуванням німецького податку Vorabpauschale.
POST /api/v1/public/calculators/etf-sparplan
{
"inputs": {
"initial_investment": 0,
"monthly_rate": 300,
"annual_increase": 2,
"annual_return": 7,
"years": 20,
"include_tax_drag": false,
"fondstyp": "AKTIENFONDS",
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"initial_investment": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"monthly_rate": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 300,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"annual_increase": {
"type": "number",
"minimum": 0,
"maximum": 10,
"default": 2,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"annual_return": {
"type": "number",
"minimum": 1,
"maximum": 15,
"default": 7,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"years": {
"type": "integer",
"minimum": 1,
"maximum": 40,
"default": 20
},
"include_tax_drag": {
"type": "boolean",
"default": false
},
"fondstyp": {
"type": "string",
"enum": [
"AKTIENFONDS",
"MISCHFONDS",
"SONSTIGE"
],
"default": "AKTIENFONDS"
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"yearly_data": {
"type": "array",
"items": {
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 0,
"description": "Year index from the start of the projection."
},
"contributions_cumulative": {
"type": "number",
"description": "EUR, not cents."
},
"value_before_tax": {
"type": "number",
"description": "EUR, not cents."
},
"value_after_tax": {
"type": "number",
"description": "EUR, not cents."
},
"annual_contribution": {
"type": "number",
"description": "EUR, not cents."
},
"vorabpauschale_tax": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"year",
"contributions_cumulative",
"value_before_tax",
"value_after_tax",
"annual_contribution",
"vorabpauschale_tax"
],
"additionalProperties": false
}
},
"final_value": {
"type": "number",
"description": "EUR, not cents."
},
"total_contributions": {
"type": "number",
"description": "EUR, not cents."
},
"total_growth": {
"type": "number",
"description": "EUR, not cents."
},
"total_taxes_paid": {
"type": "number",
"description": "EUR, not cents."
},
"final_value_no_tax": {
"type": "number",
"description": "EUR, not cents."
},
"tax_drag_eur": {
"type": "number",
"description": "EUR, not cents."
},
"tax_drag_pct": {
"type": "number",
"description": "Percentage points: 4 means 4%."
}
},
"required": [
"yearly_data",
"final_value",
"total_contributions",
"total_growth",
"total_taxes_paid",
"final_value_no_tax",
"tax_drag_eur",
"tax_drag_pct"
],
"additionalProperties": false
}Яка фінансова подушка Вам потрібна?
POST /api/v1/public/calculators/notgroschen
{
"inputs": {
"monthlyExpenses": 2500,
"bufferMonths": 6,
"currentSavings": 0,
"monthlySavingsCapacity": 300,
"parkingVehicle": "tagesgeld"
},
"locale": "uk"
}{
"type": "object",
"properties": {
"monthlyExpenses": {
"type": "number",
"minimum": 1,
"maximum": 100000000,
"default": 2500,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"bufferMonths": {
"anyOf": [
{
"type": "number",
"enum": [
3
]
},
{
"type": "number",
"enum": [
6
]
},
{
"type": "number",
"enum": [
9
]
},
{
"type": "number",
"enum": [
12
]
}
],
"default": 6
},
"currentSavings": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"monthlySavingsCapacity": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 300,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"parkingVehicle": {
"type": "string",
"enum": [
"tagesgeld",
"geldmarkt_etf",
"festgeld_leiter"
],
"default": "tagesgeld"
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"targetAmount": {
"type": "number",
"description": "EUR, not cents."
},
"deficit": {
"type": "number",
"description": "EUR, not cents."
},
"monthsToTarget": {
"type": "integer",
"minimum": 0,
"description": "Months to target, capped at 600; zero with a positive deficit and no saving capacity does not mean funded."
},
"targetUnreachable": {
"type": "boolean",
"description": "The 600-month horizon was exhausted. Also inspect deficit and saving capacity when monthsToTarget is zero."
},
"targetDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "UTC modeled target date; only meaningful if the target is funded or reachable with positive saving capacity."
},
"expectedReturn": {
"type": "number",
"description": "EUR, not cents."
},
"recommendedVehicle": {
"type": "string",
"enum": [
"tagesgeld",
"geldmarkt_etf",
"festgeld_leiter"
]
}
},
"required": [
"targetAmount",
"deficit",
"monthsToTarget",
"targetUnreachable",
"targetDate",
"expectedReturn",
"recommendedVehicle"
],
"additionalProperties": false
}Скільки потрібно для Вашої нерухомості?
POST /api/v1/public/calculators/eigenkapital
{
"inputs": {
"purchasePrice": 350000,
"bundesland": "nordrhein-westfalen",
"eigenkapitalQuote": 20,
"currentSavings": 30000,
"monthlySavingsCapacity": 500,
"savingsReturnPct": 4
},
"locale": "uk"
}{
"type": "object",
"properties": {
"purchasePrice": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 350000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"bundesland": {
"type": "string",
"enum": [
"baden-wuerttemberg",
"bayern",
"berlin",
"brandenburg",
"bremen",
"hamburg",
"hessen",
"mecklenburg-vorpommern",
"niedersachsen",
"nordrhein-westfalen",
"rheinland-pfalz",
"saarland",
"sachsen",
"sachsen-anhalt",
"schleswig-holstein",
"thueringen"
],
"default": "nordrhein-westfalen"
},
"eigenkapitalQuote": {
"type": "number",
"minimum": 10,
"maximum": 40,
"default": 20,
"description": "Equity percentage points, e.g. 20 for 20%."
},
"currentSavings": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 30000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"monthlySavingsCapacity": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 500,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"savingsReturnPct": {
"type": "number",
"minimum": 0,
"maximum": 8,
"default": 4,
"description": "Annual percentage points: 6 means 6%, not 0.06."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"nebenkostenTotal": {
"type": "number",
"description": "EUR, not cents."
},
"nebenkostenBreakdown": {
"type": "object",
"properties": {
"grunderwerbsteuer": {
"type": "number",
"description": "EUR, not cents."
},
"notarGrundbuch": {
"type": "number",
"description": "EUR, not cents."
},
"makler": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"grunderwerbsteuer",
"notarGrundbuch",
"makler"
],
"additionalProperties": false
},
"eigenkapitalRequired": {
"type": "number",
"description": "EUR, not cents."
},
"totalUpfront": {
"type": "number",
"description": "EUR, not cents."
},
"deficit": {
"type": "number",
"description": "EUR, not cents."
},
"monthsToTarget": {
"type": "integer",
"minimum": 0,
"description": "Months to target, capped at 600; zero with a positive deficit and no saving capacity does not mean funded."
},
"targetUnreachable": {
"type": "boolean",
"description": "The 600-month horizon was exhausted. Also inspect deficit and saving capacity when monthsToTarget is zero."
},
"targetDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "UTC modeled target date; only meaningful if the target is funded or reachable with positive saving capacity."
},
"monthlyMortgageEstimate": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"nebenkostenTotal",
"nebenkostenBreakdown",
"eigenkapitalRequired",
"totalUpfront",
"deficit",
"monthsToTarget",
"targetUnreachable",
"targetDate",
"monthlyMortgageEstimate"
],
"additionalProperties": false
}Чого бракує для Вашої пенсії?
POST /api/v1/public/calculators/rentenluecke
{
"inputs": {
"currentAge": 35,
"retirementAge": 67,
"grossMonthlyIncome": 4000,
"workingYearsSoFar": 10,
"desiredRetirementIncome": 2500,
"existingPrivateProvision": 0,
"monthlyContribution": 300,
"annualReturnPct": 6
},
"locale": "uk"
}{
"type": "object",
"properties": {
"currentAge": {
"type": "integer",
"minimum": 18,
"maximum": 65,
"default": 35
},
"retirementAge": {
"type": "integer",
"minimum": 55,
"maximum": 70,
"default": 67
},
"grossMonthlyIncome": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 4000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"workingYearsSoFar": {
"type": "integer",
"minimum": 0,
"maximum": 50,
"default": 10
},
"desiredRetirementIncome": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 2500,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"existingPrivateProvision": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"monthlyContribution": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 300,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"annualReturnPct": {
"type": "number",
"minimum": 0,
"maximum": 15,
"default": 6,
"description": "Annual percentage points: 6 means 6%, not 0.06."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"estimatedStatePension": {
"type": "number",
"description": "Estimated monthly state pension, EUR."
},
"monthlyGap": {
"type": "number",
"description": "EUR, not cents."
},
"annualGap": {
"type": "number",
"description": "EUR, not cents."
},
"capitalNeeded": {
"type": "number",
"description": "EUR, not cents."
},
"capitalNeededAfterExisting": {
"type": "number",
"description": "EUR, not cents."
},
"monthlySavingsNeeded": {
"type": "number",
"description": "EUR, not cents."
},
"surplusOrDeficit": {
"type": "number",
"description": "EUR, not cents."
},
"yearsUntilRetirement": {
"type": "number",
"description": "Elapsed years, possibly fractional."
}
},
"required": [
"estimatedStatePension",
"monthlyGap",
"annualGap",
"capitalNeeded",
"capitalNeededAfterExisting",
"monthlySavingsNeeded",
"surplusOrDeficit",
"yearsUntilRetirement"
],
"additionalProperties": false
}На скільки вистачить Вашого капіталу?
POST /api/v1/public/calculators/entnahmeplan
{
"inputs": {
"portfolioValue": 500000,
"monthlyWithdrawal": 2000,
"annualReturnPct": 5,
"inflationPct": 2,
"strategy": "constant_nominal",
"percentageRate": 4,
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"portfolioValue": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 500000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"monthlyWithdrawal": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 2000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"annualReturnPct": {
"type": "number",
"minimum": 0,
"maximum": 15,
"default": 5,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"inflationPct": {
"type": "number",
"minimum": 0,
"maximum": 5,
"default": 2,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"strategy": {
"type": "string",
"enum": [
"constant_nominal",
"constant_real",
"percentage"
],
"default": "constant_nominal"
},
"percentageRate": {
"type": "number",
"minimum": 0.1,
"maximum": 20,
"default": 4,
"description": "Annual withdrawal percentage points: 4 means 4%."
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"yearlyData": {
"type": "array",
"items": {
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 0,
"description": "Year index from the start of the projection."
},
"balanceStart": {
"type": "number",
"description": "EUR, not cents."
},
"withdrawal": {
"type": "number",
"description": "EUR, not cents."
},
"grossWithdrawal": {
"type": "number",
"description": "EUR, not cents."
},
"taxPaid": {
"type": "number",
"description": "EUR, not cents."
},
"growth": {
"type": "number",
"description": "EUR, not cents."
},
"balanceEnd": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"year",
"balanceStart",
"withdrawal",
"grossWithdrawal",
"taxPaid",
"growth",
"balanceEnd"
],
"additionalProperties": false
}
},
"yearsUntilDepletion": {
"type": [
"number",
"null"
],
"description": "Null means no depletion within the modeled horizon; it does not show that the withdrawals last for life."
},
"totalWithdrawals": {
"type": "number",
"description": "EUR, not cents."
},
"totalTaxPaid": {
"type": "number",
"description": "EUR, not cents."
},
"effectiveWithdrawalRate": {
"type": "number",
"description": "Percentage points: 4 means 4%."
},
"remainingAt80": {
"type": [
"number",
"null"
],
"description": "EUR at age 80; null if that age is outside the modeled age/horizon."
},
"remainingAt90": {
"type": [
"number",
"null"
],
"description": "EUR at age 90; null if that age is outside the modeled age/horizon."
}
},
"required": [
"yearlyData",
"yearsUntilDepletion",
"totalWithdrawals",
"totalTaxPaid",
"effectiveWithdrawalRate",
"remainingAt80",
"remainingAt90"
],
"additionalProperties": false
}Розрахуйте неоподатковувані ліміти й податкові зобов’язання
POST /api/v1/public/calculators/schenkungsteuer
{
"inputs": {
"relationship": "child",
"giftAmount": 100000,
"previousGifts10y": 0,
"numberOfDonors": 1,
"optimizeOverTime": false,
"totalToTransfer": 100000
},
"locale": "uk"
}{
"type": "object",
"properties": {
"relationship": {
"type": "string",
"enum": [
"spouse",
"child",
"grandchild",
"sibling",
"other"
],
"default": "child"
},
"giftAmount": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 100000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"previousGifts10y": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"numberOfDonors": {
"type": "integer",
"minimum": 1,
"maximum": 2,
"default": 1
},
"optimizeOverTime": {
"type": "boolean",
"default": false
},
"totalToTransfer": {
"type": "number",
"minimum": 0,
"maximum": 10000000,
"default": 100000,
"description": "Used only when optimizeOverTime is true. Prior gifts are not modeled by optimization."
}
},
"additionalProperties": false
}{
"anyOf": [
{
"type": "object",
"properties": {
"freibetrag": {
"type": "number",
"description": "EUR, not cents."
},
"totalFreibetrag": {
"type": "number",
"description": "EUR, not cents."
},
"taxableAmount": {
"type": "number",
"description": "EUR, not cents."
},
"taxRate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"taxDue": {
"type": "number",
"description": "EUR, not cents."
},
"netGiftAmount": {
"type": "number",
"description": "EUR, not cents."
},
"steuerklasse": {
"type": "string",
"enum": [
"I",
"II",
"III"
]
},
"optimalSchedule": {
"type": "array",
"items": {
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 0,
"description": "Year index from the start of the projection."
},
"amount": {
"type": "number",
"description": "EUR, not cents."
},
"taxFree": {
"type": "boolean"
},
"taxDue": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"year",
"amount",
"taxFree",
"taxDue"
],
"additionalProperties": false
}
},
"totalTaxSaved": {
"type": "number",
"description": "EUR, not cents."
},
"yearsNeeded": {
"type": "number",
"description": "Elapsed years, possibly fractional."
}
},
"required": [
"freibetrag",
"totalFreibetrag",
"taxableAmount",
"taxRate",
"taxDue",
"netGiftAmount",
"steuerklasse",
"optimalSchedule",
"totalTaxSaved",
"yearsNeeded"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"freibetrag": {
"type": "number",
"description": "EUR, not cents."
},
"totalFreibetrag": {
"type": "number",
"description": "EUR, not cents."
},
"taxableAmount": {
"type": "number",
"description": "EUR, not cents."
},
"taxRate": {
"type": "number",
"description": "Fraction: 0.25 means 25%."
},
"taxDue": {
"type": "number",
"description": "EUR, not cents."
},
"netGiftAmount": {
"type": "number",
"description": "EUR, not cents."
},
"steuerklasse": {
"type": "string",
"enum": [
"I",
"II",
"III"
]
}
},
"required": [
"freibetrag",
"totalFreibetrag",
"taxableAmount",
"taxRate",
"taxDue",
"netGiftAmount",
"steuerklasse"
],
"additionalProperties": false
}
],
"description": "Scheduling mode adds optimalSchedule, totalTaxSaved and yearsNeeded. Single-gift mode returns the base fields."
}До якої суми зростуть регулярні вкладення дитини?
POST /api/v1/public/calculators/junior-depot
{
"inputs": {
"childAge": 0,
"targetAge": 18,
"monthlyContribution": 100,
"initialDeposit": 0,
"annualReturnPct": 7,
"useKindergeld": false,
"hasNVBescheinigung": false,
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"childAge": {
"type": "integer",
"minimum": 0,
"maximum": 17,
"default": 0
},
"targetAge": {
"type": "integer",
"minimum": 1,
"maximum": 30,
"default": 18
},
"monthlyContribution": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 100,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"initialDeposit": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"annualReturnPct": {
"type": "number",
"minimum": 0,
"maximum": 15,
"default": 7,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"useKindergeld": {
"type": "boolean",
"default": false
},
"hasNVBescheinigung": {
"type": "boolean",
"default": false
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"yearlyData": {
"type": "array",
"items": {
"type": "object",
"properties": {
"year": {
"type": "integer",
"minimum": 0,
"description": "Year index from the start of the projection."
},
"age": {
"type": "integer",
"description": "Child age in years."
},
"contributionsCumulative": {
"type": "number",
"description": "EUR, not cents."
},
"valueGross": {
"type": "number",
"description": "EUR, not cents."
},
"vorabpauschaleTax": {
"type": "number",
"description": "EUR, not cents."
}
},
"required": [
"year",
"age",
"contributionsCumulative",
"valueGross",
"vorabpauschaleTax"
],
"additionalProperties": false
}
},
"finalValueGross": {
"type": "number",
"description": "EUR, not cents."
},
"totalContributions": {
"type": "number",
"description": "EUR, not cents."
},
"totalGrowth": {
"type": "number",
"description": "EUR, not cents."
},
"finalValueAfterTax": {
"type": "number",
"description": "EUR, not cents."
},
"taxOnSale": {
"type": "number",
"description": "EUR, not cents."
},
"vorabpauschaleCredited": {
"type": "number",
"description": "EUR, not cents."
},
"nvSavings": {
"type": "number",
"description": "EUR, not cents."
},
"kindergeldEquivalent": {
"type": "string",
"description": "Display text; use the numeric result fields for arithmetic."
}
},
"required": [
"yearlyData",
"finalValueGross",
"totalContributions",
"totalGrowth",
"finalValueAfterTax",
"taxOnSale",
"vorabpauschaleCredited",
"nvSavings",
"kindergeldEquivalent"
],
"additionalProperties": false
}Коли Ви досягнете фінансової незалежності?
POST /api/v1/public/calculators/fire-rechner
{
"inputs": {
"monthlyExpenses": 2000,
"currentPortfolio": 100000,
"monthlyContribution": 1500,
"annualReturnPct": 7,
"withdrawalRatePct": 3.5,
"currentAge": 30,
"partTimeIncome": 1000,
"targetRetirementAge": 55,
"variant": "regular",
"taxProfile": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
}
},
"locale": "uk"
}{
"type": "object",
"properties": {
"monthlyExpenses": {
"type": "number",
"minimum": 1,
"maximum": 100000000,
"default": 2000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"currentPortfolio": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 100000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"monthlyContribution": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 1500,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"annualReturnPct": {
"type": "number",
"minimum": 0,
"maximum": 15,
"default": 7,
"description": "Annual percentage points: 6 means 6%, not 0.06."
},
"withdrawalRatePct": {
"type": "number",
"minimum": 2,
"maximum": 6,
"default": 3.5
},
"currentAge": {
"type": "integer",
"minimum": 18,
"maximum": 70,
"default": 30
},
"partTimeIncome": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 1000,
"description": "EUR, numeric JSON value (not cents or a formatted string)."
},
"targetRetirementAge": {
"type": "integer",
"minimum": 19,
"maximum": 80,
"default": 55
},
"variant": {
"type": "string",
"enum": [
"regular",
"coast",
"barista"
],
"default": "regular"
},
"taxProfile": {
"type": "object",
"properties": {
"bundesland": {
"anyOf": [
{
"type": "string",
"enum": [
"Baden-Württemberg",
"Bayern",
"Berlin",
"Brandenburg",
"Bremen",
"Hamburg",
"Hessen",
"Mecklenburg-Vorpommern",
"Niedersachsen",
"Nordrhein-Westfalen",
"Rheinland-Pfalz",
"Saarland",
"Sachsen",
"Sachsen-Anhalt",
"Schleswig-Holstein",
"Thüringen"
]
},
{
"type": "null"
}
],
"default": null
},
"kirchensteuer": {
"type": "boolean",
"default": false
},
"filing_status": {
"type": "string",
"enum": [
"single",
"joint"
],
"default": "single"
},
"sparerpauschbetrag_remaining": {
"type": "number",
"minimum": 0,
"maximum": 2000,
"default": 1000,
"description": "Remaining EUR allowance for single-year tax calculations. Multi-year projections use the full annual statutory allowance based on filing_status."
}
},
"default": {
"bundesland": null,
"kirchensteuer": false,
"filing_status": "single",
"sparerpauschbetrag_remaining": 1000
},
"additionalProperties": false
}
},
"additionalProperties": false,
"description": "Coast FIRE requires a future target age and a nominal return above 2% (the model inflation assumption)."
}{
"type": "object",
"properties": {
"fireNumber": {
"type": "number",
"description": "EUR, not cents."
},
"fireNumberPreTax": {
"type": "number",
"description": "EUR, not cents."
},
"yearsToFire": {
"type": [
"number",
"null"
],
"description": "Null means the target was not reached within the 50-year modeled horizon."
},
"monthlyContributionNeeded": {
"type": "number",
"description": "EUR, not cents."
},
"coastFireNumber": {
"type": [
"number",
"null"
],
"description": "Null when Coast FIRE does not apply."
},
"coastFireAge": {
"type": [
"number",
"null"
],
"description": "Absolute age in years; null when Coast FIRE age is not applicable, including an already-funded portfolio."
},
"baristaIncomeNeeded": {
"type": [
"number",
"null"
],
"description": "Annual part-time income in EUR; null when the Barista calculation does not apply."
},
"baristaPortfolioNeeded": {
"type": [
"number",
"null"
],
"description": "Null when the Barista calculation does not apply."
},
"effectiveMultiplier": {
"type": "number",
"description": "Multiple of annual expenses, not a percentage or EUR amount."
}
},
"required": [
"fireNumber",
"fireNumberPreTax",
"yearsToFire",
"monthlyContributionNeeded",
"coastFireNumber",
"coastFireAge",
"baristaIncomeNeeded",
"baristaPortfolioNeeded",
"effectiveMultiplier"
],
"additionalProperties": false
}Аналізуйте портфель без облікового запису Investboard. Передайте ISIN і ваги або ринкову вартість. Один запит повертає перетини, базові компанії, концентрацію, сектори, географію, валюти, розподіл і поточні витрати фондів. Окремі кінцеві точки додають сценарії витрат, галузі й теми, географію виторгу, порівняння до та після, бюджети поповнення, альтернативи ETF, кризові сценарії й історичне відтворення.
curl 'https://investboard.com/api/v1/public/portfolio-analysis' \
-H 'Content-Type: application/json' \
--data '{
"basis": "weights",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"weight": 0.6
},
{
"isin": "IE00B3XXRP09",
"weight": 0.3
},
{
"assetClass": "cash",
"currency": "EUR",
"weight": 0.1
}
],
"locale": "uk"
}'Використовуйте basis: weights із додатними частками із сумою 1 або basis: values із додатною ринковою вартістю, уже перерахованою в baseCurrency. Не змішуйте ваги з вартістю або вихідні валюти. Повторювані ISIN об’єднуються за брокерами. Грошові кошти використовують assetClass: cash і валюту. Запити знімка та стрес-аналізу з вагами повертають грошові результати null. Історичне відтворення використовує явні гіпотетичні суми вкладень.
{
"basis": "values",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"value": 6000
},
{
"isin": "IE00B3XXRP09",
"value": 3000
},
{
"assetClass": "cash",
"currency": "EUR",
"value": 1000
}
],
"locale": "uk"
}Використовуйте власні приклади й схеми кожної кінцевої точки нижче. Впливу витрат потрібні явні припущення про дохідність і комісії. Географія виторгу досліджує до 25 базових компаній і зберігає неохоплену вагу. Порівняння з неповними розділами приховують їхні зміни. Плануванню поповнення потрібні вартість портфеля й Ваші цілі; нерозподілені гроші залишаються грошовими коштами.
Кожен розділ містить status, reasons і data. HTTP 200 може включати часткові або недоступні розділи. Вісім кінцевих точок знімка позначають решту розділів як not_requested. Окремі кінцеві точки мають власну схему введення й повертають capability та analysis; перевіряйте analysis.status. Невідомі позиції залишаються в розподілі як unknown і у знаменнику портфеля. Розділи базових акцій описують розпізнану сукупність; концентрація не показується, якщо хоча б одну позицію не розпізнано.
Розподіл охоплює наданий портфель. Розкриття складу фондів, сектори, країни, регіони та базова валютна залежність охоплюють акції. Ваги груп стосуються всього наданого портфеля; portfolioShare вказує сукупність акцій, а coverage її класифіковану частку. Ваги концентрації компаній стосуються сукупності емітентів акцій. Фонди облігацій, грошових коштів, золота й криптовалют залишаються цілком у розподілі активів.
Базова валютна залежність моделюється за країнами компаній і валютними хеджами, зазначеними фондами. Вона відрізняється від heldCurrencies, що описує розпізнані валюти лістингу та грошові кошти. Це не валюти виторгу й не виміряна чутливість до валютних курсів.
Витрати охоплюють поточні витрати фондів. weightedTer стосується охоплених фондів, а не всього портфеля. knownAnnualCost є відомим підсумком за неповного охоплення. Відсутній або нульовий TER постачальника невідомий. Комісії брокера, спреди й податки виключені.
Результати супроводжуються датами складу й охопленням. Відсутні дані залишаються невідомими. Порожній перелік перетинів за неповного складу фондів не доводить відсутності перетинів; пари нижче 1% пропускаються. HHI, ефективна кількість емітентів і названі емітенти не показуються за охоплення емітентів нижче 80%. Кількість повернутих позицій і компаній обмежено limit; tailWeight зберігає пропущену частку.
Альтернативи ETF порівнюють не більш як десять кандидатів із Вашого переліку ISIN або спільного каталогу. Стрес-сценарії використовують наближені кризові моделі з опублікованими джерелами. Історичне відтворення моделює Ваш поточний склад за датованими цінами й валютними курсами; воно не показує результатів за відсутності історії будь-якої позиції та розкриває врахування дивідендів і безпроцентних грошових коштів. Внески починаються з нульового дня. Це порівняння й моделювання, а не інвестиційні рекомендації або фактична динаміка рахунку.
До 25 наданих позицій на знімок і 16 KiB на запит. Для аналізу портфеля діє окремий спільний ліміт 60 одиниць на IP за хвилину: по одній на надану позицію (обидва знімки для compare), плюс 25 зарезервованих одиниць компаній для revenue-geography. Історичне відтворення коштує дві одиниці на позицію; альтернативи ETF по дві на вихідний фонд або кандидата з резервом на десять кандидатів під час читання каталогу. cost-drag і discovery коштують одну. Під час збоїв обмеження діє за можливості. Дотримуйтеся Retry-After за HTTP 429. Міждоменні клієнти використовують credentials: omit.
Надсилайте позиції в тілах POST-запитів. Наданий портфель і результати аналізу не зберігаються; спільні кеші довідкових даних можуть заповнюватися. Повернуті посилання документації не містять позицій. Події використання містять лише операцію, відому можливість, стан, тривалість і кількість позицій.
{
"anyOf": [
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"weights"
],
"default": "weights"
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"isin",
"weight"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"assetClass",
"currency",
"weight"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"holdings"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
}
]
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"basis": {
"type": "string",
"enum": [
"weights",
"values"
]
},
"totalValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"resolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
],
"description": "Oldest known fund-constituent date; null when unavailable. Not the date of all reference data."
},
"holdings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"assetClass": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"enum": [
"resolved",
"unresolved"
]
}
},
"required": [
"isin",
"name",
"weight",
"value",
"assetClass",
"status"
],
"additionalProperties": false
}
},
"analyses": {
"type": "object",
"properties": {
"allocation": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"whole_portfolio"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"overlap": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"method": {
"type": "string",
"enum": [
"sum_minimum_constituent_weights"
]
},
"fundCount": {
"type": "integer",
"minimum": 0
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fundA": {
"type": "string"
},
"fundB": {
"type": "string"
},
"isinA": {
"type": [
"string",
"null"
]
},
"isinB": {
"type": [
"string",
"null"
]
},
"overlap": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Sum of the smaller constituent weights in the two funds, not a percentage of the portfolio."
},
"sharedCount": {
"type": "integer",
"minimum": 0
},
"sharedTail": {
"type": [
"object",
"null"
],
"properties": {
"count": {
"type": "integer",
"minimum": 0
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"count",
"weight"
],
"additionalProperties": false,
"description": "Shared constituents beyond the returned list; weight uses the same overlap measure as the headline."
},
"sharedHoldings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"weightInA": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightInB": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"id",
"name",
"weightInA",
"weightInB"
],
"additionalProperties": false
}
}
},
"required": [
"fundA",
"fundB",
"isinA",
"isinB",
"overlap",
"sharedCount",
"sharedTail",
"sharedHoldings"
],
"additionalProperties": false
}
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"fundCount",
"pairs",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"look-through": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"sector": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"provenance": {
"type": "object",
"properties": {
"direct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"viaFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fund": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"shareInFund": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"fund",
"weight",
"shareInFund"
],
"additionalProperties": false
}
}
},
"required": [
"direct",
"viaFunds"
],
"additionalProperties": false
}
},
"required": [
"id",
"isin",
"name",
"weight",
"value",
"sector",
"region",
"provenance"
],
"additionalProperties": false
}
},
"positionCount": {
"type": "integer",
"minimum": 0
},
"unresolvedFundWeight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Whole-portfolio share in undissolved equity fund remainders; these are not named companies."
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"positions",
"positionCount",
"unresolvedFundWeight",
"tailWeight",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"concentration": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"issuers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
}
},
"issuerCount": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"tailWeight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"largestIssuer": {
"type": [
"object",
"null"
],
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
},
"hhi": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1,
"description": "Herfindahl index over the equity issuer book; withheld below 80% coverage."
},
"effectiveN": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Effective issuer count; withheld below 80% coverage."
}
},
"required": [
"scope",
"coverage",
"issuers",
"issuerCount",
"tailWeight",
"largestIssuer",
"hhi",
"effectiveN"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"sectors": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"geography": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"countries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"regions": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"countries",
"regions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"currencies": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"equityExposure": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"heldCurrencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
},
"description": "Resolved listing currencies and caller-stated cash currencies; separate from underlying exposure."
},
"hedgedFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"currency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"currency",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"equityExposure",
"heldCurrencies",
"hedgedFunds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"costs": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"ongoing_fund_charges"
]
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"fundPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightedTer": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "TER fraction on the covered fund portion, not on the entire portfolio. 0.002 means 0.2%."
},
"knownAnnualCost": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Known fund charges in baseCurrency; a subtotal when coverage is incomplete. Null for weight-only input."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0
},
"annualCost": {
"type": [
"number",
"null"
],
"minimum": 0
}
},
"required": [
"isin",
"name",
"weight",
"ter",
"annualCost"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coveredPortfolioWeight",
"fundPortfolioWeight",
"unknownPortfolioWeight",
"weightedTer",
"knownAnnualCost",
"positions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
}
},
"required": [
"allocation",
"overlap",
"look-through",
"concentration",
"sectors",
"geography",
"currencies",
"costs"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"basis",
"totalValue",
"resolvedPortfolioWeight",
"constituentsAsOf",
"holdings",
"analyses",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/allocation
Розрахунок та обмеження →{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"whole_portfolio"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coverage",
"buckets"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/overlap
Розрахунок та обмеження →{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"sum_minimum_constituent_weights"
]
},
"fundCount": {
"type": "integer",
"minimum": 0
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fundA": {
"type": "string"
},
"fundB": {
"type": "string"
},
"isinA": {
"type": [
"string",
"null"
]
},
"isinB": {
"type": [
"string",
"null"
]
},
"overlap": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Sum of the smaller constituent weights in the two funds, not a percentage of the portfolio."
},
"sharedCount": {
"type": "integer",
"minimum": 0
},
"sharedTail": {
"type": [
"object",
"null"
],
"properties": {
"count": {
"type": "integer",
"minimum": 0
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"count",
"weight"
],
"additionalProperties": false,
"description": "Shared constituents beyond the returned list; weight uses the same overlap measure as the headline."
},
"sharedHoldings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"weightInA": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightInB": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"id",
"name",
"weightInA",
"weightInB"
],
"additionalProperties": false
}
}
},
"required": [
"fundA",
"fundB",
"isinA",
"isinB",
"overlap",
"sharedCount",
"sharedTail",
"sharedHoldings"
],
"additionalProperties": false
}
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"fundCount",
"pairs",
"funds"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/look-through
Розрахунок та обмеження →{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"sector": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"provenance": {
"type": "object",
"properties": {
"direct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"viaFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fund": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"shareInFund": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"fund",
"weight",
"shareInFund"
],
"additionalProperties": false
}
}
},
"required": [
"direct",
"viaFunds"
],
"additionalProperties": false
}
},
"required": [
"id",
"isin",
"name",
"weight",
"value",
"sector",
"region",
"provenance"
],
"additionalProperties": false
}
},
"positionCount": {
"type": "integer",
"minimum": 0
},
"unresolvedFundWeight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Whole-portfolio share in undissolved equity fund remainders; these are not named companies."
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"positions",
"positionCount",
"unresolvedFundWeight",
"tailWeight",
"funds"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/concentration
Розрахунок та обмеження →{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"issuers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
}
},
"issuerCount": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"tailWeight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"largestIssuer": {
"type": [
"object",
"null"
],
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
},
"hhi": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1,
"description": "Herfindahl index over the equity issuer book; withheld below 80% coverage."
},
"effectiveN": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Effective issuer count; withheld below 80% coverage."
}
},
"required": [
"scope",
"coverage",
"issuers",
"issuerCount",
"tailWeight",
"largestIssuer",
"hhi",
"effectiveN"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/sectors
Розрахунок та обмеження →{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/geography
Розрахунок та обмеження →{
"type": "object",
"properties": {
"countries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"regions": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"countries",
"regions"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/currencies
Розрахунок та обмеження →{
"type": "object",
"properties": {
"equityExposure": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"heldCurrencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
},
"description": "Resolved listing currencies and caller-stated cash currencies; separate from underlying exposure."
},
"hedgedFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"currency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"currency",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"equityExposure",
"heldCurrencies",
"hedgedFunds"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/costs
Розрахунок та обмеження →{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"ongoing_fund_charges"
]
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"fundPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightedTer": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "TER fraction on the covered fund portion, not on the entire portfolio. 0.002 means 0.2%."
},
"knownAnnualCost": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Known fund charges in baseCurrency; a subtotal when coverage is incomplete. Null for weight-only input."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0
},
"annualCost": {
"type": [
"number",
"null"
],
"minimum": 0
}
},
"required": [
"isin",
"name",
"weight",
"ter",
"annualCost"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coveredPortfolioWeight",
"fundPortfolioWeight",
"unknownPortfolioWeight",
"weightedTer",
"knownAnnualCost",
"positions"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/cost-drag
Розрахунок та обмеження →{
"baseCurrency": "EUR",
"initialValue": 10000,
"annualReturn": 0.05,
"annualFeeRate": 0.002,
"monthlyContribution": 100,
"horizonYears": [
10,
20
]
}{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"initialValue": {
"type": "number",
"minimum": 0,
"maximum": 100000000
},
"annualReturn": {
"type": "number",
"minimum": -1,
"maximum": 1,
"description": "Caller-assumed nominal annual return, as a fraction; not a forecast."
},
"annualFeeRate": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Caller-assumed annual fee fraction on the entire modeled amount; zero is an explicit assumption."
},
"monthlyContribution": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0
},
"horizonYears": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 50
},
"minItems": 1,
"maxItems": 10
}
},
"required": [
"initialValue",
"annualReturn",
"annualFeeRate",
"horizonYears"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"cost-drag"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"model": {
"type": "string",
"enum": [
"nominal_annual_rate_divided_by_12_end_of_month_contributions"
]
},
"initialValue": {
"type": "number",
"minimum": 0
},
"monthlyContribution": {
"type": "number",
"minimum": 0
},
"annualReturn": {
"type": "number"
},
"annualFeeRate": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"horizons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"years": {
"type": "integer",
"exclusiveMinimum": 0
},
"valueWithCost": {
"type": "number",
"minimum": 0
},
"valueWithoutCost": {
"type": "number",
"minimum": 0
},
"totalCostDrag": {
"type": "number",
"minimum": 0
},
"averageAnnualCostDrag": {
"type": "number",
"minimum": 0
},
"costDragFraction": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"years",
"valueWithCost",
"valueWithoutCost",
"totalCostDrag",
"averageAnnualCostDrag",
"costDragFraction"
],
"additionalProperties": false
}
}
},
"required": [
"model",
"initialValue",
"monthlyContribution",
"annualReturn",
"annualFeeRate",
"horizons"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"model": {
"type": "string",
"enum": [
"nominal_annual_rate_divided_by_12_end_of_month_contributions"
]
},
"initialValue": {
"type": "number",
"minimum": 0
},
"monthlyContribution": {
"type": "number",
"minimum": 0
},
"annualReturn": {
"type": "number"
},
"annualFeeRate": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"horizons": {
"type": "array",
"items": {
"type": "object",
"properties": {
"years": {
"type": "integer",
"exclusiveMinimum": 0
},
"valueWithCost": {
"type": "number",
"minimum": 0
},
"valueWithoutCost": {
"type": "number",
"minimum": 0
},
"totalCostDrag": {
"type": "number",
"minimum": 0
},
"averageAnnualCostDrag": {
"type": "number",
"minimum": 0
},
"costDragFraction": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"years",
"valueWithCost",
"valueWithoutCost",
"totalCostDrag",
"averageAnnualCostDrag",
"costDragFraction"
],
"additionalProperties": false
}
}
},
"required": [
"model",
"initialValue",
"monthlyContribution",
"annualReturn",
"annualFeeRate",
"horizons"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/industries
Розрахунок та обмеження →{
"basis": "weights",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"weight": 0.6
},
{
"isin": "IE00B3XXRP09",
"weight": 0.3
},
{
"assetClass": "cash",
"currency": "EUR",
"weight": 0.1
}
],
"locale": "en"
}{
"anyOf": [
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"weights"
],
"default": "weights"
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"isin",
"weight"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"assetClass",
"currency",
"weight"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"holdings"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
}
]
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"industries"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"industries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
},
"unknownWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets",
"unknownWeight",
"tailWeight"
],
"additionalProperties": false
},
"industryInterests": {
"type": "object",
"properties": {
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"definitionVersion": {
"type": "integer",
"exclusiveMinimum": 0
},
"weight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
}
},
"required": [
"key",
"definitionVersion",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"coverage",
"items"
],
"additionalProperties": false
},
"thematicBaskets": {
"type": "object",
"properties": {
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"definitionVersion": {
"type": "integer",
"exclusiveMinimum": 0
},
"weight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
}
},
"required": [
"key",
"definitionVersion",
"weight"
],
"additionalProperties": false
}
},
"registryVersion": {
"type": "integer",
"exclusiveMinimum": 0
}
},
"required": [
"coverage",
"items",
"registryVersion"
],
"additionalProperties": false
},
"unresolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"industries",
"industryInterests",
"thematicBaskets",
"unresolvedPortfolioWeight",
"constituentsAsOf"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"industries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
},
"unknownWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets",
"unknownWeight",
"tailWeight"
],
"additionalProperties": false
},
"industryInterests": {
"type": "object",
"properties": {
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"definitionVersion": {
"type": "integer",
"exclusiveMinimum": 0
},
"weight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
}
},
"required": [
"key",
"definitionVersion",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"coverage",
"items"
],
"additionalProperties": false
},
"thematicBaskets": {
"type": "object",
"properties": {
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"definitionVersion": {
"type": "integer",
"exclusiveMinimum": 0
},
"weight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
}
},
"required": [
"key",
"definitionVersion",
"weight"
],
"additionalProperties": false
}
},
"registryVersion": {
"type": "integer",
"exclusiveMinimum": 0
}
},
"required": [
"coverage",
"items",
"registryVersion"
],
"additionalProperties": false
},
"unresolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"industries",
"industryInterests",
"thematicBaskets",
"unresolvedPortfolioWeight",
"constituentsAsOf"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/revenue-geography
Розрахунок та обмеження →{
"basis": "weights",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"weight": 0.6
},
{
"isin": "IE00B3XXRP09",
"weight": 0.3
},
{
"assetClass": "cash",
"currency": "EUR",
"weight": 0.1
}
],
"locale": "en"
}{
"anyOf": [
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"weights"
],
"default": "weights"
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"isin",
"weight"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"assetClass",
"currency",
"weight"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"holdings"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
}
]
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"revenue-geography"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unresolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
},
"companyLimit": {
"type": "integer",
"exclusiveMinimum": 0
},
"companiesExamined": {
"type": "integer",
"minimum": 0
},
"companiesCovered": {
"type": "integer",
"minimum": 0
},
"reportAsOf": {
"type": [
"string",
"null"
]
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
},
"unmappedSegments": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"coveredPortfolioWeight",
"unknownWeight",
"unresolvedPortfolioWeight",
"buckets",
"companyLimit",
"companiesExamined",
"companiesCovered",
"reportAsOf",
"constituentsAsOf",
"unmappedSegments"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unresolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
},
"companyLimit": {
"type": "integer",
"exclusiveMinimum": 0
},
"companiesExamined": {
"type": "integer",
"minimum": 0
},
"companiesCovered": {
"type": "integer",
"minimum": 0
},
"reportAsOf": {
"type": [
"string",
"null"
]
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
},
"unmappedSegments": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"coveredPortfolioWeight",
"unknownWeight",
"unresolvedPortfolioWeight",
"buckets",
"companyLimit",
"companiesExamined",
"companiesCovered",
"reportAsOf",
"constituentsAsOf",
"unmappedSegments"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/compare
Розрахунок та обмеження →{
"before": {
"basis": "weights",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"weight": 0.6
},
{
"isin": "IE00B3XXRP09",
"weight": 0.3
},
{
"assetClass": "cash",
"currency": "EUR",
"weight": 0.1
}
],
"locale": "en"
},
"after": {
"basis": "weights",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"weight": 0.8
},
{
"isin": "IE00B3XXRP09",
"weight": 0.1
},
{
"assetClass": "cash",
"currency": "EUR",
"weight": 0.1
}
],
"locale": "en"
}
}{
"type": "object",
"properties": {
"before": {
"anyOf": [
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"weights"
],
"default": "weights"
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"isin",
"weight"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"assetClass",
"currency",
"weight"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"holdings"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
}
]
},
"after": {
"anyOf": [
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"weights"
],
"default": "weights"
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"isin",
"weight"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"assetClass",
"currency",
"weight"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"holdings"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
}
]
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
}
},
"required": [
"before",
"after"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"compare"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"before": {
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"basis": {
"type": "string",
"enum": [
"weights",
"values"
]
},
"totalValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"resolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
],
"description": "Oldest known fund-constituent date; null when unavailable. Not the date of all reference data."
},
"holdings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"assetClass": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"enum": [
"resolved",
"unresolved"
]
}
},
"required": [
"isin",
"name",
"weight",
"value",
"assetClass",
"status"
],
"additionalProperties": false
}
},
"analyses": {
"type": "object",
"properties": {
"allocation": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"whole_portfolio"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"overlap": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"method": {
"type": "string",
"enum": [
"sum_minimum_constituent_weights"
]
},
"fundCount": {
"type": "integer",
"minimum": 0
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fundA": {
"type": "string"
},
"fundB": {
"type": "string"
},
"isinA": {
"type": [
"string",
"null"
]
},
"isinB": {
"type": [
"string",
"null"
]
},
"overlap": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Sum of the smaller constituent weights in the two funds, not a percentage of the portfolio."
},
"sharedCount": {
"type": "integer",
"minimum": 0
},
"sharedTail": {
"type": [
"object",
"null"
],
"properties": {
"count": {
"type": "integer",
"minimum": 0
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"count",
"weight"
],
"additionalProperties": false,
"description": "Shared constituents beyond the returned list; weight uses the same overlap measure as the headline."
},
"sharedHoldings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"weightInA": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightInB": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"id",
"name",
"weightInA",
"weightInB"
],
"additionalProperties": false
}
}
},
"required": [
"fundA",
"fundB",
"isinA",
"isinB",
"overlap",
"sharedCount",
"sharedTail",
"sharedHoldings"
],
"additionalProperties": false
}
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"fundCount",
"pairs",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"look-through": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"sector": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"provenance": {
"type": "object",
"properties": {
"direct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"viaFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fund": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"shareInFund": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"fund",
"weight",
"shareInFund"
],
"additionalProperties": false
}
}
},
"required": [
"direct",
"viaFunds"
],
"additionalProperties": false
}
},
"required": [
"id",
"isin",
"name",
"weight",
"value",
"sector",
"region",
"provenance"
],
"additionalProperties": false
}
},
"positionCount": {
"type": "integer",
"minimum": 0
},
"unresolvedFundWeight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Whole-portfolio share in undissolved equity fund remainders; these are not named companies."
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"positions",
"positionCount",
"unresolvedFundWeight",
"tailWeight",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"concentration": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"issuers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
}
},
"issuerCount": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"tailWeight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"largestIssuer": {
"type": [
"object",
"null"
],
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
},
"hhi": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1,
"description": "Herfindahl index over the equity issuer book; withheld below 80% coverage."
},
"effectiveN": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Effective issuer count; withheld below 80% coverage."
}
},
"required": [
"scope",
"coverage",
"issuers",
"issuerCount",
"tailWeight",
"largestIssuer",
"hhi",
"effectiveN"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"sectors": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"geography": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"countries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"regions": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"countries",
"regions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"currencies": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"equityExposure": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"heldCurrencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
},
"description": "Resolved listing currencies and caller-stated cash currencies; separate from underlying exposure."
},
"hedgedFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"currency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"currency",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"equityExposure",
"heldCurrencies",
"hedgedFunds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"costs": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"ongoing_fund_charges"
]
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"fundPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightedTer": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "TER fraction on the covered fund portion, not on the entire portfolio. 0.002 means 0.2%."
},
"knownAnnualCost": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Known fund charges in baseCurrency; a subtotal when coverage is incomplete. Null for weight-only input."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0
},
"annualCost": {
"type": [
"number",
"null"
],
"minimum": 0
}
},
"required": [
"isin",
"name",
"weight",
"ter",
"annualCost"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coveredPortfolioWeight",
"fundPortfolioWeight",
"unknownPortfolioWeight",
"weightedTer",
"knownAnnualCost",
"positions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
}
},
"required": [
"allocation",
"overlap",
"look-through",
"concentration",
"sectors",
"geography",
"currencies",
"costs"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"basis",
"totalValue",
"resolvedPortfolioWeight",
"constituentsAsOf",
"holdings",
"analyses",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
},
"after": {
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"basis": {
"type": "string",
"enum": [
"weights",
"values"
]
},
"totalValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"resolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
],
"description": "Oldest known fund-constituent date; null when unavailable. Not the date of all reference data."
},
"holdings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"assetClass": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"enum": [
"resolved",
"unresolved"
]
}
},
"required": [
"isin",
"name",
"weight",
"value",
"assetClass",
"status"
],
"additionalProperties": false
}
},
"analyses": {
"type": "object",
"properties": {
"allocation": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"whole_portfolio"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"overlap": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"method": {
"type": "string",
"enum": [
"sum_minimum_constituent_weights"
]
},
"fundCount": {
"type": "integer",
"minimum": 0
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fundA": {
"type": "string"
},
"fundB": {
"type": "string"
},
"isinA": {
"type": [
"string",
"null"
]
},
"isinB": {
"type": [
"string",
"null"
]
},
"overlap": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Sum of the smaller constituent weights in the two funds, not a percentage of the portfolio."
},
"sharedCount": {
"type": "integer",
"minimum": 0
},
"sharedTail": {
"type": [
"object",
"null"
],
"properties": {
"count": {
"type": "integer",
"minimum": 0
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"count",
"weight"
],
"additionalProperties": false,
"description": "Shared constituents beyond the returned list; weight uses the same overlap measure as the headline."
},
"sharedHoldings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"weightInA": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightInB": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"id",
"name",
"weightInA",
"weightInB"
],
"additionalProperties": false
}
}
},
"required": [
"fundA",
"fundB",
"isinA",
"isinB",
"overlap",
"sharedCount",
"sharedTail",
"sharedHoldings"
],
"additionalProperties": false
}
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"fundCount",
"pairs",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"look-through": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"sector": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"provenance": {
"type": "object",
"properties": {
"direct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"viaFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fund": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"shareInFund": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"fund",
"weight",
"shareInFund"
],
"additionalProperties": false
}
}
},
"required": [
"direct",
"viaFunds"
],
"additionalProperties": false
}
},
"required": [
"id",
"isin",
"name",
"weight",
"value",
"sector",
"region",
"provenance"
],
"additionalProperties": false
}
},
"positionCount": {
"type": "integer",
"minimum": 0
},
"unresolvedFundWeight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Whole-portfolio share in undissolved equity fund remainders; these are not named companies."
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"positions",
"positionCount",
"unresolvedFundWeight",
"tailWeight",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"concentration": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"issuers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
}
},
"issuerCount": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"tailWeight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"largestIssuer": {
"type": [
"object",
"null"
],
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
},
"hhi": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1,
"description": "Herfindahl index over the equity issuer book; withheld below 80% coverage."
},
"effectiveN": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Effective issuer count; withheld below 80% coverage."
}
},
"required": [
"scope",
"coverage",
"issuers",
"issuerCount",
"tailWeight",
"largestIssuer",
"hhi",
"effectiveN"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"sectors": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"geography": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"countries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"regions": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"countries",
"regions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"currencies": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"equityExposure": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"heldCurrencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
},
"description": "Resolved listing currencies and caller-stated cash currencies; separate from underlying exposure."
},
"hedgedFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"currency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"currency",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"equityExposure",
"heldCurrencies",
"hedgedFunds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"costs": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"ongoing_fund_charges"
]
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"fundPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightedTer": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "TER fraction on the covered fund portion, not on the entire portfolio. 0.002 means 0.2%."
},
"knownAnnualCost": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Known fund charges in baseCurrency; a subtotal when coverage is incomplete. Null for weight-only input."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0
},
"annualCost": {
"type": [
"number",
"null"
],
"minimum": 0
}
},
"required": [
"isin",
"name",
"weight",
"ter",
"annualCost"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coveredPortfolioWeight",
"fundPortfolioWeight",
"unknownPortfolioWeight",
"weightedTer",
"knownAnnualCost",
"positions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
}
},
"required": [
"allocation",
"overlap",
"look-through",
"concentration",
"sectors",
"geography",
"currencies",
"costs"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"basis",
"totalValue",
"resolvedPortfolioWeight",
"constituentsAsOf",
"holdings",
"analyses",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
},
"deltas": {
"type": "object",
"properties": {
"allocation": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"sectors": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"countries": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"currencyExposure": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"hhi": {
"type": [
"number",
"null"
]
},
"effectiveN": {
"type": [
"number",
"null"
]
},
"weightedTer": {
"type": [
"number",
"null"
]
},
"knownAnnualCost": {
"type": [
"number",
"null"
]
}
},
"required": [
"allocation",
"sectors",
"countries",
"currencyExposure",
"hhi",
"effectiveN",
"weightedTer",
"knownAnnualCost"
],
"additionalProperties": false
}
},
"required": [
"before",
"after",
"deltas"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"before": {
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"basis": {
"type": "string",
"enum": [
"weights",
"values"
]
},
"totalValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"resolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
],
"description": "Oldest known fund-constituent date; null when unavailable. Not the date of all reference data."
},
"holdings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"assetClass": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"enum": [
"resolved",
"unresolved"
]
}
},
"required": [
"isin",
"name",
"weight",
"value",
"assetClass",
"status"
],
"additionalProperties": false
}
},
"analyses": {
"type": "object",
"properties": {
"allocation": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"whole_portfolio"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"overlap": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"method": {
"type": "string",
"enum": [
"sum_minimum_constituent_weights"
]
},
"fundCount": {
"type": "integer",
"minimum": 0
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fundA": {
"type": "string"
},
"fundB": {
"type": "string"
},
"isinA": {
"type": [
"string",
"null"
]
},
"isinB": {
"type": [
"string",
"null"
]
},
"overlap": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Sum of the smaller constituent weights in the two funds, not a percentage of the portfolio."
},
"sharedCount": {
"type": "integer",
"minimum": 0
},
"sharedTail": {
"type": [
"object",
"null"
],
"properties": {
"count": {
"type": "integer",
"minimum": 0
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"count",
"weight"
],
"additionalProperties": false,
"description": "Shared constituents beyond the returned list; weight uses the same overlap measure as the headline."
},
"sharedHoldings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"weightInA": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightInB": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"id",
"name",
"weightInA",
"weightInB"
],
"additionalProperties": false
}
}
},
"required": [
"fundA",
"fundB",
"isinA",
"isinB",
"overlap",
"sharedCount",
"sharedTail",
"sharedHoldings"
],
"additionalProperties": false
}
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"fundCount",
"pairs",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"look-through": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"sector": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"provenance": {
"type": "object",
"properties": {
"direct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"viaFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fund": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"shareInFund": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"fund",
"weight",
"shareInFund"
],
"additionalProperties": false
}
}
},
"required": [
"direct",
"viaFunds"
],
"additionalProperties": false
}
},
"required": [
"id",
"isin",
"name",
"weight",
"value",
"sector",
"region",
"provenance"
],
"additionalProperties": false
}
},
"positionCount": {
"type": "integer",
"minimum": 0
},
"unresolvedFundWeight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Whole-portfolio share in undissolved equity fund remainders; these are not named companies."
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"positions",
"positionCount",
"unresolvedFundWeight",
"tailWeight",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"concentration": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"issuers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
}
},
"issuerCount": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"tailWeight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"largestIssuer": {
"type": [
"object",
"null"
],
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
},
"hhi": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1,
"description": "Herfindahl index over the equity issuer book; withheld below 80% coverage."
},
"effectiveN": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Effective issuer count; withheld below 80% coverage."
}
},
"required": [
"scope",
"coverage",
"issuers",
"issuerCount",
"tailWeight",
"largestIssuer",
"hhi",
"effectiveN"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"sectors": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"geography": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"countries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"regions": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"countries",
"regions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"currencies": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"equityExposure": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"heldCurrencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
},
"description": "Resolved listing currencies and caller-stated cash currencies; separate from underlying exposure."
},
"hedgedFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"currency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"currency",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"equityExposure",
"heldCurrencies",
"hedgedFunds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"costs": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"ongoing_fund_charges"
]
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"fundPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightedTer": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "TER fraction on the covered fund portion, not on the entire portfolio. 0.002 means 0.2%."
},
"knownAnnualCost": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Known fund charges in baseCurrency; a subtotal when coverage is incomplete. Null for weight-only input."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0
},
"annualCost": {
"type": [
"number",
"null"
],
"minimum": 0
}
},
"required": [
"isin",
"name",
"weight",
"ter",
"annualCost"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coveredPortfolioWeight",
"fundPortfolioWeight",
"unknownPortfolioWeight",
"weightedTer",
"knownAnnualCost",
"positions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
}
},
"required": [
"allocation",
"overlap",
"look-through",
"concentration",
"sectors",
"geography",
"currencies",
"costs"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"basis",
"totalValue",
"resolvedPortfolioWeight",
"constituentsAsOf",
"holdings",
"analyses",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
},
"after": {
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"basis": {
"type": "string",
"enum": [
"weights",
"values"
]
},
"totalValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"resolvedPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
],
"description": "Oldest known fund-constituent date; null when unavailable. Not the date of all reference data."
},
"holdings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"assetClass": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"enum": [
"resolved",
"unresolved"
]
}
},
"required": [
"isin",
"name",
"weight",
"value",
"assetClass",
"status"
],
"additionalProperties": false
}
},
"analyses": {
"type": "object",
"properties": {
"allocation": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"whole_portfolio"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"overlap": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"method": {
"type": "string",
"enum": [
"sum_minimum_constituent_weights"
]
},
"fundCount": {
"type": "integer",
"minimum": 0
},
"pairs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fundA": {
"type": "string"
},
"fundB": {
"type": "string"
},
"isinA": {
"type": [
"string",
"null"
]
},
"isinB": {
"type": [
"string",
"null"
]
},
"overlap": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Sum of the smaller constituent weights in the two funds, not a percentage of the portfolio."
},
"sharedCount": {
"type": "integer",
"minimum": 0
},
"sharedTail": {
"type": [
"object",
"null"
],
"properties": {
"count": {
"type": "integer",
"minimum": 0
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"count",
"weight"
],
"additionalProperties": false,
"description": "Shared constituents beyond the returned list; weight uses the same overlap measure as the headline."
},
"sharedHoldings": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"weightInA": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightInB": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"id",
"name",
"weightInA",
"weightInB"
],
"additionalProperties": false
}
}
},
"required": [
"fundA",
"fundB",
"isinA",
"isinB",
"overlap",
"sharedCount",
"sharedTail",
"sharedHoldings"
],
"additionalProperties": false
}
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"fundCount",
"pairs",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"look-through": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0
},
"sector": {
"type": [
"string",
"null"
]
},
"region": {
"type": [
"string",
"null"
]
},
"provenance": {
"type": "object",
"properties": {
"direct": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"viaFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"fund": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"shareInFund": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"fund",
"weight",
"shareInFund"
],
"additionalProperties": false
}
}
},
"required": [
"direct",
"viaFunds"
],
"additionalProperties": false
}
},
"required": [
"id",
"isin",
"name",
"weight",
"value",
"sector",
"region",
"provenance"
],
"additionalProperties": false
}
},
"positionCount": {
"type": "integer",
"minimum": 0
},
"unresolvedFundWeight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Whole-portfolio share in undissolved equity fund remainders; these are not named companies."
},
"tailWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"funds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"status": {
"type": "string",
"enum": [
"full",
"partial",
"none"
]
},
"coveredWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"asOf": {
"type": [
"string",
"null"
]
}
},
"required": [
"isin",
"name",
"status",
"coveredWeight",
"asOf"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"positions",
"positionCount",
"unresolvedFundWeight",
"tailWeight",
"funds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"concentration": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"issuers": {
"type": "array",
"items": {
"type": "object",
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
}
},
"issuerCount": {
"type": [
"integer",
"null"
],
"minimum": 0
},
"tailWeight": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"largestIssuer": {
"type": [
"object",
"null"
],
"properties": {
"issuerId": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"issuerId",
"name",
"weight"
],
"additionalProperties": false
},
"hhi": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1,
"description": "Herfindahl index over the equity issuer book; withheld below 80% coverage."
},
"effectiveN": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Effective issuer count; withheld below 80% coverage."
}
},
"required": [
"scope",
"coverage",
"issuers",
"issuerCount",
"tailWeight",
"largestIssuer",
"hhi",
"effectiveN"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"sectors": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"geography": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"countries": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"regions": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
}
},
"required": [
"countries",
"regions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"currencies": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"equityExposure": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"enum": [
"equities"
]
},
"portfolioShare": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Equity share of the entire submitted portfolio that this dimension evaluates."
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Classified share of this dimension's equity population."
},
"buckets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"portfolioShare",
"coverage",
"buckets"
],
"additionalProperties": false
},
"heldCurrencies": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "Share of the entire submitted portfolio, including unresolved holdings in the denominator."
},
"value": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Amount in baseCurrency; null for weight-only requests."
}
},
"required": [
"key",
"weight",
"value"
],
"additionalProperties": false
},
"description": "Resolved listing currencies and caller-stated cash currencies; separate from underlying exposure."
},
"hedgedFunds": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
]
},
"name": {
"type": "string"
},
"currency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"currency",
"weight"
],
"additionalProperties": false
}
}
},
"required": [
"equityExposure",
"heldCurrencies",
"hedgedFunds"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"costs": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable",
"not_requested"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"scope": {
"type": "string",
"enum": [
"ongoing_fund_charges"
]
},
"coveredPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"fundPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"unknownPortfolioWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"weightedTer": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "TER fraction on the covered fund portion, not on the entire portfolio. 0.002 means 0.2%."
},
"knownAnnualCost": {
"type": [
"number",
"null"
],
"minimum": 0,
"description": "Known fund charges in baseCurrency; a subtotal when coverage is incomplete. Null for weight-only input."
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string"
},
"name": {
"type": "string"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0
},
"annualCost": {
"type": [
"number",
"null"
],
"minimum": 0
}
},
"required": [
"isin",
"name",
"weight",
"ter",
"annualCost"
],
"additionalProperties": false
}
}
},
"required": [
"scope",
"coveredPortfolioWeight",
"fundPortfolioWeight",
"unknownPortfolioWeight",
"weightedTer",
"knownAnnualCost",
"positions"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
}
},
"required": [
"allocation",
"overlap",
"look-through",
"concentration",
"sectors",
"geography",
"currencies",
"costs"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"basis",
"totalValue",
"resolvedPortfolioWeight",
"constituentsAsOf",
"holdings",
"analyses",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
},
"deltas": {
"type": "object",
"properties": {
"allocation": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"sectors": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"countries": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"currencyExposure": {
"type": [
"array",
"null"
],
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"before": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"after": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"delta": {
"type": "number",
"minimum": -1,
"maximum": 1
}
},
"required": [
"key",
"before",
"after",
"delta"
],
"additionalProperties": false
}
},
"hhi": {
"type": [
"number",
"null"
]
},
"effectiveN": {
"type": [
"number",
"null"
]
},
"weightedTer": {
"type": [
"number",
"null"
]
},
"knownAnnualCost": {
"type": [
"number",
"null"
]
}
},
"required": [
"allocation",
"sectors",
"countries",
"currencyExposure",
"hhi",
"effectiveN",
"weightedTer",
"knownAnnualCost"
],
"additionalProperties": false
}
},
"required": [
"before",
"after",
"deltas"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/contribution-plan
Розрахунок та обмеження →{
"portfolio": {
"basis": "values",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"value": 6000
},
{
"assetClass": "cash",
"currency": "EUR",
"value": 4000
}
]
},
"targets": [
{
"assetClass": "equities",
"weight": 0.8
},
{
"assetClass": "cash",
"weight": 0.2
}
],
"contribution": 1000,
"minimumAllocation": 0
}{
"type": "object",
"properties": {
"portfolio": {
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
},
"targets": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"equities",
"bonds",
"cash",
"gold",
"crypto",
"real_estate",
"commodities",
"alternatives"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"assetClass",
"weight"
],
"additionalProperties": false
},
"minItems": 1,
"maxItems": 8
},
"contribution": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"description": "One new contribution, in the portfolio's baseCurrency, in whole cents."
},
"minimumAllocation": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0
}
},
"required": [
"portfolio",
"targets",
"contribution"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"contribution-plan"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"method": {
"type": "string",
"enum": [
"proportional_underweight_gaps"
]
},
"contribution": {
"type": "number",
"minimum": 0
},
"allocatedAmount": {
"type": "number",
"minimum": 0
},
"unallocatedAmount": {
"type": "number",
"minimum": 0
},
"before": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"equities",
"bonds",
"cash",
"gold",
"crypto",
"real_estate",
"commodities",
"alternatives"
]
},
"currentWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"targetWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"deviation": {
"type": "number",
"minimum": -1,
"maximum": 1
},
"value": {
"type": "number",
"minimum": 0
}
},
"required": [
"assetClass",
"currentWeight",
"targetWeight",
"deviation",
"value"
],
"additionalProperties": false
}
},
"after": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"equities",
"bonds",
"cash",
"gold",
"crypto",
"real_estate",
"commodities",
"alternatives"
]
},
"currentWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"targetWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"deviation": {
"type": "number",
"minimum": -1,
"maximum": 1
},
"value": {
"type": "number",
"minimum": 0
}
},
"required": [
"assetClass",
"currentWeight",
"targetWeight",
"deviation",
"value"
],
"additionalProperties": false
}
},
"allocations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"equities",
"bonds",
"cash",
"gold",
"crypto",
"real_estate",
"commodities",
"alternatives"
]
},
"amount": {
"type": "number",
"minimum": 0
}
},
"required": [
"assetClass",
"amount"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"contribution",
"allocatedAmount",
"unallocatedAmount",
"before",
"after",
"allocations"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"method": {
"type": "string",
"enum": [
"proportional_underweight_gaps"
]
},
"contribution": {
"type": "number",
"minimum": 0
},
"allocatedAmount": {
"type": "number",
"minimum": 0
},
"unallocatedAmount": {
"type": "number",
"minimum": 0
},
"before": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"equities",
"bonds",
"cash",
"gold",
"crypto",
"real_estate",
"commodities",
"alternatives"
]
},
"currentWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"targetWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"deviation": {
"type": "number",
"minimum": -1,
"maximum": 1
},
"value": {
"type": "number",
"minimum": 0
}
},
"required": [
"assetClass",
"currentWeight",
"targetWeight",
"deviation",
"value"
],
"additionalProperties": false
}
},
"after": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"equities",
"bonds",
"cash",
"gold",
"crypto",
"real_estate",
"commodities",
"alternatives"
]
},
"currentWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"targetWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"deviation": {
"type": "number",
"minimum": -1,
"maximum": 1
},
"value": {
"type": "number",
"minimum": 0
}
},
"required": [
"assetClass",
"currentWeight",
"targetWeight",
"deviation",
"value"
],
"additionalProperties": false
}
},
"allocations": {
"type": "array",
"items": {
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"equities",
"bonds",
"cash",
"gold",
"crypto",
"real_estate",
"commodities",
"alternatives"
]
},
"amount": {
"type": "number",
"minimum": 0
}
},
"required": [
"assetClass",
"amount"
],
"additionalProperties": false
}
}
},
"required": [
"method",
"contribution",
"allocatedAmount",
"unallocatedAmount",
"before",
"after",
"allocations"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/etf-alternatives
Розрахунок та обмеження →{
"isin": "IE00B4L5Y983",
"candidateIsins": [
"IE00BK5BQT80"
],
"baseCurrency": "EUR",
"limit": 5
}{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"candidateIsins": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"minItems": 1,
"maxItems": 10,
"description": "Explicit candidate universe. When omitted, a bounded shared alternatives catalog of every listing venue is read; it may have no entries for this listing."
},
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 10,
"default": 5
}
},
"required": [
"isin"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"etf-alternatives"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"model": {
"type": "string",
"enum": [
"half_holdings_quarter_sector_quarter_country"
]
},
"candidateSource": {
"type": "string",
"enum": [
"caller",
"shared_catalog"
]
},
"catalogAsOf": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"source": {
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"name": {
"type": "string"
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
},
"holdingsCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"sectorCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"countryCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"ter",
"constituentsAsOf",
"holdingsCoverage",
"sectorCoverage",
"countryCoverage"
],
"additionalProperties": false
},
"candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"name": {
"type": "string"
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
},
"holdingsCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"sectorCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"countryCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"status": {
"type": "string",
"enum": [
"ok",
"unavailable"
]
},
"reason": {
"type": [
"string",
"null"
],
"enum": [
"unresolved",
"not_equity_fund",
"missing_cost",
"incomplete_holdings",
"incomplete_vectors",
"provider_unavailable",
null
]
},
"holdingOverlap": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"sectorCosine": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"countryCosine": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"similarityScore": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"terSaving": {
"type": [
"number",
"null"
]
},
"qualifies": {
"type": "boolean"
}
},
"required": [
"isin",
"name",
"ter",
"constituentsAsOf",
"holdingsCoverage",
"sectorCoverage",
"countryCoverage",
"status",
"reason",
"holdingOverlap",
"sectorCosine",
"countryCosine",
"similarityScore",
"terSaving",
"qualifies"
],
"additionalProperties": false
},
"maxItems": 10
},
"matches": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
}
},
"omittedMatches": {
"type": "integer",
"minimum": 0
},
"failure": {
"type": [
"string",
"null"
],
"enum": [
"catalog_empty",
"catalog_unavailable",
"source_unavailable",
null
]
}
},
"required": [
"model",
"candidateSource",
"catalogAsOf",
"source",
"candidates",
"matches",
"omittedMatches",
"failure"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"model": {
"type": "string",
"enum": [
"half_holdings_quarter_sector_quarter_country"
]
},
"candidateSource": {
"type": "string",
"enum": [
"caller",
"shared_catalog"
]
},
"catalogAsOf": {
"type": [
"string",
"null"
],
"format": "date-time"
},
"source": {
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"name": {
"type": "string"
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
},
"holdingsCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"sectorCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"countryCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
}
},
"required": [
"isin",
"name",
"ter",
"constituentsAsOf",
"holdingsCoverage",
"sectorCoverage",
"countryCoverage"
],
"additionalProperties": false
},
"candidates": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"name": {
"type": "string"
},
"ter": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"constituentsAsOf": {
"type": [
"string",
"null"
]
},
"holdingsCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"sectorCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"countryCoverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"status": {
"type": "string",
"enum": [
"ok",
"unavailable"
]
},
"reason": {
"type": [
"string",
"null"
],
"enum": [
"unresolved",
"not_equity_fund",
"missing_cost",
"incomplete_holdings",
"incomplete_vectors",
"provider_unavailable",
null
]
},
"holdingOverlap": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"sectorCosine": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"countryCosine": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"similarityScore": {
"type": [
"number",
"null"
],
"minimum": 0,
"maximum": 1
},
"terSaving": {
"type": [
"number",
"null"
]
},
"qualifies": {
"type": "boolean"
}
},
"required": [
"isin",
"name",
"ter",
"constituentsAsOf",
"holdingsCoverage",
"sectorCoverage",
"countryCoverage",
"status",
"reason",
"holdingOverlap",
"sectorCosine",
"countryCosine",
"similarityScore",
"terSaving",
"qualifies"
],
"additionalProperties": false
},
"maxItems": 10
},
"matches": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
}
},
"omittedMatches": {
"type": "integer",
"minimum": 0
},
"failure": {
"type": [
"string",
"null"
],
"enum": [
"catalog_empty",
"catalog_unavailable",
"source_unavailable",
null
]
}
},
"required": [
"model",
"candidateSource",
"catalogAsOf",
"source",
"candidates",
"matches",
"omittedMatches",
"failure"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/stress-scenarios
Розрахунок та обмеження →[
{
"key": "gfc_2008",
"name": {
"de": "Finanzkrise 2008",
"en": "Global Financial Crisis 2008"
},
"dateFrom": "2007-10-09",
"dateTo": "2009-03-09",
"approximate": true,
"provenance": {
"approximate": true,
"methodology": "Headline −0.57 is the S&P 500 peak-to-trough (2007-10-09 close 1565.15 → 2009-03-09 close 676.53, ≈ −56.8%). Sector shocks are rounded approximations of MSCI/GICS sector index peak-to-trough over the same window; asset-class and currency shocks are rounded directional approximations from published cross-asset and FX moves. Not a backtest of the user's holdings.",
"sources": [
"S&P 500 index, peak 2007-10-09 → trough 2009-03-09 (≈ −56.8%) — https://www.spglobal.com/spdji/en/indices/equity/sp-500/",
"MSCI World / GICS sector indices, 2007–2009 drawdown — https://www.msci.com/end-of-day-data-search",
"NBER US recession dating, Dec 2007 – Jun 2009 — https://www.nber.org/research/business-cycle-dating"
],
"reviewedAt": "2026-05-31"
}
},
{
"key": "covid_2020",
"name": {
"de": "COVID-19 Crash 2020",
"en": "COVID-19 Crash 2020"
},
"dateFrom": "2020-02-19",
"dateTo": "2020-03-23",
"approximate": true,
"provenance": {
"approximate": true,
"methodology": "Headline −0.34 is the S&P 500 peak-to-trough (2020-02-19 close 3386.15 → 2020-03-23 close 2237.40, ≈ −33.9%). Sector shocks are rounded approximations of the GICS sector index drops over the same five-week window (Energy worst on the oil-price collapse); asset-class and currency shocks are rounded directional approximations. Not a backtest of the user's holdings.",
"sources": [
"S&P 500 index, peak 2020-02-19 → trough 2020-03-23 (≈ −33.9%) — https://www.spglobal.com/spdji/en/indices/equity/sp-500/",
"S&P 500 GICS sector total returns, Feb–Mar 2020 — https://www.spglobal.com/spdji/en/index-family/equity/us-equity/sp-sectors/",
"WTI crude collapse, Mar 2020 (Energy sector driver) — https://www.eia.gov/dnav/pet/hist/RWTCD.htm"
],
"reviewedAt": "2026-05-31"
}
},
{
"key": "rate_hike_2022",
"name": {
"de": "Zinsschock 2022",
"en": "Rate Hike Shock 2022"
},
"dateFrom": "2022-01-03",
"dateTo": "2022-10-12",
"approximate": true,
"provenance": {
"approximate": true,
"methodology": "Headline −0.25 is the S&P 500 peak-to-trough (2022-01-03 close 4796.56 → 2022-10-12 close 3577.03, ≈ −25.4%). Sector shocks are rounded approximations reflecting the rate-shock dispersion (long-duration Technology/Communication worst, Energy positive); bonds −0.15 approximates the Bloomberg US Aggregate's record 2022 drawdown; FX shocks approximate the EUR/USD slide below parity. Not a backtest of the user's holdings.",
"sources": [
"S&P 500 index, peak 2022-01-03 → trough 2022-10-12 (≈ −25.4%) — https://www.spglobal.com/spdji/en/indices/equity/sp-500/",
"Bloomberg US Aggregate Bond Index 2022 total return ≈ −13% (worst on record) — https://www.bloomberg.com/markets/rates-bonds",
"EUR/USD fell below parity, Sep 2022 — https://www.ecb.europa.eu/stats/policy_and_exchange_rates/euro_reference_exchange_rates/html/eurofxref-graph-usd.en.html"
],
"reviewedAt": "2026-05-31"
}
},
{
"key": "euro_crisis_2011",
"name": {
"de": "Eurokrise 2011",
"en": "European Debt Crisis 2011"
},
"dateFrom": "2011-05-02",
"dateTo": "2011-10-04",
"approximate": true,
"provenance": {
"approximate": true,
"methodology": "Headline −0.22 approximates the broad European equity peak-to-trough over the 2011 sovereign-debt sell-off (EURO STOXX 50 ≈ −28% intra-year; S&P 500 ≈ −19% 2011-05-02→2011-10-04). Financials worst on bank/sovereign contagion; CHF strongly positive (safe-haven, pre-SNB-floor). Asset-class and currency shocks are rounded directional approximations. Not a backtest of the user's holdings.",
"sources": [
"EURO STOXX 50 index, 2011 drawdown — https://www.stoxx.com/index-details?symbol=SX5E",
"S&P 500 index, peak 2011-05-02 → trough 2011-10-04 (≈ −19%) — https://www.spglobal.com/spdji/en/indices/equity/sp-500/",
"SNB EUR/CHF 1.20 floor announced 2011-09-06 (CHF safe-haven strength) — https://www.snb.ch/en/mmr/reference/pre_20110906/source/pre_20110906.en.pdf"
],
"reviewedAt": "2026-05-31"
}
},
{
"key": "dotcom_2000",
"name": {
"de": "Dotcom-Blase 2000",
"en": "Dotcom Bubble 2000"
},
"dateFrom": "2000-03-10",
"dateTo": "2002-10-09",
"approximate": true,
"provenance": {
"approximate": true,
"methodology": "Headline −0.49 is the S&P 500 peak-to-trough (2000-03-24 close 1527.46 → 2002-10-09 close 776.76, ≈ −49.1%). Technology −0.78 approximates the NASDAQ Composite's ≈ −78% collapse (5048.62 → 1114.11); other sector shocks are rounded approximations of the dispersion over the bubble unwind. Slowest recovery in the catalog. Not a backtest of the user's holdings.",
"sources": [
"S&P 500 index, peak 2000-03-24 → trough 2002-10-09 (≈ −49%) — https://www.spglobal.com/spdji/en/indices/equity/sp-500/",
"NASDAQ Composite, peak 2000-03-10 5048.62 → trough 2002-10-09 1114.11 (≈ −78%) — https://www.nasdaq.com/market-activity/index/comp"
],
"reviewedAt": "2026-05-31"
}
}
]{
"portfolio": {
"basis": "weights",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"weight": 0.6
},
{
"isin": "IE00B3XXRP09",
"weight": 0.3
},
{
"assetClass": "cash",
"currency": "EUR",
"weight": 0.1
}
],
"locale": "en"
},
"scenarioKeys": [
"gfc_2008",
"covid_2020",
"rate_hike_2022"
]
}{
"type": "object",
"properties": {
"portfolio": {
"anyOf": [
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"weights"
],
"default": "weights"
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"isin",
"weight"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"assetClass",
"currency",
"weight"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"holdings"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
}
]
},
"scenarioKeys": {
"type": "array",
"items": {
"type": "string",
"enum": [
"gfc_2008",
"covid_2020",
"rate_hike_2022",
"euro_crisis_2011",
"dotcom_2000"
]
},
"minItems": 1,
"maxItems": 5
}
},
"required": [
"portfolio",
"scenarioKeys"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"stress-scenarios"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"model": {
"type": "string",
"enum": [
"approximate_sector_asset_class_and_listing_currency_shocks"
]
},
"scenarios": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"gfc_2008",
"covid_2020",
"rate_hike_2022",
"euro_crisis_2011",
"dotcom_2000"
]
},
"name": {
"type": "string"
},
"dateFrom": {
"type": "string",
"format": "date"
},
"dateTo": {
"type": "string",
"format": "date"
},
"status": {
"type": "string",
"enum": [
"ok",
"unavailable"
]
},
"failure": {
"type": [
"string",
"null"
],
"enum": [
"unresolved_holdings",
"unsupported_base_currency",
"missing_currency",
"missing_scenario_coverage",
null
]
},
"returnFraction": {
"type": [
"number",
"null"
]
},
"preValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"postValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"change": {
"type": [
"number",
"null"
]
},
"approximate": {
"type": "boolean",
"enum": [
true
]
},
"methodology": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Source descriptions including URLs, preserved from the maintained scenario registry."
},
"reviewedAt": {
"type": [
"string",
"null"
],
"format": "date"
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
],
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"cashCurrency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"assetClass": {
"type": "string"
},
"returnFraction": {
"type": "number"
},
"fxShockApplied": {
"type": "number"
},
"method": {
"type": "string",
"enum": [
"sector_proxy",
"asset_class_proxy"
]
},
"preValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"postValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"change": {
"type": [
"number",
"null"
]
}
},
"required": [
"isin",
"cashCurrency",
"weight",
"assetClass",
"returnFraction",
"fxShockApplied",
"method",
"preValue",
"postValue",
"change"
],
"additionalProperties": false
}
}
},
"required": [
"key",
"name",
"dateFrom",
"dateTo",
"status",
"failure",
"returnFraction",
"preValue",
"postValue",
"change",
"approximate",
"methodology",
"sources",
"reviewedAt",
"positions"
],
"additionalProperties": false
}
}
},
"required": [
"model",
"scenarios"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"model": {
"type": "string",
"enum": [
"approximate_sector_asset_class_and_listing_currency_shocks"
]
},
"scenarios": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string",
"enum": [
"gfc_2008",
"covid_2020",
"rate_hike_2022",
"euro_crisis_2011",
"dotcom_2000"
]
},
"name": {
"type": "string"
},
"dateFrom": {
"type": "string",
"format": "date"
},
"dateTo": {
"type": "string",
"format": "date"
},
"status": {
"type": "string",
"enum": [
"ok",
"unavailable"
]
},
"failure": {
"type": [
"string",
"null"
],
"enum": [
"unresolved_holdings",
"unsupported_base_currency",
"missing_currency",
"missing_scenario_coverage",
null
]
},
"returnFraction": {
"type": [
"number",
"null"
]
},
"preValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"postValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"change": {
"type": [
"number",
"null"
]
},
"approximate": {
"type": "boolean",
"enum": [
true
]
},
"methodology": {
"type": "string"
},
"sources": {
"type": "array",
"items": {
"type": "string"
},
"description": "Source descriptions including URLs, preserved from the maintained scenario registry."
},
"reviewedAt": {
"type": [
"string",
"null"
],
"format": "date"
},
"positions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"isin": {
"type": [
"string",
"null"
],
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"cashCurrency": {
"type": [
"string",
"null"
]
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"assetClass": {
"type": "string"
},
"returnFraction": {
"type": "number"
},
"fxShockApplied": {
"type": "number"
},
"method": {
"type": "string",
"enum": [
"sector_proxy",
"asset_class_proxy"
]
},
"preValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"postValue": {
"type": [
"number",
"null"
],
"minimum": 0
},
"change": {
"type": [
"number",
"null"
]
}
},
"required": [
"isin",
"cashCurrency",
"weight",
"assetClass",
"returnFraction",
"fxShockApplied",
"method",
"preValue",
"postValue",
"change"
],
"additionalProperties": false
}
}
},
"required": [
"key",
"name",
"dateFrom",
"dateTo",
"status",
"failure",
"returnFraction",
"preValue",
"postValue",
"change",
"approximate",
"methodology",
"sources",
"reviewedAt",
"positions"
],
"additionalProperties": false
}
}
},
"required": [
"model",
"scenarios"
],
"additionalProperties": false
}POST /api/v1/public/portfolio-analysis/historical-replay
Розрахунок та обмеження →{
"portfolio": {
"basis": "weights",
"baseCurrency": "EUR",
"holdings": [
{
"isin": "IE00B4L5Y983",
"weight": 0.6
},
{
"isin": "IE00B3XXRP09",
"weight": 0.3
},
{
"assetClass": "cash",
"currency": "EUR",
"weight": 0.1
}
],
"locale": "en"
},
"startDate": "2021-01-04",
"endDate": "2025-12-31",
"initialValue": 10000,
"monthlyContribution": 100,
"rebalancing": "annual"
}{
"type": "object",
"properties": {
"portfolio": {
"anyOf": [
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"weights"
],
"default": "weights"
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"isin",
"weight"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"exclusiveMinimum": 0,
"description": "Share of the entire submitted portfolio: 0.6 means 60%."
}
},
"required": [
"assetClass",
"currency",
"weight"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"holdings"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"baseCurrency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$",
"default": "EUR"
},
"locale": {
"type": "string",
"enum": [
"de",
"en",
"es",
"it",
"fr",
"nl",
"cs",
"pl",
"ru",
"uk"
],
"default": "en"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 50,
"description": "Maximum returned companies and underlying positions; tails retain omitted weight."
},
"basis": {
"type": "string",
"enum": [
"values"
]
},
"holdings": {
"type": "array",
"items": {
"anyOf": [
{
"type": "object",
"properties": {
"isin": {
"type": "string",
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"isin",
"value"
],
"additionalProperties": false
},
{
"type": "object",
"properties": {
"assetClass": {
"type": "string",
"enum": [
"cash"
]
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$"
},
"value": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Market value already converted to baseCurrency. Never a native-currency amount."
}
},
"required": [
"assetClass",
"currency",
"value"
],
"additionalProperties": false
}
]
},
"minItems": 1,
"maxItems": 25
}
},
"required": [
"basis",
"holdings"
],
"additionalProperties": false
}
]
},
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
},
"initialValue": {
"type": "number",
"minimum": 0,
"exclusiveMinimum": 0,
"maximum": 100000000,
"description": "Explicit hypothetical initial investment in baseCurrency, independent of current portfolio values."
},
"monthlyContribution": {
"type": "number",
"minimum": 0,
"maximum": 100000000,
"default": 0,
"description": "Invested on day zero and monthly anniversaries, at the first available trading day at or after each anniversary."
},
"rebalancing": {
"type": "string",
"enum": [
"none",
"annual",
"quarterly"
],
"default": "none"
}
},
"required": [
"portfolio",
"startDate",
"endDate",
"initialValue"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"modelVersion": {
"type": "string"
},
"computedAt": {
"type": "string",
"format": "date-time"
},
"baseCurrency": {
"type": "string"
},
"capability": {
"type": "string",
"enum": [
"historical-replay"
]
},
"analysis": {
"type": "object",
"properties": {
"status": {
"type": "string",
"enum": [
"ok",
"partial",
"unavailable"
]
},
"reasons": {
"type": "array",
"items": {
"type": "string",
"enum": [
"unresolved_holdings",
"provider_unavailable",
"incomplete_coverage",
"no_equities",
"fewer_than_two_funds"
]
}
},
"data": {
"type": [
"object",
"null"
],
"properties": {
"model": {
"type": "string",
"enum": [
"historical_current_mix_with_hypothetical_contributions"
]
},
"requestedStart": {
"type": "string",
"format": "date"
},
"requestedEnd": {
"type": "string",
"format": "date"
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"failure": {
"type": [
"string",
"null"
],
"enum": [
"future_window",
"incomplete_portfolio",
"insufficient_history",
null
]
},
"legs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
],
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"status": {
"type": "string",
"enum": [
"included",
"unavailable"
]
},
"reason": {
"type": [
"string",
"null"
],
"enum": [
"unresolved",
"missing_currency",
"missing_history",
"missing_fx",
"insufficient_history",
"stale_history",
"invalid_history",
"provider_unavailable",
null
]
},
"basis": {
"type": [
"string",
"null"
],
"enum": [
"total",
"price",
"nominal_cash",
null
]
},
"quoteCurrency": {
"type": [
"string",
"null"
]
},
"firstDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"lastDate": {
"type": [
"string",
"null"
],
"format": "date"
}
},
"required": [
"key",
"isin",
"weight",
"status",
"reason",
"basis",
"quoteCurrency",
"firstDate",
"lastDate"
],
"additionalProperties": false
}
},
"replay": {
"type": [
"object",
"null"
],
"properties": {
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
},
"mixTotalReturn": {
"type": "number"
},
"mixCagr": {
"type": [
"number",
"null"
]
},
"maxDrawdown": {
"type": "number"
},
"peakDate": {
"type": "string",
"format": "date"
},
"maxDrawdownDate": {
"type": "string",
"format": "date"
},
"recoveryDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"totalContributed": {
"type": "number",
"minimum": 0
},
"endingValue": {
"type": "number",
"minimum": 0
},
"contributionTotalReturn": {
"type": "number"
},
"annualizedReturn": {
"type": [
"number",
"null"
]
},
"resetCount": {
"type": "integer",
"minimum": 0
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date"
},
"value": {
"type": "number",
"minimum": 0
}
},
"required": [
"date",
"value"
],
"additionalProperties": false
},
"maxItems": 3700
},
"attribution": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"startWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"endWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"legReturn": {
"type": "number"
},
"contributionToReturn": {
"type": "number"
}
},
"required": [
"key",
"startWeight",
"endWeight",
"legReturn",
"contributionToReturn"
],
"additionalProperties": false
}
}
},
"required": [
"startDate",
"endDate",
"mixTotalReturn",
"mixCagr",
"maxDrawdown",
"peakDate",
"maxDrawdownDate",
"recoveryDate",
"totalContributed",
"endingValue",
"contributionTotalReturn",
"annualizedReturn",
"resetCount",
"series",
"attribution"
],
"additionalProperties": false
}
},
"required": [
"model",
"requestedStart",
"requestedEnd",
"coverage",
"failure",
"legs",
"replay"
],
"additionalProperties": false
}
},
"required": [
"status",
"reasons",
"data"
],
"additionalProperties": false
},
"assumptions": {
"type": "array",
"items": {
"type": "string"
}
},
"limitations": {
"type": "array",
"items": {
"type": "string"
}
},
"links": {
"type": "object",
"properties": {
"documentation": {
"type": "string",
"format": "uri"
},
"catalog": {
"type": "string",
"format": "uri"
}
},
"required": [
"documentation",
"catalog"
],
"additionalProperties": false
}
},
"required": [
"modelVersion",
"computedAt",
"baseCurrency",
"capability",
"analysis",
"assumptions",
"limitations",
"links"
],
"additionalProperties": false
}{
"type": "object",
"properties": {
"model": {
"type": "string",
"enum": [
"historical_current_mix_with_hypothetical_contributions"
]
},
"requestedStart": {
"type": "string",
"format": "date"
},
"requestedEnd": {
"type": "string",
"format": "date"
},
"coverage": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"failure": {
"type": [
"string",
"null"
],
"enum": [
"future_window",
"incomplete_portfolio",
"insufficient_history",
null
]
},
"legs": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"isin": {
"type": [
"string",
"null"
],
"pattern": "^[A-Z]{2}[A-Z0-9]{9}[0-9]$"
},
"weight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"status": {
"type": "string",
"enum": [
"included",
"unavailable"
]
},
"reason": {
"type": [
"string",
"null"
],
"enum": [
"unresolved",
"missing_currency",
"missing_history",
"missing_fx",
"insufficient_history",
"stale_history",
"invalid_history",
"provider_unavailable",
null
]
},
"basis": {
"type": [
"string",
"null"
],
"enum": [
"total",
"price",
"nominal_cash",
null
]
},
"quoteCurrency": {
"type": [
"string",
"null"
]
},
"firstDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"lastDate": {
"type": [
"string",
"null"
],
"format": "date"
}
},
"required": [
"key",
"isin",
"weight",
"status",
"reason",
"basis",
"quoteCurrency",
"firstDate",
"lastDate"
],
"additionalProperties": false
}
},
"replay": {
"type": [
"object",
"null"
],
"properties": {
"startDate": {
"type": "string",
"format": "date"
},
"endDate": {
"type": "string",
"format": "date"
},
"mixTotalReturn": {
"type": "number"
},
"mixCagr": {
"type": [
"number",
"null"
]
},
"maxDrawdown": {
"type": "number"
},
"peakDate": {
"type": "string",
"format": "date"
},
"maxDrawdownDate": {
"type": "string",
"format": "date"
},
"recoveryDate": {
"type": [
"string",
"null"
],
"format": "date"
},
"totalContributed": {
"type": "number",
"minimum": 0
},
"endingValue": {
"type": "number",
"minimum": 0
},
"contributionTotalReturn": {
"type": "number"
},
"annualizedReturn": {
"type": [
"number",
"null"
]
},
"resetCount": {
"type": "integer",
"minimum": 0
},
"series": {
"type": "array",
"items": {
"type": "object",
"properties": {
"date": {
"type": "string",
"format": "date"
},
"value": {
"type": "number",
"minimum": 0
}
},
"required": [
"date",
"value"
],
"additionalProperties": false
},
"maxItems": 3700
},
"attribution": {
"type": "array",
"items": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"startWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"endWeight": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"legReturn": {
"type": "number"
},
"contributionToReturn": {
"type": "number"
}
},
"required": [
"key",
"startWeight",
"endWeight",
"legReturn",
"contributionToReturn"
],
"additionalProperties": false
}
}
},
"required": [
"startDate",
"endDate",
"mixTotalReturn",
"mixCagr",
"maxDrawdown",
"peakDate",
"maxDrawdownDate",
"recoveryDate",
"totalContributed",
"endingValue",
"contributionTotalReturn",
"annualizedReturn",
"resetCount",
"series",
"attribution"
],
"additionalProperties": false
}
},
"required": [
"model",
"requestedStart",
"requestedEnd",
"coverage",
"failure",
"legs",
"replay"
],
"additionalProperties": false
}Вибирайте калькулятор за запитанням. Прочитайте схеми введення й результату, уточніть суттєві відсутні припущення та поверніть результат з обмеженнями й посиланням на сценарій.
Прочитати посібник агента в Markdown (англійською) →Оцінити німецький податок на доходи від капіталу, продаж акцій або прибуток фондів акцій.
Перетворити дивіденд до податків на чистий дохід із необов’язковими припущеннями про утримання за країною.
Оцінити авансовий податок на одну позицію фонду, утримувану повний рік.
Порівняти змодельований капітал накопичувальних і розподільчих фондів.
Розподілити річний неоподатковуваний ліміт заощадника між рядками брокерів, не більш як шістьма.
Розрахувати сценарій регулярних вкладень в ETF із необов’язковим змодельованим податковим вилученням.
Визначити розмір резервного фонду й змоделювати час накопичення.
Оцінити початкові власні кошти для нерухомості, витрати купівлі та строк накопичення.
Оцінити розрив державної пенсії Німеччини й накопичення для його покриття.
Змоделювати зняття з портфеля, податок і вичерпання в межах горизонту моделі.
Оцінити податок на дарування або розподілити подарунки за вікнами неоподатковуваних лімітів без попередніх подарунків.
Розрахувати сценарій дитячого інвестиційного рахунку з модельованими опціями Kindergeld і NV.
Оцінити цілі Regular, Coast або Barista FIRE у сьогоднішніх євро.
Схеми результату описують одиниці й null за кожним полем. Null не означає нуль євро. asOf є датою відліку, а не податковим роком. Розкривайте припущену дохідність і розглядайте її як припущення, а не прогноз.
POST /compare запускає від двох до десяти незалежних сценаріїв одного калькулятора зі спільною датою відліку й мовою. Кожне введення використовує власні значення за замовчуванням і перевірку; сценарії не успадковують значень одне одного. Унікальні ids і порядок запиту зберігаються. Кожен успішний сценарій включає власне посилання на браузер.
{
"calculator": "etf-sparplan",
"asOf": "2026-10-15",
"locale": "uk",
"scenarios": [
{
"id": "monthly-300",
"inputs": {
"monthly_rate": 300,
"annual_return": 6,
"annual_increase": 0,
"years": 20
}
},
{
"id": "monthly-500",
"inputs": {
"monthly_rate": 500,
"annual_return": 6,
"annual_increase": 0,
"years": 20
}
},
{
"id": "monthly-700",
"inputs": {
"monthly_rate": 700,
"annual_return": 6,
"annual_increase": 0,
"years": 20
}
}
]
}Перевірте data.summary і кожен запис data.scenarios. HTTP 200 може включати окремі помилки введення: успішні записи містять data й error: null; неуспішні містять data: null та error. Хибна структура запиту повертає HTTP 400; непередбачена помилка моделі HTTP 500. Кожен сценарій витрачає одну одиницю спільного ліміту частоти.
Прості параметри, наприклад monthly_rate=500&years=20, одразу завантажують калькулятор. Податкові профілі використовують taxProfile.filing_status=joint; brokers є масивом JSON. Для відсутніх полів застосовуються значення за замовчуванням. Щоб зберегти повний сценарій, використовуйте отримане посилання або кнопку копіювання калькулятора, що включає подальші зміни.
Відкрити приклад сценарію →asOf і modelVersion зберігають контекст. Старі посилання з JSON сценарію продовжують працювати; не змішуйте формати. Скопійовані й отримані посилання містять вихідні значення. Діліться лише тим, що можна бачити одержувачу.
Використовуйте data.links.calculator точно в отриманому вигляді. Посилання зберігає перевірені вихідні дані, версію моделі й дату відліку в читабельних параметрах запиту. Старі посилання з JSON сценарію підтримуються. Калькулятор за посиланням завантажує ці дані й залишається редагованим. Не відновлюйте параметр за неповними даними.
Відкрити калькулятор →Посилання зберігають вихідні дані, а не старі виконувані моделі. Сторінка показує повідомлення, якщо збережена версія моделі відрізняється від поточної. Для історичного запису зберігайте отриманий результат і modelVersion.
Посилання на сценарії містять вихідні значення в URL. Діліться лише тим, що можна бачити одержувачу; використовуйте загальні назви брокерів. Запити не читають і не зберігають даних облікового запису, а відповіді розрахунків використовують Cache-Control: no-store. URL усе ж можуть потрапляти до історії браузера або журналів інфраструктури.
60 одиниць на IP клієнта за хвилину сумарно для каталогу, схем і розрахунків. Звичайний запит коштує одну одиницю; порівняння по одній за сценарій (від двох до десяти сценаріїв). Дотримуйтеся Retry-After у секундах. За недоступності Redis обмеження частоти діє за можливості. Тіло запиту JSON обмежене 16 KiB. Міждоменні запити підтримуються без облікових даних; у браузерних клієнтах використовуйте credentials: omit.
Німецькі податкові параметри є припущеннями моделі, а не повною податковою декларацією. Багаторічні сценарії зберігають поточні параметри незмінними й щороку поновлюють установлений законом неоподатковуваний ліміт. Vorabpauschale API v1 охоплює одну позицію, утримувану повний рік. Планування дарування потребує відсутності попередніх подарунків. Режим Kindergeld використовує фіксовану щомісячну допомогу моделі замість monthlyContribution. Читайте припущення й обмеження, що повертаються кожним розрахунком.
Для FIRE yearsToFire: null означає, що цілі не досягнуто в межах горизонту моделі. Для зняттів yearsUntilDepletion: null означає відсутність вичерпання у змодельованому горизонті; це не доводить довічності зняттів. Для цілей накопичення перевіряйте targetUnreachable і deficit: нуль місяців за нульової можливості накопичення не означає досягнення непрофінансованої цілі.