# Input explanation for version 01-01-2025

## **WWS Points API — 01-01-2025 Rules**

### Overview

This page describes the JSON structure required for submitting property details to the API for calculating WWS points according to the **01-01-2025** rules.\
Each section of the JSON corresponds to different aspects of a property, including rooms, kitchen features, parking, sanitary facilities, and more.\
The specification is split into:

* **A. Independent living spaces**
* **B. Non-independent living spaces**

***

### **A. Independent living spaces**

#### **General Property Attributes**

| Field                             | Type    | Example                                           | Validation / Notes                                                                                              |
| --------------------------------- | ------- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| `house_type`                      | `str`   | `"row house"`                                     | Required string describing property type.                                                                       |
| `build_year`                      | `int`   | `1995`                                            | Must be a positive integer. Used if no valid energy label/index.                                                |
| `energy_label`                    | `str`   | `"A"`, `"B"`, `""`                                | Optional — allowed values in code; if empty and `energy_index_existence` is `True`, `energy_index` is required. |
| `energy_index_existence`          | `bool`  | `True`                                            | If `True` and `energy_label` is empty, `energy_index` is required and used for points calculation.              |
| `energy_index`                    | `float` | `1.45`                                            | Used only if `energy_label` is empty and `energy_index_existence` is `True`.                                    |
| `energy_performance_compensation` | `bool`  | `True`                                            | Boolean flag for compensation calculation.                                                                      |
| `disability_costs`                | `float` | `1200.0`                                          | No negative values allowed.                                                                                     |
| `disabled_people`                 | `int`   | `1`                                               | Integer ≥ 0.                                                                                                    |
| `monument`                        | `str`   | `"national"`, `"municipal"`, `"provincial"`, `""` | Lower-case string; only allowed values.                                                                         |
| `doorbell`                        | `bool`  | `True`                                            | Boolean flag.                                                                                                   |
| `woz_value`                       | `float` | `250000.0`                                        | Must be ≥ 0; minimum WOZ used in calc: `77582`.                                                                 |
| `woz_valuation_year`              | `int`   | `2023`                                            | Must be `2023` or `2024`.                                                                                       |
| `usable_surface_area`             | `float` | `85.5`                                            | Must be ≥ 0.                                                                                                    |
| `corop_area_amsterdam_or_utrecht` | `bool`  | `True`                                            | Boolean flag.                                                                                                   |
| `care_home`                       | `bool`  | `True`                                            | Boolean flag.                                                                                                   |

#### **1. `rooms` block**

**Overview:** Describes each non-kitchen, non-sanitary room.

| Field                           | Type    | Example  | Validation / Notes                               |
| ------------------------------- | ------- | -------- | ------------------------------------------------ |
| `type_of_room`                  | `str`   | `"room"` | `"room"` or `"other"`.                           |
| `attic_without_fixed_staircase` | `bool`  | `True`   | Relevant if type is `"other"` and it's an attic. |
| `surface_area`                  | `float` | `12.5`   | Must be ≥ 0.                                     |
| `shared_addresses`              | `int`   | `1`      | ≥ 1.                                             |
| `heated`                        | `bool`  | `True`   | Boolean flag.                                    |
| `cooled`                        | `bool`  | `True`   | Boolean flag.                                    |

Example:

```json
"rooms": [
  {
    "type_of_room": "room",
    "attic_without_fixed_staircase": false,
    "surface_area": 10.0,
    "shared_addresses": 1,
    "heated": true,
    "cooled": true
  }
]
```

#### **2. `kitchen` block**

| Field               | Type      | Example   | Description                           |
| ------------------- | --------- | --------- | ------------------------------------- |
| `type_of_room`      | `string`  | `"room"`  | `"room"` or `"other"`.                |
| `open_kitchen`      | `boolean` | `false`   | True if open to another room.         |
| `surface_area`      | `number`  | `10.0`    | Area in m².                           |
| `countertop_length` | `number`  | `2.5`     | Counter length in meters.             |
| `shared_addresses`  | `integer` | `1`       | Addresses sharing kitchen.            |
| `heated`            | `boolean` | `true`    | Has heating.                          |
| `cooled`            | `boolean` | `true`    | Has cooling.                          |
| `kitchen_features`  | `object`  | see below | Keys are features, values are counts. |

Example:

```json
"kitchen": [
  {
    "type_of_room": "room",
    "open_kitchen": false,
    "surface_area": 10,
    "countertop_length": 2.5,
    "shared_addresses": 1,
    "heated": true,
    "cooled": true,
    "kitchen_features": {
      "extractor_system": 1,
      "induction_hob": 1
    }
  }
]
```

***

Same structure as 2024, no changes only `shared_addresses` is used (no `shared_spaces` here). All kitchen features are integer counts.

#### **3. `sanitary` block**

