{
  "openapi": "3.1.0",
  "info": {
    "title": "revenoo API",
    "version": "2.0.0",
    "summary": "Swiss income-property and land valuation by EGRID: DCF, direct capitalization, residual land values.",
    "description": "revenoo values any Swiss parcel from its EGRID: market rents of its municipality, a DCF with a derived discount rate, direct capitalization, and three residual land values (initial yield on cost, the DCF and the basic application of the RICS residual method), with two-way sensitivities.\n\n**Units** ride in the key: no suffix is an amount (rounded, in the currency of the market data; no currency is given), `_pct` in percent (2.95 means 2.95%), `_bp` in basis points, `_m2` in square metres.\n\n**What-if**: every response lists the `assumptions` it used. POST the ones you want to change as `{ \"assumptions\": { … } }`.\n\n**Speed**: start with `/summary`. A first call for an EGRID fetches the parcel and market data (cached for 6 hours); afterwards every part of that EGRID is served from cache.\n\n**Methods and sources**: each part carries `method` and `sources` (RICS Discounted cash flow valuations 2023; RICS Valuation of development property 2019; IVS 104).\n\n**Open in the app**: `links.app` opens the same valuation in revenoo (https://revenoo.aireon.ch/).",
    "contact": {
      "name": "Aireon",
      "url": "https://hub.aireon.ch/"
    },
    "x-aireon-app": "revenoo"
  },
  "servers": [
    {
      "url": "https://revenoo.aireon.ch",
      "description": "Production"
    }
  ],
  "security": [],
  "tags": [
    {
      "name": "Valuation",
      "description": "Valuation of a parcel by EGRID."
    }
  ],
  "paths": {
    "/api/valuation/{egrid}": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooValuation",
        "tags": [
          "Valuation"
        ],
        "summary": "Full valuation of a parcel",
        "description": "Every part in one response: figures, dcf, discount_rate, direct_cap, land_value, yield_on_cost, rents, sensitivity and the assumptions used. Prefer a single part when you need only one.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "The valuation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Valuation"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "figures": {
                    "dcf_value": 16464966,
                    "dcf_value_per_m2_nia": 12053,
                    "discount_rate_real_pct": 2.1,
                    "direct_cap_value": 11570111,
                    "dcf_implied_cap_rate_pct": 2.3919,
                    "land_value_yield_on_cost": 2431836,
                    "land_value_yield_on_cost_per_m2_nia": 1780,
                    "land_value_dcf": 6462216,
                    "land_value_static": 7269027,
                    "land_value_static_implied_irr_pct": 10.3364,
                    "net_yield_after_capex_pct": 2.073,
                    "gross_yield_pct": 2.8093,
                    "noi_after_capex": 341318,
                    "gross_potential_rent": 462554,
                    "units_total": 22,
                    "dcf_value_at_rate_minus_30bp": 19123494,
                    "dcf_value_at_rate_plus_30bp": 14470148,
                    "asking_price": null
                  },
                  "dcf": {
                    "dcf_value": 16464966,
                    "pv_cash_flows": 3525722,
                    "terminal_value": 16253251,
                    "net_terminal_value": 15928186,
                    "pv_terminal_value": 12939244,
                    "exit_noi": 341318,
                    "discount_rate_pct": 2.1,
                    "implied_cap_rate_pct": 2.3919,
                    "cash_flows": [
                      {
                        "year": 1,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 64757,
                        "effective_gross_income": 397796,
                        "operating_expenses": 50881,
                        "maintenance": 15403,
                        "capex_reserve": 0,
                        "net_cash_flow": 331512,
                        "discount_factor": 0.989663,
                        "present_value": 328085
                      },
                      {
                        "year": 2,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 15403,
                        "capex_reserve": 0,
                        "net_cash_flow": 404364,
                        "discount_factor": 0.969307,
                        "present_value": 391953
                      },
                      {
                        "year": 3,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 15403,
                        "capex_reserve": 0,
                        "net_cash_flow": 404364,
                        "discount_factor": 0.94937,
                        "present_value": 383891
                      },
                      {
                        "year": 4,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 19797,
                        "capex_reserve": 0,
                        "net_cash_flow": 399970,
                        "discount_factor": 0.929844,
                        "present_value": 371910
                      },
                      {
                        "year": 5,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 19797,
                        "capex_reserve": 0,
                        "net_cash_flow": 399970,
                        "discount_factor": 0.910719,
                        "present_value": 364260
                      },
                      {
                        "year": 6,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.891987,
                        "present_value": 351281
                      },
                      {
                        "year": 7,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.87364,
                        "present_value": 344055
                      },
                      {
                        "year": 8,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.855671,
                        "present_value": 336979
                      },
                      {
                        "year": 9,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.838072,
                        "present_value": 330048
                      },
                      {
                        "year": 10,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.820834,
                        "present_value": 323259
                      }
                    ],
                    "method": "Explicit DCF: the net cash flow of each forecast year plus the terminal value (exit NOI ÷ exit cap rate, less sale costs), discounted at the discount rate.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "§2.8, §4.51–4.53, §4.59, §4.62–4.63, §4.65, §5.11"
                      }
                    ]
                  },
                  "discount_rate": {
                    "real_rate_pct": 2.1,
                    "nominal_rate_pct": 3.121,
                    "applied_rate_pct": 2.1,
                    "inflation_pct": 1,
                    "macro_rate_source": "zurich_baseline",
                    "build_up": {
                      "baseline_rate_zurich_pct": 2.1,
                      "macro_rate_pct": 2.1,
                      "macro_premium_pct": 0,
                      "micro_premium_pct": 0,
                      "usage_premium_pct": 0,
                      "condition_premium_pct": 0,
                      "special_premium_pct": 0,
                      "micro_rating": "average",
                      "usage_rating": "residential",
                      "condition_rating": "new"
                    },
                    "method": "Build-up: the macro rate (the municipality's rent level against Zürich, applied to the Zürich baseline rate) plus macro, micro, usage, condition and special premiums, in real terms.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "§4.66, §4.71, §5.10–5.11, §5.14–5.15"
                      }
                    ]
                  },
                  "direct_cap": {
                    "direct_cap_value": 11570111,
                    "noi_convention": "after_capex",
                    "stabilized_noi": 341318,
                    "noi_factor_pct": 73.79,
                    "cap_rate_pct": 2.95,
                    "bridge": {
                      "gross_potential_rent": 462554,
                      "vacancy_loss": 13877,
                      "effective_gross_income": 448677,
                      "operating_expenses": 28910,
                      "maintenance": 25949,
                      "capex_reserve": 52500
                    },
                    "difference_to_dcf": 4894855,
                    "method": "Implicit income capitalization: stabilized NOI divided by the capitalization rate.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "§2.7–2.10, glossary \"Capitalisation rate\", Appendix A"
                      }
                    ]
                  },
                  "land_value": {
                    "gross_development_value": 16464966,
                    "yield_on_cost": {
                      "land_value": 2431836,
                      "per_m2_land": 1068,
                      "per_m2_nia": 1780,
                      "target_initial_yield_on_cost_pct": 5,
                      "income_basis": "gross_rent",
                      "annual_income": 462554,
                      "max_total_development_cost": 9251071,
                      "method": "Land value at which the initial yield on cost (annual income on completion ÷ total development cost incl. finance) meets the target.",
                      "sources": [
                        {
                          "source": "rics_development",
                          "title": "RICS, Valuation of development property (1st ed., 2019)",
                          "paragraphs": "B2.2.3.4, B2.2.2"
                        }
                      ]
                    },
                    "dcf": {
                      "land_value": 6462216,
                      "per_m2_land": 2839,
                      "per_m2_nia": 4731,
                      "target_rate_of_return_pct": 15,
                      "pv_ndv": 12200882,
                      "pv_development_costs": 5577110,
                      "method": "Residual land value, discounted cash flow application: the land price at which the monthly development cash flow has an NPV of zero at the target rate of return (a project IRR before finance).",
                      "sources": [
                        {
                          "source": "rics_development",
                          "title": "RICS, Valuation of development property (1st ed., 2019)",
                          "paragraphs": "§6.2, Appendix B1, §7.2.4"
                        }
                      ]
                    },
                    "static": {
                      "land_value": 7269027,
                      "per_m2_land": 3194,
                      "per_m2_nia": 5321,
                      "developers_profit_pct": 10,
                      "finance_rate_pct": 3,
                      "implied_irr_pct": 10.3364,
                      "method": "Residual land value, basic application: NDV less development costs, finance and developer's profit, discounted for the development period.",
                      "sources": [
                        {
                          "source": "rics_development",
                          "title": "RICS, Valuation of development property (1st ed., 2019)",
                          "paragraphs": "§6.3, Appendix B2"
                        }
                      ]
                    },
                    "development_costs": {
                      "net_development_value": 16135666,
                      "construction_costs": 5464000,
                      "professional_fees": 655680,
                      "contingency": 273200,
                      "development_costs": 6392880,
                      "development_period_months": 24
                    }
                  },
                  "yield_on_cost": {
                    "land_value": 2431836,
                    "per_m2_land": 1068,
                    "per_m2_nia": 1780,
                    "target_initial_yield_on_cost_pct": 5,
                    "income_basis": "gross_rent",
                    "annual_income": 462554,
                    "income": {
                      "gross_potential_rent": 462554,
                      "noi_before_capex": 393818,
                      "noi_after_capex": 341318
                    },
                    "max_total_development_cost": 9251071,
                    "development_costs": {
                      "construction_cost_per_m2_nia": 4000,
                      "construction_costs": 5464000,
                      "professional_fees": 655680,
                      "contingency": 273200,
                      "letting_expenses": 21971,
                      "finance_rate_pct": 3,
                      "development_period_months": 24,
                      "finance_on_development_costs": 191786
                    },
                    "available_at_completion": 2644434,
                    "finance_on_land": 151801,
                    "available_for_land": 2492632,
                    "site_acquisition_costs": 60796,
                    "at_asking_price": null,
                    "sensitivity": {
                      "rows": "target_yield_on_cost_pct",
                      "columns": "construction_cost_per_m2_nia",
                      "row_values": [
                        4,
                        4.5,
                        5,
                        5.5,
                        6
                      ],
                      "column_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "cells": [
                        [
                          5164201,
                          4861436,
                          4558671,
                          4255906,
                          3953141
                        ],
                        [
                          3982626,
                          3679861,
                          3377096,
                          3074331,
                          2771567
                        ],
                        [
                          3037366,
                          2734601,
                          2431836,
                          2129072,
                          1826307
                        ],
                        [
                          2263972,
                          1961207,
                          1658442,
                          1355677,
                          1052912
                        ],
                        [
                          1619476,
                          1316712,
                          1013947,
                          711182,
                          408417
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "method": "Initial yield on cost: the annual income on completion of letting over the total development cost (land, its acquisition costs, construction, professional fees, contingency, letting expenses and finance on all of them). Read backwards at the target yield it caps the total development cost, and the land value is what the other costs leave. It values the land for development to the parcel's buildable area, not the property that stands on it today.",
                    "sources": [
                      {
                        "source": "rics_development",
                        "title": "RICS, Valuation of development property (1st ed., 2019)",
                        "paragraphs": "B2.2.3.4, B2.2.2, B1.2.6.2"
                      }
                    ]
                  },
                  "rents": {
                    "gross_potential_rent": 462554,
                    "rent_per_m2_year": 282,
                    "distributions": [
                      {
                        "unit_type": "Studio",
                        "basis": "per_m2_year",
                        "p10": 220,
                        "average": 300,
                        "p90": 400,
                        "percentile": 80,
                        "adopted": 361,
                        "source": null
                      },
                      {
                        "unit_type": "2 Rooms",
                        "basis": "per_m2_year",
                        "p10": 185,
                        "average": 250,
                        "p90": 330,
                        "percentile": 80,
                        "adopted": 299,
                        "source": null
                      },
                      {
                        "unit_type": "3 Rooms",
                        "basis": "per_m2_year",
                        "p10": 165,
                        "average": 220,
                        "p90": 290,
                        "percentile": 80,
                        "adopted": 263,
                        "source": null
                      },
                      {
                        "unit_type": "4 Rooms",
                        "basis": "per_m2_year",
                        "p10": 150,
                        "average": 200,
                        "p90": 265,
                        "percentile": 80,
                        "adopted": 240,
                        "source": null
                      },
                      {
                        "unit_type": "5 Rooms",
                        "basis": "per_m2_year",
                        "p10": 135,
                        "average": 180,
                        "p90": 240,
                        "percentile": 80,
                        "adopted": 217,
                        "source": null
                      },
                      {
                        "unit_type": "Indoor Parking",
                        "basis": "per_unit_month",
                        "p10": 130,
                        "average": 130,
                        "p90": 130,
                        "percentile": 80,
                        "adopted": 130,
                        "source": null
                      }
                    ],
                    "unit_mix": [
                      {
                        "unit_type": "2 Rooms",
                        "units": 13,
                        "area_m2": 702.7,
                        "rent_basis": "per_m2_year",
                        "rent_per_m2_year": 299,
                        "rent_per_unit_month": null,
                        "vacancy_pct": 3
                      },
                      {
                        "unit_type": "3 Rooms",
                        "units": 9,
                        "area_m2": 663.3,
                        "rent_basis": "per_m2_year",
                        "rent_per_m2_year": 263,
                        "rent_per_unit_month": null,
                        "vacancy_pct": 3
                      },
                      {
                        "unit_type": "Indoor Parking",
                        "units": 50,
                        "area_m2": 0,
                        "rent_basis": "per_unit_month",
                        "rent_per_m2_year": null,
                        "rent_per_unit_month": 130,
                        "vacancy_pct": 3
                      }
                    ],
                    "method": "Market rent per unit type from the municipality's asking rents; the adopted rent is a percentile of a log-normal fit to P10 and P90 (revenoo's method). GPR sums the adopted rents over the unit mix.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "glossary \"Market rent (MR)\", §4.14–4.16, §4.30"
                      },
                      {
                        "source": "ivs_104",
                        "title": "IVS 104 Bases of value",
                        "paragraphs": "§40.1"
                      }
                    ]
                  },
                  "sensitivity": {
                    "dcf_rent_vs_discount_rate": {
                      "rows": "rent_change_pct",
                      "columns": "discount_rate_pct",
                      "row_values": [
                        -10,
                        -5,
                        0,
                        5,
                        10
                      ],
                      "column_values": [
                        1.5,
                        1.8,
                        2.1,
                        2.4,
                        2.7
                      ],
                      "cells": [
                        [
                          20559545,
                          17211145,
                          14818469,
                          13023133,
                          11626035
                        ],
                        [
                          21701742,
                          18167320,
                          15641717,
                          13746641,
                          12271926
                        ],
                        [
                          22843939,
                          19123494,
                          16464966,
                          14470148,
                          12917817
                        ],
                        [
                          23986136,
                          20079669,
                          17288214,
                          15193655,
                          13563708
                        ],
                        [
                          25128333,
                          21035844,
                          18111462,
                          15917163,
                          14209599
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "dcf_rent_vs_exit_cap_rate": {
                      "rows": "rent_change_pct",
                      "columns": "exit_cap_rate_pct",
                      "row_values": [
                        -10,
                        -5,
                        0,
                        5,
                        10
                      ],
                      "column_values": [
                        1.5,
                        1.8,
                        2.1,
                        2.4,
                        2.7
                      ],
                      "cells": [
                        [
                          19476597,
                          16759356,
                          14818469,
                          13362804,
                          12230620
                        ],
                        [
                          20558630,
                          17690431,
                          15641717,
                          14105182,
                          12910099
                        ],
                        [
                          21640663,
                          18621506,
                          16464966,
                          14847560,
                          13589578
                        ],
                        [
                          22722696,
                          19552582,
                          17288214,
                          15589938,
                          14269057
                        ],
                        [
                          23804730,
                          20483657,
                          18111462,
                          16332316,
                          14948536
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "direct_cap_noi_factor_vs_cap_rate": {
                      "rows": "noi_factor_pct",
                      "columns": "cap_rate_pct",
                      "row_values": [
                        67.79,
                        70.79,
                        73.79,
                        76.79,
                        79.79
                      ],
                      "column_values": [
                        2.35,
                        2.65,
                        2.95,
                        3.25,
                        3.55
                      ],
                      "cells": [
                        [
                          13343194,
                          11832644,
                          10629324,
                          9648156,
                          8832819
                        ],
                        [
                          13933688,
                          12356289,
                          11099718,
                          10075128,
                          9223709
                        ],
                        [
                          14524182,
                          12879935,
                          11570111,
                          10502101,
                          9614599
                        ],
                        [
                          15114676,
                          13403581,
                          12040505,
                          10929073,
                          10005490
                        ],
                        [
                          15705170,
                          13927226,
                          12510898,
                          11356046,
                          10396380
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_yield_on_cost": {
                      "rows": "target_yield_on_cost_pct",
                      "columns": "construction_cost_per_m2_nia",
                      "row_values": [
                        4,
                        4.5,
                        5,
                        5.5,
                        6
                      ],
                      "column_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "cells": [
                        [
                          5164201,
                          4861436,
                          4558671,
                          4255906,
                          3953141
                        ],
                        [
                          3982626,
                          3679861,
                          3377096,
                          3074331,
                          2771567
                        ],
                        [
                          3037366,
                          2734601,
                          2431836,
                          2129072,
                          1826307
                        ],
                        [
                          2263972,
                          1961207,
                          1658442,
                          1355677,
                          1052912
                        ],
                        [
                          1619476,
                          1316712,
                          1013947,
                          711182,
                          408417
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_dcf_rate_vs_construction_cost": {
                      "rows": "target_rate_of_return_pct",
                      "columns": "construction_cost_per_m2_nia",
                      "row_values": [
                        10,
                        12.5,
                        15,
                        20,
                        25
                      ],
                      "column_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "cells": [
                        [
                          7899331,
                          7615404,
                          7331478,
                          7047551,
                          6763624
                        ],
                        [
                          7437124,
                          7159285,
                          6881447,
                          6603609,
                          6325771
                        ],
                        [
                          7006325,
                          6734271,
                          6462216,
                          6190162,
                          5918108
                        ],
                        [
                          6228393,
                          5967080,
                          5705767,
                          5444454,
                          5183142
                        ],
                        [
                          5547050,
                          5295500,
                          5043949,
                          4792399,
                          4540849
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_dcf_period_vs_gdv": {
                      "rows": "development_period_months",
                      "columns": "gross_development_value",
                      "row_values": [
                        12,
                        18,
                        24,
                        30,
                        36
                      ],
                      "column_values": [
                        14818469,
                        15641717,
                        16464966,
                        17288214,
                        18111462
                      ],
                      "cells": [
                        [
                          6499222,
                          7183661,
                          7868101,
                          8552541,
                          9236980
                        ],
                        [
                          5861834,
                          6500077,
                          7138321,
                          7776564,
                          8414807
                        ],
                        [
                          5271887,
                          5867052,
                          6462216,
                          7057381,
                          7652546
                        ],
                        [
                          4726029,
                          5281023,
                          5836017,
                          6391012,
                          6946006
                        ],
                        [
                          4221144,
                          4738678,
                          5256213,
                          5773748,
                          6291283
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_static": {
                      "rows": "construction_cost_per_m2_nia",
                      "columns": "gross_development_value",
                      "row_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "column_values": [
                        14818469,
                        15641717,
                        16464966,
                        17288214,
                        18111462
                      ],
                      "cells": [
                        [
                          6542124,
                          7208340,
                          7874557,
                          8540773,
                          9206989
                        ],
                        [
                          6239359,
                          6905576,
                          7571792,
                          8238008,
                          8904224
                        ],
                        [
                          5936594,
                          6602811,
                          7269027,
                          7935243,
                          8601459
                        ],
                        [
                          5633830,
                          6300046,
                          6966262,
                          7632478,
                          8298694
                        ],
                        [
                          5331065,
                          5997281,
                          6663497,
                          7329713,
                          7995930
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "method": "Two-way sensitivity: each cell is the value with the two inputs moved and all others unchanged; `current` marks the base case. `rows` and `columns` name the two inputs; their values are in the unit the name ends in, rates in percent.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "glossary \"Sensitivity analysis/testing\", Appendix B"
                      }
                    ]
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "valueRevenooWithAssumptions",
        "tags": [
          "Valuation"
        ],
        "summary": "Full valuation with your assumptions",
        "description": "The full valuation with any of the documented assumptions changed (what-if). Unknown keys, out-of-range values and rent growth at or above the discount rate are rejected. The response echoes every assumption used.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssumptionsRequest"
              },
              "example": {
                "assumptions": {
                  "asking_land_price": 2500000,
                  "target_irr_pct": 12,
                  "construction_cost_per_m2_nia": 4200
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The valuation.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Valuation"
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/summary": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooSummary",
        "tags": [
          "Valuation"
        ],
        "summary": "Key figures of a parcel",
        "description": "The figures only revenoo computes: DCF value, derived discount rate, direct cap value, the three residual land values (Yield on Cost, DCF, Static), yields, GPR and the DCF value at ±30 bp. Fastest call; start here.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "Key figures of a parcel",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Summary"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "figures": {
                    "dcf_value": 16464966,
                    "dcf_value_per_m2_nia": 12053,
                    "discount_rate_real_pct": 2.1,
                    "direct_cap_value": 11570111,
                    "dcf_implied_cap_rate_pct": 2.3919,
                    "land_value_yield_on_cost": 2431836,
                    "land_value_yield_on_cost_per_m2_nia": 1780,
                    "land_value_dcf": 6462216,
                    "land_value_static": 7269027,
                    "land_value_static_implied_irr_pct": 10.3364,
                    "net_yield_after_capex_pct": 2.073,
                    "gross_yield_pct": 2.8093,
                    "noi_after_capex": 341318,
                    "gross_potential_rent": 462554,
                    "units_total": 22,
                    "dcf_value_at_rate_minus_30bp": 19123494,
                    "dcf_value_at_rate_plus_30bp": 14470148,
                    "asking_price": null
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "valueRevenooSummaryWithAssumptions",
        "tags": [
          "Valuation"
        ],
        "summary": "Key figures with your assumptions",
        "description": "The key figures with any of the documented assumptions changed. Use it for what-ifs: an asking price to appraise, another target rate of return, construction costs, discount rate or rent.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssumptionsRequest"
              },
              "example": {
                "assumptions": {
                  "asking_land_price": 2500000
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The key figures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Summary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/dcf": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooDcf",
        "tags": [
          "Valuation"
        ],
        "summary": "DCF: cash flows, terminal value, DCF value",
        "description": "The annual cash flow table (GPR to net cash flow, discount factor, present value), the terminal value and the DCF value.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "DCF: cash flows, terminal value, DCF value",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "dcf": {
                    "dcf_value": 16464966,
                    "pv_cash_flows": 3525722,
                    "terminal_value": 16253251,
                    "net_terminal_value": 15928186,
                    "pv_terminal_value": 12939244,
                    "exit_noi": 341318,
                    "discount_rate_pct": 2.1,
                    "implied_cap_rate_pct": 2.3919,
                    "cash_flows": [
                      {
                        "year": 1,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 64757,
                        "effective_gross_income": 397796,
                        "operating_expenses": 50881,
                        "maintenance": 15403,
                        "capex_reserve": 0,
                        "net_cash_flow": 331512,
                        "discount_factor": 0.989663,
                        "present_value": 328085
                      },
                      {
                        "year": 2,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 15403,
                        "capex_reserve": 0,
                        "net_cash_flow": 404364,
                        "discount_factor": 0.969307,
                        "present_value": 391953
                      },
                      {
                        "year": 3,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 15403,
                        "capex_reserve": 0,
                        "net_cash_flow": 404364,
                        "discount_factor": 0.94937,
                        "present_value": 383891
                      },
                      {
                        "year": 4,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 19797,
                        "capex_reserve": 0,
                        "net_cash_flow": 399970,
                        "discount_factor": 0.929844,
                        "present_value": 371910
                      },
                      {
                        "year": 5,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 19797,
                        "capex_reserve": 0,
                        "net_cash_flow": 399970,
                        "discount_factor": 0.910719,
                        "present_value": 364260
                      },
                      {
                        "year": 6,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.891987,
                        "present_value": 351281
                      },
                      {
                        "year": 7,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.87364,
                        "present_value": 344055
                      },
                      {
                        "year": 8,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.855671,
                        "present_value": 336979
                      },
                      {
                        "year": 9,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.838072,
                        "present_value": 330048
                      },
                      {
                        "year": 10,
                        "gross_potential_rent": 462554,
                        "vacancy_loss": 13877,
                        "effective_gross_income": 448677,
                        "operating_expenses": 28910,
                        "maintenance": 25949,
                        "capex_reserve": 0,
                        "net_cash_flow": 393818,
                        "discount_factor": 0.820834,
                        "present_value": 323259
                      }
                    ],
                    "method": "Explicit DCF: the net cash flow of each forecast year plus the terminal value (exit NOI ÷ exit cap rate, less sale costs), discounted at the discount rate.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "§2.8, §4.51–4.53, §4.59, §4.62–4.63, §4.65, §5.11"
                      }
                    ]
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/discount-rate": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooDiscountRate",
        "tags": [
          "Valuation"
        ],
        "summary": "Discount rate and its build-up",
        "description": "Real and nominal discount rate, and the build-up: Zürich baseline rate, macro rate from the municipality's rent level, macro, micro, usage, condition and special premiums.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "Discount rate and its build-up",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "discount_rate": {
                    "real_rate_pct": 2.1,
                    "nominal_rate_pct": 3.121,
                    "applied_rate_pct": 2.1,
                    "inflation_pct": 1,
                    "macro_rate_source": "zurich_baseline",
                    "build_up": {
                      "baseline_rate_zurich_pct": 2.1,
                      "macro_rate_pct": 2.1,
                      "macro_premium_pct": 0,
                      "micro_premium_pct": 0,
                      "usage_premium_pct": 0,
                      "condition_premium_pct": 0,
                      "special_premium_pct": 0,
                      "micro_rating": "average",
                      "usage_rating": "residential",
                      "condition_rating": "new"
                    },
                    "method": "Build-up: the macro rate (the municipality's rent level against Zürich, applied to the Zürich baseline rate) plus macro, micro, usage, condition and special premiums, in real terms.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "§4.66, §4.71, §5.10–5.11, §5.14–5.15"
                      }
                    ]
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/direct-cap": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooDirectCap",
        "tags": [
          "Valuation"
        ],
        "summary": "Direct capitalization",
        "description": "The bridge from GPR to stabilized NOI, the capitalization rate and the direct cap value.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "Direct capitalization",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "direct_cap": {
                    "direct_cap_value": 11570111,
                    "noi_convention": "after_capex",
                    "stabilized_noi": 341318,
                    "noi_factor_pct": 73.79,
                    "cap_rate_pct": 2.95,
                    "bridge": {
                      "gross_potential_rent": 462554,
                      "vacancy_loss": 13877,
                      "effective_gross_income": 448677,
                      "operating_expenses": 28910,
                      "maintenance": 25949,
                      "capex_reserve": 52500
                    },
                    "difference_to_dcf": 4894855,
                    "method": "Implicit income capitalization: stabilized NOI divided by the capitalization rate.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "§2.7–2.10, glossary \"Capitalisation rate\", Appendix A"
                      }
                    ]
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/land-value": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooLandValue",
        "tags": [
          "Valuation"
        ],
        "summary": "Residual land values",
        "description": "Land value by initial yield on cost, by the residual method's DCF application and by its basic (static) application, with the development costs they share.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "Residual land values",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "land_value": {
                    "gross_development_value": 16464966,
                    "yield_on_cost": {
                      "land_value": 2431836,
                      "per_m2_land": 1068,
                      "per_m2_nia": 1780,
                      "target_initial_yield_on_cost_pct": 5,
                      "income_basis": "gross_rent",
                      "annual_income": 462554,
                      "max_total_development_cost": 9251071,
                      "method": "Land value at which the initial yield on cost (annual income on completion ÷ total development cost incl. finance) meets the target.",
                      "sources": [
                        {
                          "source": "rics_development",
                          "title": "RICS, Valuation of development property (1st ed., 2019)",
                          "paragraphs": "B2.2.3.4, B2.2.2"
                        }
                      ]
                    },
                    "dcf": {
                      "land_value": 6462216,
                      "per_m2_land": 2839,
                      "per_m2_nia": 4731,
                      "target_rate_of_return_pct": 15,
                      "pv_ndv": 12200882,
                      "pv_development_costs": 5577110,
                      "method": "Residual land value, discounted cash flow application: the land price at which the monthly development cash flow has an NPV of zero at the target rate of return (a project IRR before finance).",
                      "sources": [
                        {
                          "source": "rics_development",
                          "title": "RICS, Valuation of development property (1st ed., 2019)",
                          "paragraphs": "§6.2, Appendix B1, §7.2.4"
                        }
                      ]
                    },
                    "static": {
                      "land_value": 7269027,
                      "per_m2_land": 3194,
                      "per_m2_nia": 5321,
                      "developers_profit_pct": 10,
                      "finance_rate_pct": 3,
                      "implied_irr_pct": 10.3364,
                      "method": "Residual land value, basic application: NDV less development costs, finance and developer's profit, discounted for the development period.",
                      "sources": [
                        {
                          "source": "rics_development",
                          "title": "RICS, Valuation of development property (1st ed., 2019)",
                          "paragraphs": "§6.3, Appendix B2"
                        }
                      ]
                    },
                    "development_costs": {
                      "net_development_value": 16135666,
                      "construction_costs": 5464000,
                      "professional_fees": 655680,
                      "contingency": 273200,
                      "development_costs": 6392880,
                      "development_period_months": 24
                    }
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/yield-on-cost": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooYieldOnCost",
        "tags": [
          "Valuation"
        ],
        "summary": "Land value by initial yield on cost",
        "description": "The land value at which the initial yield on cost (annual income on completion of letting ÷ total development cost, RICS B2.2.3.4) meets the target, in full: the income basis, every development cost line with finance and letting expenses, what is left for the land, an asking price's yield on cost and the target yield × construction cost grid. A development land value: the parcel built out to its buildable area, not the value of what stands on it today.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "Land value by initial yield on cost",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "yield_on_cost": {
                    "land_value": 2431836,
                    "per_m2_land": 1068,
                    "per_m2_nia": 1780,
                    "target_initial_yield_on_cost_pct": 5,
                    "income_basis": "gross_rent",
                    "annual_income": 462554,
                    "income": {
                      "gross_potential_rent": 462554,
                      "noi_before_capex": 393818,
                      "noi_after_capex": 341318
                    },
                    "max_total_development_cost": 9251071,
                    "development_costs": {
                      "construction_cost_per_m2_nia": 4000,
                      "construction_costs": 5464000,
                      "professional_fees": 655680,
                      "contingency": 273200,
                      "letting_expenses": 21971,
                      "finance_rate_pct": 3,
                      "development_period_months": 24,
                      "finance_on_development_costs": 191786
                    },
                    "available_at_completion": 2644434,
                    "finance_on_land": 151801,
                    "available_for_land": 2492632,
                    "site_acquisition_costs": 60796,
                    "at_asking_price": null,
                    "sensitivity": {
                      "rows": "target_yield_on_cost_pct",
                      "columns": "construction_cost_per_m2_nia",
                      "row_values": [
                        4,
                        4.5,
                        5,
                        5.5,
                        6
                      ],
                      "column_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "cells": [
                        [
                          5164201,
                          4861436,
                          4558671,
                          4255906,
                          3953141
                        ],
                        [
                          3982626,
                          3679861,
                          3377096,
                          3074331,
                          2771567
                        ],
                        [
                          3037366,
                          2734601,
                          2431836,
                          2129072,
                          1826307
                        ],
                        [
                          2263972,
                          1961207,
                          1658442,
                          1355677,
                          1052912
                        ],
                        [
                          1619476,
                          1316712,
                          1013947,
                          711182,
                          408417
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "method": "Initial yield on cost: the annual income on completion of letting over the total development cost (land, its acquisition costs, construction, professional fees, contingency, letting expenses and finance on all of them). Read backwards at the target yield it caps the total development cost, and the land value is what the other costs leave. It values the land for development to the parcel's buildable area, not the property that stands on it today.",
                    "sources": [
                      {
                        "source": "rics_development",
                        "title": "RICS, Valuation of development property (1st ed., 2019)",
                        "paragraphs": "B2.2.3.4, B2.2.2, B1.2.6.2"
                      }
                    ]
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      },
      "post": {
        "operationId": "valueRevenooYieldOnCostWithAssumptions",
        "tags": [
          "Valuation"
        ],
        "summary": "Land value by yield on cost with your assumptions",
        "description": "The yield on cost land value with any of the documented assumptions changed: target_yield_on_cost_pct, yield_on_cost_basis, construction_cost_per_m2_nia, finance_rate_pct, development_period_months, an asking_land_price to appraise, rents and areas.",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AssumptionsRequest"
              },
              "example": {
                "assumptions": {
                  "target_yield_on_cost_pct": 4.5,
                  "construction_cost_per_m2_nia": 4200,
                  "asking_land_price": 2500000
                }
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "The yield on cost land value.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/rents": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooRents",
        "tags": [
          "Valuation"
        ],
        "summary": "Market rents and unit mix",
        "description": "Rent distribution per unit type (P10, average, P90, percentile, adopted rent) and the unit mix the GPR is built on.",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "Market rents and unit mix",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "rents": {
                    "gross_potential_rent": 462554,
                    "rent_per_m2_year": 282,
                    "distributions": [
                      {
                        "unit_type": "Studio",
                        "basis": "per_m2_year",
                        "p10": 220,
                        "average": 300,
                        "p90": 400,
                        "percentile": 80,
                        "adopted": 361,
                        "source": null
                      },
                      {
                        "unit_type": "2 Rooms",
                        "basis": "per_m2_year",
                        "p10": 185,
                        "average": 250,
                        "p90": 330,
                        "percentile": 80,
                        "adopted": 299,
                        "source": null
                      },
                      {
                        "unit_type": "3 Rooms",
                        "basis": "per_m2_year",
                        "p10": 165,
                        "average": 220,
                        "p90": 290,
                        "percentile": 80,
                        "adopted": 263,
                        "source": null
                      },
                      {
                        "unit_type": "4 Rooms",
                        "basis": "per_m2_year",
                        "p10": 150,
                        "average": 200,
                        "p90": 265,
                        "percentile": 80,
                        "adopted": 240,
                        "source": null
                      },
                      {
                        "unit_type": "5 Rooms",
                        "basis": "per_m2_year",
                        "p10": 135,
                        "average": 180,
                        "p90": 240,
                        "percentile": 80,
                        "adopted": 217,
                        "source": null
                      },
                      {
                        "unit_type": "Indoor Parking",
                        "basis": "per_unit_month",
                        "p10": 130,
                        "average": 130,
                        "p90": 130,
                        "percentile": 80,
                        "adopted": 130,
                        "source": null
                      }
                    ],
                    "unit_mix": [
                      {
                        "unit_type": "2 Rooms",
                        "units": 13,
                        "area_m2": 702.7,
                        "rent_basis": "per_m2_year",
                        "rent_per_m2_year": 299,
                        "rent_per_unit_month": null,
                        "vacancy_pct": 3
                      },
                      {
                        "unit_type": "3 Rooms",
                        "units": 9,
                        "area_m2": 663.3,
                        "rent_basis": "per_m2_year",
                        "rent_per_m2_year": 263,
                        "rent_per_unit_month": null,
                        "vacancy_pct": 3
                      },
                      {
                        "unit_type": "Indoor Parking",
                        "units": 50,
                        "area_m2": 0,
                        "rent_basis": "per_unit_month",
                        "rent_per_m2_year": null,
                        "rent_per_unit_month": 130,
                        "vacancy_pct": 3
                      }
                    ],
                    "method": "Market rent per unit type from the municipality's asking rents; the adopted rent is a percentile of a log-normal fit to P10 and P90 (revenoo's method). GPR sums the adopted rents over the unit mix.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "glossary \"Market rent (MR)\", §4.14–4.16, §4.30"
                      },
                      {
                        "source": "ivs_104",
                        "title": "IVS 104 Bases of value",
                        "paragraphs": "§40.1"
                      }
                    ]
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/{egrid}/sensitivity": {
      "parameters": [
        {
          "name": "egrid",
          "in": "path",
          "required": true,
          "description": "Swiss parcel identifier: \"CH\" followed by 12 characters. Spaces are ignored, letters may be lower case.",
          "schema": {
            "type": "string",
            "pattern": "^[Cc][Hh][0-9A-Za-z]{12}$"
          },
          "example": "CH427777450687"
        }
      ],
      "get": {
        "operationId": "getRevenooSensitivity",
        "tags": [
          "Valuation"
        ],
        "summary": "Two-way sensitivity grids",
        "description": "Seven 5×5 grids: DCF (rent × discount rate, rent × exit cap rate), direct cap (NOI factor × cap rate) and the land values (target yield, target rate, period, construction costs, GDV).",
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "Two-way sensitivity grids",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Part"
                },
                "example": {
                  "api_version": "2.0.0",
                  "valuation_date": "2026-11-03",
                  "parcel": {
                    "egrid": "CH427777450687",
                    "address": "Hausmattweg 1",
                    "zip": "4663",
                    "municipality": "Aarburg",
                    "bfs_number": 4271,
                    "canton": "AG",
                    "zone": "Wohnzone W3",
                    "lat": 47.322534,
                    "lng": 7.898823,
                    "land_area_m2": 2276,
                    "buildable_gfa_m2": 1707,
                    "rentable_area_m2": 1366
                  },
                  "data": {
                    "market_data": "missing",
                    "market_data_date": null,
                    "municipality_rent_per_m2_year": null,
                    "zurich_reference_rent_per_m2_year": null
                  },
                  "links": {
                    "app": "https://revenoo.aireon.ch/?lat=47.322534&lng=7.898823&parcel_id=CH427777450687",
                    "docs": "https://revenoo.aireon.ch/api/openapi.json"
                  },
                  "sensitivity": {
                    "dcf_rent_vs_discount_rate": {
                      "rows": "rent_change_pct",
                      "columns": "discount_rate_pct",
                      "row_values": [
                        -10,
                        -5,
                        0,
                        5,
                        10
                      ],
                      "column_values": [
                        1.5,
                        1.8,
                        2.1,
                        2.4,
                        2.7
                      ],
                      "cells": [
                        [
                          20559545,
                          17211145,
                          14818469,
                          13023133,
                          11626035
                        ],
                        [
                          21701742,
                          18167320,
                          15641717,
                          13746641,
                          12271926
                        ],
                        [
                          22843939,
                          19123494,
                          16464966,
                          14470148,
                          12917817
                        ],
                        [
                          23986136,
                          20079669,
                          17288214,
                          15193655,
                          13563708
                        ],
                        [
                          25128333,
                          21035844,
                          18111462,
                          15917163,
                          14209599
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "dcf_rent_vs_exit_cap_rate": {
                      "rows": "rent_change_pct",
                      "columns": "exit_cap_rate_pct",
                      "row_values": [
                        -10,
                        -5,
                        0,
                        5,
                        10
                      ],
                      "column_values": [
                        1.5,
                        1.8,
                        2.1,
                        2.4,
                        2.7
                      ],
                      "cells": [
                        [
                          19476597,
                          16759356,
                          14818469,
                          13362804,
                          12230620
                        ],
                        [
                          20558630,
                          17690431,
                          15641717,
                          14105182,
                          12910099
                        ],
                        [
                          21640663,
                          18621506,
                          16464966,
                          14847560,
                          13589578
                        ],
                        [
                          22722696,
                          19552582,
                          17288214,
                          15589938,
                          14269057
                        ],
                        [
                          23804730,
                          20483657,
                          18111462,
                          16332316,
                          14948536
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "direct_cap_noi_factor_vs_cap_rate": {
                      "rows": "noi_factor_pct",
                      "columns": "cap_rate_pct",
                      "row_values": [
                        67.79,
                        70.79,
                        73.79,
                        76.79,
                        79.79
                      ],
                      "column_values": [
                        2.35,
                        2.65,
                        2.95,
                        3.25,
                        3.55
                      ],
                      "cells": [
                        [
                          13343194,
                          11832644,
                          10629324,
                          9648156,
                          8832819
                        ],
                        [
                          13933688,
                          12356289,
                          11099718,
                          10075128,
                          9223709
                        ],
                        [
                          14524182,
                          12879935,
                          11570111,
                          10502101,
                          9614599
                        ],
                        [
                          15114676,
                          13403581,
                          12040505,
                          10929073,
                          10005490
                        ],
                        [
                          15705170,
                          13927226,
                          12510898,
                          11356046,
                          10396380
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_yield_on_cost": {
                      "rows": "target_yield_on_cost_pct",
                      "columns": "construction_cost_per_m2_nia",
                      "row_values": [
                        4,
                        4.5,
                        5,
                        5.5,
                        6
                      ],
                      "column_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "cells": [
                        [
                          5164201,
                          4861436,
                          4558671,
                          4255906,
                          3953141
                        ],
                        [
                          3982626,
                          3679861,
                          3377096,
                          3074331,
                          2771567
                        ],
                        [
                          3037366,
                          2734601,
                          2431836,
                          2129072,
                          1826307
                        ],
                        [
                          2263972,
                          1961207,
                          1658442,
                          1355677,
                          1052912
                        ],
                        [
                          1619476,
                          1316712,
                          1013947,
                          711182,
                          408417
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_dcf_rate_vs_construction_cost": {
                      "rows": "target_rate_of_return_pct",
                      "columns": "construction_cost_per_m2_nia",
                      "row_values": [
                        10,
                        12.5,
                        15,
                        20,
                        25
                      ],
                      "column_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "cells": [
                        [
                          7899331,
                          7615404,
                          7331478,
                          7047551,
                          6763624
                        ],
                        [
                          7437124,
                          7159285,
                          6881447,
                          6603609,
                          6325771
                        ],
                        [
                          7006325,
                          6734271,
                          6462216,
                          6190162,
                          5918108
                        ],
                        [
                          6228393,
                          5967080,
                          5705767,
                          5444454,
                          5183142
                        ],
                        [
                          5547050,
                          5295500,
                          5043949,
                          4792399,
                          4540849
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_dcf_period_vs_gdv": {
                      "rows": "development_period_months",
                      "columns": "gross_development_value",
                      "row_values": [
                        12,
                        18,
                        24,
                        30,
                        36
                      ],
                      "column_values": [
                        14818469,
                        15641717,
                        16464966,
                        17288214,
                        18111462
                      ],
                      "cells": [
                        [
                          6499222,
                          7183661,
                          7868101,
                          8552541,
                          9236980
                        ],
                        [
                          5861834,
                          6500077,
                          7138321,
                          7776564,
                          8414807
                        ],
                        [
                          5271887,
                          5867052,
                          6462216,
                          7057381,
                          7652546
                        ],
                        [
                          4726029,
                          5281023,
                          5836017,
                          6391012,
                          6946006
                        ],
                        [
                          4221144,
                          4738678,
                          5256213,
                          5773748,
                          6291283
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "land_value_static": {
                      "rows": "construction_cost_per_m2_nia",
                      "columns": "gross_development_value",
                      "row_values": [
                        3600,
                        3800,
                        4000,
                        4200,
                        4400
                      ],
                      "column_values": [
                        14818469,
                        15641717,
                        16464966,
                        17288214,
                        18111462
                      ],
                      "cells": [
                        [
                          6542124,
                          7208340,
                          7874557,
                          8540773,
                          9206989
                        ],
                        [
                          6239359,
                          6905576,
                          7571792,
                          8238008,
                          8904224
                        ],
                        [
                          5936594,
                          6602811,
                          7269027,
                          7935243,
                          8601459
                        ],
                        [
                          5633830,
                          6300046,
                          6966262,
                          7632478,
                          8298694
                        ],
                        [
                          5331065,
                          5997281,
                          6663497,
                          7329713,
                          7995930
                        ]
                      ],
                      "current": {
                        "row": 2,
                        "column": 2
                      }
                    },
                    "method": "Two-way sensitivity: each cell is the value with the two inputs moved and all others unchanged; `current` marks the base case. `rows` and `columns` name the two inputs; their values are in the unit the name ends in, rates in percent.",
                    "sources": [
                      {
                        "source": "rics_dcf",
                        "title": "RICS, Discounted cash flow valuations (practice information, 2023)",
                        "paragraphs": "glossary \"Sensitivity analysis/testing\", Appendix B"
                      }
                    ]
                  },
                  "assumptions": {
                    "asking_land_price": null,
                    "rentable_area_m2": 1366,
                    "residential_rent_per_m2_year": 281.52,
                    "vacancy_pct": 3,
                    "discount_rate_real_pct": 2.1,
                    "macro_premium_pct": 0,
                    "micro_rating": "average",
                    "micro_premium_bp": null,
                    "usage_rating": "residential",
                    "condition_rating": "new",
                    "special_premium_pct": 0,
                    "inflation_pct": 1,
                    "forecast_years": 10,
                    "rent_growth_real_pct": 0,
                    "discount_timing": "mid_year",
                    "exit_cap_rate_pct": null,
                    "exit_sale_costs_pct": 2,
                    "lease_up": true,
                    "initial_occupancy_pct": 75,
                    "lease_up_months": 12,
                    "cap_rate_pct": 2.95,
                    "noi_convention": "after_capex",
                    "gdv_source": "dcf",
                    "gdv_manual": 0,
                    "construction_cost_per_m2_nia": 4000,
                    "professional_fees_pct": 12,
                    "contingency_pct": 5,
                    "sale_costs_pct": 2,
                    "site_acquisition_costs_pct": 2.5,
                    "development_period_months": 24,
                    "target_irr_pct": 15,
                    "finance_rate_pct": 3,
                    "developers_profit_pct": 10,
                    "target_yield_on_cost_pct": 5,
                    "yield_on_cost_basis": "gross_rent"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    },
    "/api/valuation/by-point": {
      "get": {
        "operationId": "findRevenooValuation",
        "tags": [
          "Valuation"
        ],
        "summary": "Key figures of the parcel at a point",
        "description": "Resolves the parcel at a WGS84 point in Switzerland and returns its key figures (as the summary). Use the returned parcel.egrid for the other operations.",
        "parameters": [
          {
            "name": "lat",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "minimum": 45.7,
              "maximum": 47.9
            },
            "example": 47.322534
          },
          {
            "name": "lng",
            "in": "query",
            "required": true,
            "schema": {
              "type": "number",
              "minimum": 5.9,
              "maximum": 10.6
            },
            "example": 7.898823
          }
        ],
        "x-aireon-latency": "CDN hit: a few ms. First call for an EGRID: bound by the RES parcel and market lookups (inputs cached 6 h). The valuation itself computes in under 1 ms.",
        "x-aireon-cache": "GET: public, s-maxage=21600, stale-while-revalidate=86400. The first GET for an EGRID prefetches its other parts into the CDN. POST: not cached.",
        "responses": {
          "200": {
            "description": "The key figures.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Summary"
                }
              }
            }
          },
          "400": {
            "description": "Invalid EGRID or assumptions. `details` lists each invalid assumption.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "404": {
            "description": "No parcel with this EGRID, or an unknown part.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "429": {
            "description": "Too many uncached requests from this client; retry after the Retry-After seconds.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "502": {
            "description": "The data service (RES) failed.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "503": {
            "description": "The data service is not configured.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Assumptions": {
        "type": "object",
        "additionalProperties": false,
        "properties": {
          "asking_land_price": {
            "description": "Asking price of the land. When set, the response appraises it: project IRR, profit on cost and on value, initial yield on cost.",
            "x-aireon-group": "property",
            "type": [
              "number",
              "null"
            ],
            "minimum": 0,
            "maximum": 100000000000
          },
          "rentable_area_m2": {
            "description": "Rentable area (NIA) in m². The unit mix is rescaled to it.",
            "x-aireon-group": "property",
            "type": "number",
            "minimum": 1,
            "maximum": 10000000
          },
          "residential_rent_per_m2_year": {
            "description": "Rent per m² NIA and year for every apartment row of the unit mix (parking keeps its own rent).",
            "x-aireon-group": "property",
            "type": "number",
            "minimum": 0,
            "maximum": 5000
          },
          "vacancy_pct": {
            "description": "Stabilized vacancy, in percent of GPR, applied to every row of the unit mix.",
            "x-aireon-group": "property",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "discount_rate_real_pct": {
            "description": "Real discount rate in percent. Setting it enters the macro rate at this value and resets the premiums to zero; premium assumptions sent with it add to it.",
            "x-aireon-group": "discount_rate",
            "type": "number",
            "minimum": 0,
            "maximum": 30
          },
          "macro_premium_pct": {
            "description": "Macro premium added to the macro rate, in percent.",
            "x-aireon-group": "discount_rate",
            "type": "number",
            "minimum": -10,
            "maximum": 10
          },
          "micro_rating": {
            "description": "Micro location grade, which sets the micro premium.",
            "x-aireon-group": "discount_rate",
            "type": "string",
            "enum": [
              "good",
              "average",
              "weak"
            ]
          },
          "micro_premium_bp": {
            "description": "Micro premium in basis points; replaces the micro rating while set (e.g. from proove). null returns to the rating.",
            "x-aireon-group": "discount_rate",
            "type": [
              "number",
              "null"
            ],
            "minimum": -500,
            "maximum": 500
          },
          "usage_rating": {
            "description": "Use of the property, which sets the usage premium.",
            "x-aireon-group": "discount_rate",
            "type": "string",
            "enum": [
              "residential",
              "office",
              "retail",
              "commercial"
            ]
          },
          "condition_rating": {
            "description": "Condition of the building, which sets the condition premium.",
            "x-aireon-group": "discount_rate",
            "type": "string",
            "enum": [
              "new",
              "like_new",
              "normal_condition",
              "minor_renovation_needed",
              "major_renovation_needed"
            ]
          },
          "special_premium_pct": {
            "description": "Special premium for risks no other factor covers, in percent.",
            "x-aireon-group": "discount_rate",
            "type": "number",
            "minimum": -10,
            "maximum": 10
          },
          "inflation_pct": {
            "description": "Expected inflation in percent; real rate plus inflation gives the nominal rate, shown for reference (the cash flows are real).",
            "x-aireon-group": "discount_rate",
            "type": "number",
            "minimum": -5,
            "maximum": 20
          },
          "forecast_years": {
            "description": "Explicit forecast period in years (RICS §4.65: markets often default to about ten).",
            "x-aireon-group": "dcf",
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          },
          "rent_growth_real_pct": {
            "description": "Real rent growth per year, in percent. Must stay below the real discount rate.",
            "x-aireon-group": "dcf",
            "type": "number",
            "minimum": -10,
            "maximum": 10
          },
          "discount_timing": {
            "description": "Discount each year from its middle or its end.",
            "x-aireon-group": "dcf",
            "type": "string",
            "enum": [
              "mid_year",
              "end_year"
            ]
          },
          "exit_cap_rate_pct": {
            "description": "Exit capitalization rate in percent. null lets it follow the discount rate (RICS §4.59 with no real growth).",
            "x-aireon-group": "dcf",
            "type": [
              "number",
              "null"
            ],
            "minimum": 0.1,
            "maximum": 30
          },
          "exit_sale_costs_pct": {
            "description": "Sale costs deducted from the terminal value, in percent (RICS §4.63).",
            "x-aireon-group": "dcf",
            "type": "number",
            "minimum": 0,
            "maximum": 20
          },
          "lease_up": {
            "description": "Model a lease-up: occupancy rises from the initial level to stabilized over the lease-up months.",
            "x-aireon-group": "dcf",
            "type": "boolean"
          },
          "initial_occupancy_pct": {
            "description": "Occupancy at the start of the lease-up, in percent.",
            "x-aireon-group": "dcf",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "lease_up_months": {
            "description": "Months until stabilized occupancy.",
            "x-aireon-group": "dcf",
            "type": "integer",
            "minimum": 0,
            "maximum": 60
          },
          "cap_rate_pct": {
            "description": "Capitalization rate in percent: direct cap value = stabilized NOI ÷ cap rate.",
            "x-aireon-group": "direct_cap",
            "type": "number",
            "minimum": 0.1,
            "maximum": 30
          },
          "noi_convention": {
            "description": "Which NOI is capitalized.",
            "x-aireon-group": "direct_cap",
            "type": "string",
            "enum": [
              "after_capex",
              "before_capex",
              "custom_factor"
            ]
          },
          "gdv_source": {
            "description": "Where the gross development value (GDV) comes from.",
            "x-aireon-group": "development",
            "type": "string",
            "enum": [
              "dcf",
              "direct_cap",
              "manual"
            ]
          },
          "gdv_manual": {
            "description": "GDV amount when gdv_source is manual.",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 100000000000
          },
          "construction_cost_per_m2_nia": {
            "description": "Construction costs per m² NIA.",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 50000
          },
          "professional_fees_pct": {
            "description": "Professional fees, in percent of construction costs (RICS B1.2.6).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 50
          },
          "contingency_pct": {
            "description": "Contingency, in percent of construction costs (RICS B1.2.5).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 50
          },
          "sale_costs_pct": {
            "description": "Sale costs, in percent of GDV (GDV less sale costs is the NDV).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 20
          },
          "site_acquisition_costs_pct": {
            "description": "Site acquisition costs, in percent of the land price (RICS B1.2.2).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 20
          },
          "development_period_months": {
            "description": "Development period from land purchase to completion, in months.",
            "x-aireon-group": "development",
            "type": "integer",
            "minimum": 1,
            "maximum": 240
          },
          "target_irr_pct": {
            "description": "Target rate of return of the DCF application: a project IRR before finance, real (RICS §6.2.4, §7.2.4).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "finance_rate_pct": {
            "description": "Cost of finance per year, on 100% of land and building costs (RICS B2.2.2).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 30
          },
          "developers_profit_pct": {
            "description": "Developer's profit, in percent of GDV (RICS B2.2.3).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0,
            "maximum": 100
          },
          "target_yield_on_cost_pct": {
            "description": "Target initial yield on cost: annual income over total development cost, in percent (RICS B2.2.3.4).",
            "x-aireon-group": "development",
            "type": "number",
            "minimum": 0.1,
            "maximum": 50
          },
          "yield_on_cost_basis": {
            "description": "The annual income the yield on cost is read on: GPR, or NOI before or after the capex reserve.",
            "x-aireon-group": "development",
            "type": "string",
            "enum": [
              "gross_rent",
              "noi_before_capex",
              "noi_after_capex"
            ]
          }
        },
        "description": "Assumptions you can change. Omitted keys keep the defaults the response reports."
      },
      "AssumptionsRequest": {
        "type": "object",
        "required": [
          "assumptions"
        ],
        "additionalProperties": false,
        "properties": {
          "assumptions": {
            "$ref": "#/components/schemas/Assumptions"
          }
        }
      },
      "Figures": {
        "type": "object",
        "description": "The key figures.",
        "properties": {
          "dcf_value": {
            "description": "Market value by explicit DCF: PV of the net cash flows plus PV of the terminal value.",
            "type": [
              "number",
              "null"
            ]
          },
          "dcf_value_per_m2_nia": {
            "description": "DCF value per m² of rentable area (NIA).",
            "type": [
              "number",
              "null"
            ]
          },
          "discount_rate_real_pct": {
            "description": "Real discount rate, built up from the macro rate (municipal rent level against Zürich) and five premiums.",
            "type": [
              "number",
              "null"
            ]
          },
          "direct_cap_value": {
            "description": "Direct cap value: stabilized NOI ÷ capitalization rate.",
            "type": [
              "number",
              "null"
            ]
          },
          "dcf_implied_cap_rate_pct": {
            "description": "Stabilized NOI ÷ DCF value.",
            "type": [
              "number",
              "null"
            ]
          },
          "land_value_yield_on_cost": {
            "description": "Residual land value at which the initial yield on cost meets its target.",
            "type": [
              "number",
              "null"
            ]
          },
          "land_value_yield_on_cost_per_m2_nia": {
            "description": "The same per m² NIA.",
            "type": [
              "number",
              "null"
            ]
          },
          "land_value_dcf": {
            "description": "Residual land value, DCF application: NPV 0 at the target rate of return.",
            "type": [
              "number",
              "null"
            ]
          },
          "land_value_static": {
            "description": "Residual land value, basic (static) application: after finance and developer's profit.",
            "type": [
              "number",
              "null"
            ]
          },
          "land_value_static_implied_irr_pct": {
            "description": "Project IRR the static land value implies.",
            "type": [
              "number",
              "null"
            ]
          },
          "net_yield_after_capex_pct": {
            "description": "NOI after the capex reserve ÷ DCF value.",
            "type": [
              "number",
              "null"
            ]
          },
          "gross_yield_pct": {
            "description": "GPR ÷ DCF value.",
            "type": [
              "number",
              "null"
            ]
          },
          "noi_after_capex": {
            "description": "Stabilized net operating income after the capex reserve.",
            "type": [
              "number",
              "null"
            ]
          },
          "gross_potential_rent": {
            "description": "Gross potential rent of the unit mix per year.",
            "type": [
              "number",
              "null"
            ]
          },
          "units_total": {
            "description": "Apartments in the unit mix.",
            "type": [
              "number",
              "null"
            ]
          },
          "dcf_value_at_rate_minus_30bp": {
            "description": "DCF value with the discount rate 30 bp lower.",
            "type": [
              "number",
              "null"
            ]
          },
          "dcf_value_at_rate_plus_30bp": {
            "description": "DCF value with the discount rate 30 bp higher.",
            "type": [
              "number",
              "null"
            ]
          },
          "asking_price": {
            "description": "Appraisal of asking_land_price when set: project IRR, profit on cost and on value, initial yield on cost. Null otherwise.",
            "type": [
              "object",
              "null"
            ]
          }
        }
      },
      "Envelope": {
        "type": "object",
        "description": "Fields every response carries.",
        "required": [
          "api_version",
          "valuation_date",
          "parcel",
          "data",
          "links",
          "assumptions"
        ],
        "properties": {
          "api_version": {
            "type": "string"
          },
          "valuation_date": {
            "type": "string",
            "format": "date"
          },
          "parcel": {
            "type": "object",
            "description": "The parcel: EGRID, address, municipality, BFS number, canton, zone, coordinates and areas."
          },
          "data": {
            "type": "object",
            "description": "Provenance: market data status and date, municipal and Zürich reference rents."
          },
          "links": {
            "type": "object",
            "description": "`app` opens this valuation in revenoo; `docs` is this document."
          },
          "assumptions": {
            "$ref": "#/components/schemas/Assumptions"
          }
        }
      },
      "Summary": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "figures": {
                "$ref": "#/components/schemas/Figures"
              }
            }
          }
        ]
      },
      "Part": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "description": "The part under its own key (dcf, discount_rate, direct_cap, land_value, yield_on_cost, rents or sensitivity), with `method` and `sources`.",
            "additionalProperties": true
          }
        ]
      },
      "Valuation": {
        "allOf": [
          {
            "$ref": "#/components/schemas/Envelope"
          },
          {
            "type": "object",
            "properties": {
              "figures": {
                "$ref": "#/components/schemas/Figures"
              },
              "dcf": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "discount_rate": {
                "type": "object"
              },
              "direct_cap": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "land_value": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "yield_on_cost": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "rents": {
                "type": "object"
              },
              "sensitivity": {
                "type": "object"
              }
            }
          }
        ]
      },
      "Error": {
        "type": "object",
        "required": [
          "error"
        ],
        "properties": {
          "error": {
            "type": "string"
          },
          "details": {
            "description": "For invalid assumptions: one { key, message } per problem."
          }
        }
      }
    }
  }
}