| Field               | Type                 | Example                   | Validation / Notes                     |
| ------------------- | -------------------- | ------------------------- | -------------------------------------- |
| `type_of_room`      | `str`                | `"room"`                  | `"room"` or `"other"`.                 |
| `surface_area`      | `float`              | `10.0`                    | ≥ 0.                                   |
| `heated`            | `bool`               | `True`                    | Boolean flag.                          |
| `cooled`            | `bool`               | `True`                    | Boolean flag.                          |
| `shower_facility`   | `str`                | `"shower/bath"`           | `"bath"`, `"shower"`, `"shower/bath"`. |
| `toilet`            | `int`                | `2`                       | Count.                                 |
| `wall_hung_toilet`  | `int`                | `1`                       | Count — **note: int, not bool**.       |
| `shared_addresses`  | `int`                | `1`                       | ≥ 1.                                   |
| `sanitary_features` | `dict[str,int/bool]` | `{ "washbasin": 1, ... }` | Feature counts or booleans.            |

Example:

```json
"sanitary": [
  {
    "type_of_room": "room",
    "surface_area": 10,
    "heated": true,
    "cooled": true,
    "shower_facility": "shower",
    "toilet": 1,
    "shared_addresses": 1,
    "sanitary_features": {
      "washbasin": 1
    }
  }
]
```

#### **4. `toilet` block**

| Field              | Type      | Example  | Description            |
| ------------------ | --------- | -------- | ---------------------- |
| `type_of_room`     | `string`  | `"room"` | `"room"` or `"other"`. |
| `surface_area`     | `number`  | `2.0`    | m².                    |
| `heated`           | `boolean` | `true`   | Has heating.           |
| `cooled`           | `boolean` | `false`  | Has cooling.           |
| `wall_hung_toilet` | `boolean` | `false`  | Wall-mounted toilet.   |
| `washbasin`        | `integer` | `1`      | Count.                 |
| `shared_addresses` | `integer` | `1`      | Addresses sharing.     |

Same fields as 2024, but here `wall_hung_toilet` is **bool**.

#### **5. `outdoor` block**

| Field              | Type      | Example | Description        |
| ------------------ | --------- | ------- | ------------------ |
| `surface_area`     | `number`  | `50.0`  | m².                |
| `shared_addresses` | `integer` | `1`     | Addresses sharing. |

Same as 2024, only `shared_addresses` exists.

#### **6. `parking` block**

| Field              | Type      | Example | Description           |
| ------------------ | --------- | ------- | --------------------- |
| `parking_type`     | `integer` | `2`     | Parking type code.    |
| `shared_addresses` | `integer` | `1`     | Addresses sharing.    |
| `charging_station` | `boolean` | `false` | Has charging station. |

Same as 2024, only `shared_addresses` exists.

### **B. Non-independent living spaces**

#### **General Property Attributes**

Same as independent except:

* `glass_surface_living_room` (`boolean`)
* `lowest_window_frame_living_room` (`boolean`)
* `accessibility_via_landlord` (`boolean`)
* `corop_region` instead of Amsterdam/Utrecht flag.

***

**Important:** Every block in B has **both** `shared_addresses` and `shared_spaces`.

#### 1. `rooms` block (B)

Same as A rooms **plus**:

* `shared_spaces` (`int`) — number of living spaces sharing the room.

#### 2. `kitchen` block (B)

Same as A kitchen **plus**:

* `shared_spaces` (`int`) — number of living spaces sharing the kitchen.

#### 3. `sanitary` block (B)

Same as A sanitary **plus**:

* `shared_spaces` (`int`) — number of living spaces sharing the sanitary facility.

#### 4. `toilet` block (B)

Same as A toilet **plus**:

* `shared_spaces` (`int`) — number of living spaces sharing the toilet facility.

*(Still: `wall_hung_toilet` is bool here.)*

#### 5. `outdoor` block (B)

Same as A outdoor **plus**:

* `shared_spaces` (`int`).

#### 6. `parking` block (B)

Same as A parking **plus**:

* `shared_spaces` (`int`).

### Body Request Example for Independent Home 01/01/2025

```json
{
  "house_type": "Eengezinswoning",
  "rooms": [
    {
      "type_of_room": "room",
      "attic_without_fixed_staircase": false,
      "surface_area": 25.5,
      "shared_addresses": 1,
      "heated": true,
      "cooled": false
    },
    {
      "type_of_room": "room",
      "attic_without_fixed_staircase": false,
      "surface_area": 15.0,
      "shared_addresses": 1,
      "heated": true,
      "cooled": false
    },
    {
      "type_of_room": "other",
      "attic_without_fixed_staircase": false,
      "surface_area": 8.0,
      "shared_addresses": 1,
      "heated": false,
      "cooled": false
    }
  ],
  "kitchen": [
    {
      "type_of_room": "room",
      "open_kitchen": true,
      "surface_area": 10.0,
      "countertop_length": 2.5,
      "shared_addresses": 1,
      "heated": true,
      "cooled": false,
      "kitchen_features": {
        "extractor_system": 1,
        "induction_hob": 1,
        "ceramic_hob": 0,
        "gas_hob": 0,
        "refrigerator": 1,
        "freezer": 1,
        "oven_electric": 1,
        "oven_gas": 0,
        "microwave": 1,
        "dishwasher": 1,
        "extra_cupboard_space_per_60cm": 2,
        "one_hand_mixer_tap": 1,
        "one_hand_mixer_tap_with_boiling_function": 0,
        "thermostatic_mixer_tap": 0,
        "thermostatic_mixer_tap_with_boiling_function": 0
      }
    }
  ],
  "parking": [
    {
      "parking_type": 1,
      "surface_area": 12.0,
      "shared_addresses": 1,
      "charging_station": true
    }
  ],
  "sanitary": [
    {
      "type_of_room": "other",
      "surface_area": 6.0,
      "heated": true,
      "cooled": false,
      "shower_facility": "shower/bath",
      "toilet": 1,
      "wall_hung_toilet": 1,
      "shared_addresses": 1,
      "sanitary_features": {
        "washbasin": 1,
        "multi_person_washbasin": 0,
        "cupboard_space": true,
        "power_outlet": 1,
        "build_in_cupboard": 1,
        "complete_separation_of_shower": 1,
        "bath_with_bubble_function": 0,
        "one_hand_mixer_tap": 1,
        "thermostatic_mixer_tap": 0,
        "towel_radiator": 1
      }
    }
  ],
  "outdoor": [
    {
      "surface_area": 30.0,
      "shared_addresses": 1
    }
  ],
  "toilet": [
    {
      "type_of_room": "other",
      "surface_area": 1.5,
      "heated": false,
      "cooled": false,
      "wall_hung_toilet": true,
      "washbasin": 1,
      "shared_addresses": 1
    }
  ],
  "build_year": 2010,
  "energy_label": "A+",
  "energy_index_existence": false,
  "energy_index": 0,
  "energy_performance_compensation": true,
  "disability_costs": 0,
  "disabled_people": 0,
  "monument": "",
  "doorbell": true,
  "woz_value": 350000,
  "woz_valuation_year": 2023,
  "usable_surface_area": 95.0,
  "corop_area_amsterdam_or_utrecth": false,
  "care_home": false
}
```

### Body Request Example for non Independent Home 01/01/2025

```json
{
  "rooms": [
    {
      "type_of_room": "room",
      "attic_without_fixed_staircase": false,
      "surface_area": 18.0,
      "shared_spaces": 1,
      "shared_addresses": 1,
      "heated": true,
      "cooled": false
    }
  ],
  "kitchen": [
    {
      "type_of_room": "room",
      "open_kitchen": false,
      "surface_area": 12.0,
      "countertop_length": 3.5,
      "shared_spaces": 4,
      "shared_addresses": 1,
      "heated": true,
      "cooled": false,
      "kitchen_features": {
        "extractor_system": 1,
        "induction_hob": 0,
        "ceramic_hob": 0,
        "gas_hob": 1,
        "refrigerator": 2,
        "freezer": 1,
        "oven_electric": 1,
        "oven_gas": 0,
        "microwave": 1,
        "dishwasher": 1,
        "extra_cupboard_space_per_60cm": 3,
        "one_hand_mixer_tap": 1,
        "one_hand_mixer_tap_with_boiling_function": 0,
        "thermostatic_mixer_tap": 0,
        "thermostatic_mixer_tap_with_boiling_function": 0
      }
    }
  ],
  "parking": [],
  "sanitary": [
    {
      "type_of_room": "other",
      "surface_area": 5.0,
      "heated": true,
      "cooled": false,
      "shower_facility": "shower",
      "toilet": 1,
      "wall_hung_toilet": 0,
      "shared_spaces": 4,
      "shared_addresses": 1,
      "sanitary_features": {
        "washbasin": 2,
        "multi_person_washbasin": 0,
        "cupboard_space": true,
        "power_outlet": 2,
        "build_in_cupboard": 0,
        "complete_separation_of_shower": 1,
        "bath_with_bubble_function": 0,
        "one_hand_mixer_tap": 2,
        "thermostatic_mixer_tap": 0,
        "towel_radiator": 0
      }
    }
  ],
  "outdoor": [
    {
      "surface_area": 50.0,
      "shared_spaces": 4,
      "shared_addresses": 1
    }
  ],
  "toilet": [
      {
      "type_of_room": "other",
      "surface_area": 1.2,
      "heated": false,
      "cooled": false,
      "wall_hung_toilet": false,
      "washbasin": 1,
      "shared_spaces": 4,
      "shared_addresses": 1
    }
  ],
  "build_year": 1985,
  "energy_label": "C",
  "energy_index_existence": false,
  "energy_index": 0,
  "disability_costs": 0,
  "disabled_people": 0,
  "monument": "",
  "doorbell": true,
  "glass_surface_living_room": 1.5,
  "lowest_window_frame_living_room": 1.2,
  "accessibility_via_landlord": false,
  "woz_value": 500000,
  "woz_valuation_year": 2024,
  "usable_surface_area": 150.0,
  "corop_region": "utrecht",
  "care_home": false
}


```
