Ideal House
Naar inhoud gaan

Documentatie voor de API voor plattegronden#

Basis-URL: https://api.ideal.house
Versie: v1
Bijgewerkt: 2026-08-09


📖 Overzicht#

De API voor plattegronden maakt met AI één zwart-witte conceptplattegrond van een woning in CAD-stijl, van bovenaf gezien, op basis van gestructureerde ruimtevereisten en een optionele eigen tekstinstructie of referentieafbeelding.

De uitvoer is bedoeld om in een vroege fase indelingen te verkennen. Het is geen bouwtekening. Gegenereerde afmetingen, geometrie, plaatsing van voorzieningen en naleving van bouwvoorschriften moeten door een gekwalificeerde professional worden beoordeeld.

De werkstroom is asynchroon:

  1. Een taak aanmaken — Dien de plattegrondparameters in en ontvang een taskId.
  2. Resultaten regelmatig opvragen — Vraag het resultaateindpunt op met de taskId totdat de taak een eindstatus bereikt.

🔐 Authenticatie#

Alle openbare API-verzoeken moeten een API-sleutel bevatten.

VerzoekheaderVerplichtWaarde
APIKEY✅ JaJe API-sleutel
Content-Type✅ Ja bij POSTapplication/json

[!WARNING] Bewaar je API-sleutel veilig. Stel deze niet bloot in code aan de clientzijde of openbare repositories.


💰 Creditafschrijving#

Credits worden afgeschreven nadat een generatietaak succesvol is aangemaakt. Als de taak uiteindelijk mislukt, worden de afgeschreven credits automatisch terugbetaald. Onvoldoende credits leveren foutcode 9051 op.

Modeltype (modelType)UitvoerafmetingenTegoedeenheden
Base1536 × 102410
Pro2496 × 166420

Flash wordt niet ondersteund door de API voor plattegronden.

Zie Referentie voor creditafschrijving voor het algemene factureringsgedrag.


📌 API-endpoints#

1. Een plattegrondtaak aanmaken#

Maakt een taak voor het genereren van een plattegrond aan en retourneert een unieke taak-ID.

Eindpunt

http
POST /api/v1/floorPlan/generate

Verzoekheaders

VerzoekheaderVerplichtBeschrijving
APIKEY✅ JaAPI-authenticatiesleutel
Content-Type✅ JaMoet application/json zijn

Verzoekinhoud#

VeldTypeVerplichtBeschrijvingStandaardwaarde
bedroomsinteger❌ NeeAantal slaapkamers van 0 tot 52
bathroomsnumber❌ NeeTotaal aantal badkamers van 0.5 tot 4, in stappen van 0.51.5
totalAreastring✅ JaPositieve gewenste totale oppervlakte met eenheid of ft², zoals 220 m² of 1386 ft²
bedroomAreaRangesarray<object>❌ NeeOptionele richtlijnen voor slaapkamerafmetingen. Zie Oppervlaktebereiken voor slaapkamersAfgeleid van totalArea wanneer weggelaten
bathroomDetailsobject❌ NeeVoorkeuren uitsluitend voor volledige badkamers. Zie Badkamerdetails
kitchenDetailsobject❌ NeeOptionele keukenconfiguratie. Zie Keukendetails
keyRoomsarray<string>❌ NeeExtra kamers of ruimten. Zie Bijzondere kamers[]
promptstring❌ NeeAanvullende prioriteiten voor de indeling. Kan gestructureerde aantallen of harde visuele beperkingen niet overschrijven""
refImageUrlstring❌ NeeOpenbaar toegankelijke URL van een referentieafbeelding""
modelTypestring❌ NeeMogelijke waarden: Base, ProBase

[!IMPORTANT] De openbare API valideert bedrooms momenteel als 0–5 en bathrooms als 0.5–4. Waarden die in een andere clientinterface beschikbaar zijn, verruimen deze serverlimieten niet.

Algemene verzoekregels#

  • Alle opsommingswaarden zijn hoofdlettergevoelig en moeten de Engelse waarden uit dit document gebruiken.
  • totalArea is een gewenste totale oppervlakte die de schaal en verhoudingen stuurt; deze wordt niet behandeld als een exacte bouwmaat.
  • Bij het samenstellen van de gestructureerde afbeeldingsinstructie wordt de effectieve eigen tekstinstructie beperkt tot de eerste 800 tekens.
  • Gestructureerde velden hebben voorrang op tegenstrijdige instructies in prompt.
  • Een geslaagde taak genereert precies één afbeelding.

📐 Totale oppervlakte#

totalArea bevat één positieve numerieke waarde gevolgd door een oppervlakte-eenheid.

EenheidVoorbeeld
220 m²
ft²1386 ft²

Een spatie vóór de eenheid wordt aanbevolen. Positieve decimale waarden worden geaccepteerd.

Geldige voorbeelden:

json
{
  "totalArea": "200 m²"
}
json
{
  "totalArea": "1850 ft²"
}

🛏️ Oppervlaktebereiken voor slaapkamers#

bedroomAreaRanges geeft richtlijnen voor de relatieve grootte van slaapkamers. Het vraagt niet om numerieke oppervlaktelabels in de gegenereerde afbeelding.

Elk element heeft de volgende structuur:

VeldTypeVerplichtBeschrijving
namestring❌ NeeAanduiding van de slaapkamer, bijvoorbeeld Room 1 (Master) of Room 2
minAreastring❌ NeePositieve minimumoppervlakte
maxAreastring❌ NeePositieve maximumoppervlakte; mag niet kleiner zijn dan minArea
unitstring❌ NeeMogelijke waarden: , ft²; gebruik dezelfde eenheid als totalArea

Voorbeeld met expliciet bereik

json
{
  "bedroomAreaRanges": [
    {
      "name": "Room 1 (Master)",
      "minArea": "30",
      "maxArea": "40",
      "unit": "m²"
    },
    {
      "name": "Room 2",
      "minArea": "20",
      "maxArea": "30",
      "unit": "m²"
    }
  ]
}

Regels wanneer een niet-lege array wordt opgegeven:

  • De lengte moet gelijk zijn aan bedrooms.
  • Elke opgegeven minArea en maxArea moet een positieve numerieke tekenreeks zijn.
  • Wanneer beide waarden zijn opgegeven, geldt minArea <= maxArea.
  • Indien opgegeven, moet unit gelijk zijn aan of ft².
  • Namen blijven behouden. Lege elementen of null-elementen geven geen richtlijn voor de grootte.

Automatische bereiken bij weglaten#

Het veld mag worden weggelaten of als lege array worden verstuurd. Als geen enkel element een effectieve minArea of maxArea bevat, leidt het gestructureerde generatiepad interne slaapkamerbereiken af van totalArea en bedrooms:

  • Het oppervlaktebudget voor slaapkamers begint bij 20% van de totale oppervlakte voor één slaapkamer.
  • Het budget neemt met 7.5 procentpunten toe per extra slaapkamer, tot maximaal 50%.
  • De eerste slaapkamer krijgt wegingsfactor 1.3 voor de grootte; elke andere slaapkamer krijgt wegingsfactor 1.0.
  • Elke streefwaarde wordt omgezet in een benaderend bereik van ±10%, afgerond op hele oppervlakte-eenheden.
  • De eenheid wordt overgenomen van totalArea.
  • Bestaande niet-lege kamernamen blijven behouden; anders gebruikt de server Room 1, Room 2 enzovoort.

Voor 200 m² en 4 slaapkamers is de huidige afgeleide richtlijn ongeveer:

json
[
  { "name": "Room 1", "minArea": "23", "maxArea": "28", "unit": "m²" },
  { "name": "Room 2", "minArea": "18", "maxArea": "22", "unit": "m²" },
  { "name": "Room 3", "minArea": "18", "maxArea": "22", "unit": "m²" },
  { "name": "Room 4", "minArea": "18", "maxArea": "22", "unit": "m²" }
]

Deze waarden zijn interne richtlijnen voor de verhoudingen en garanderen geen definitieve kameroppervlakten. Expliciete geldige bereiken hebben altijd voorrang op automatische bereiken.

Wanneer bedrooms gelijk is aan 0, laat je bedroomAreaRanges weg of stuur je [].


🛁 Badkamerdetails#

bathrooms geeft het totale aantal badkamers aan:

  • Het gehele deel is het aantal volledige badkamers.
  • Een fractie van .5 voegt één toiletruimte toe.
  • Voor elke volledige badkamer wordt een toilet, wastafel(meubel) en douche of natte zone gevraagd.
  • Een toiletruimte bevat alleen een toilet en wastafel(meubel), zonder douche of badkuip.

bathroomDetails configureert uitsluitend volledige badkamers:

json
{
  "bathroomDetails": {
    "fullBathroomOptions": [
      {
        "name": "Bathroom 1",
        "wetDrySeparation": "yes",
        "bathtub": "required"
      },
      {
        "name": "Bathroom 2",
        "wetDrySeparation": "no",
        "bathtub": "optional"
      }
    ]
  }
}
VeldTypeToegestane waardenBeschrijving
namestringBathroom 1, Bathroom 2 enzovoortOptionele weergaveaanduiding
wetDrySeparationstring / nullyes, no, nullOf een afgescheiden natte zone moet worden getoond
bathtubstring / nullno, optional, required, nullVoorkeur voor een badkuip

Regels:

  • fullBathroomOptions.length mag niet groter zijn dan floor(bathrooms).
  • De array mag uitsluitend de volledige badkamers bevatten waarvoor voorkeuren zijn geselecteerd.
  • Een waarde van null betekent niet opgegeven.
  • Een verplichte badkuip komt bovenop de standaardvoorzieningen van een volledige badkamer; deze vervangt het toilet of de douche niet.
  • Een scheiding tussen nat en droog is een interne scheidingswand binnen een meegetelde badkamer, geen extra badkamer.

🍳 Keukendetails#

Alle onderliggende velden van kitchenDetails zijn optioneel. Laat het hele object weg wanneer geen keukenvoorkeur is geselecteerd.

json
{
  "kitchenDetails": {
    "type": "open",
    "size": "standard",
    "layout": "U",
    "islandType": "preparation",
    "storage": "maximum",
    "features": ["breakfast nook", "pantry"]
  }
}
VeldTypeToegestane waarden
typestringopen, semi-open, closed
sizestringsmall, standard, large, extra large
layoutstringI, L, U, gallery
islandTypestringno, preparation, cooking, entertainment
storagestringminimal, standard, maximum
featuresarray<string>eating bar, breakfast nook, pantry

Een gedeeltelijke configuratie is geldig. Bijvoorbeeld:

json
{
  "kitchenDetails": {
    "type": "semi-open"
  }
}

🚪 Bijzondere kamers#

keyRooms accepteert een array met deze exacte waarden:

WaardeBeschrijving
walk-in closetAfzonderlijke inloopkast verbonden met een slaapkamerzone
laundry roomAfzonderlijke wasruimte
storage roomAlgemene berging
utility roomTechnische of dienstruimte
home officeAfzonderlijk kantoor of studeerkamer
garageGarage met een voertuigopening naar buiten en interne toegang tot de woning
pantryVoorraadkast naast de keuken
combined living-diningEén gezamenlijke woon- en eetzone
balconyBuitenbalkon verbonden met de woonruimte of hoofdslaapkamer

De oude webwaarde balcon wordt ook geaccepteerd en genormaliseerd naar balcony.

Regels:

  • Lege waarden worden genegeerd en dubbele waarden verwijderd.
  • Geselecteerde bijzondere kamers worden eenmaal aangevraagd.
  • Niet-geselecteerde optionele ruimten worden uitgesloten van het gegenereerde ruimteprogramma.
  • Als pantry zowel in kitchenDetails.features als in keyRooms voorkomt, wordt slechts één voorraadkast aangevraagd.

Voorbeeld:

json
{
  "keyRooms": [
    "garage",
    "home office",
    "combined living-dining"
  ]
}

🖼️ Referentieafbeelding#

refImageUrl is optioneel en moet rechtstreeks toegankelijk zijn voor de API-server.

Vereisten:

  • Bestandsformaat: JPG/JPEG, PNG of WebP.
  • Maximale bestandsgrootte: 20 MB.
  • Minimale afmetingen: 128 × 128 px.
  • Maximale afmetingen: 6,000 × 6,000 px. Grotere afbeeldingen worden vóór verwerking proportioneel verkleind.

De referentieafbeelding stuurt de indeling, onderlinge ligging, verhoudingen of visuele stijl. Deze overschrijft geen gestructureerde aantallen kamers of andere harde beperkingen.


🤖 Modeltypen#

WaardeBeschrijving
BaseStandaard. Evenwichtige generatiekwaliteit, uitvoer van 1536 × 1024
ProUitvoer met hogere resolutie van 2496 × 1664 en een langere verwachte generatietijd

Alleen Base en Pro worden ondersteund.


Velden buiten de openbare functionele interface#

Openbare API-clients mogen niet afhankelijk zijn van de volgende velden:

VeldOpmerkingen
imageNumbersDe huidige generator retourneert altijd één afbeelding; dit veld is niet nodig
extDataInterne metadata voor het volgen van webtaakgroepen; openbare clients moeten dit weglaten
isApiCallBepaald door het API-eindpunt, niet door de verzoekinhoud
genByMemberInterne generatiemetadata, geen verzoekveld voor plattegronden

Verwijderde oude velden die niet mogen worden verstuurd:

text
floorplanSetting
roomCounts
grossArea
totalAreaValue
totalAreaUnit
totalAreaType
fullBathrooms
halfBathrooms
halfBathroomRequirement
kitchenType
diningRooms
livingRooms
extras
referenceImage
hasDetailOptions

📥 Voorbeelden voor het aanmaken van een taak#

Minimaal verzoek met automatische slaapkamerbereiken#

bash
curl -X POST "https://api.ideal.house/api/v1/floorPlan/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "bedrooms": 4,
    "bathrooms": 2,
    "totalArea": "200 m²",
    "modelType": "Pro",
    "prompt": "Upper floor of a two-story Saudi Arabian villa with a master bedroom, family living area, staircase landing, and balcony"
  }'

Volledig verzoek#

cURL
bash
curl -X POST "https://api.ideal.house/api/v1/floorPlan/generate" \
  -H "APIKEY: your_api_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "bedrooms": 3,
    "bathrooms": 2.5,
    "totalArea": "220 m²",
    "bedroomAreaRanges": [
      {"name": "Room 1 (Master)", "minArea": "30", "maxArea": "40", "unit": "m²"},
      {"name": "Room 2", "minArea": "20", "maxArea": "30", "unit": "m²"},
      {"name": "Room 3", "minArea": "20", "maxArea": "30", "unit": "m²"}
    ],
    "bathroomDetails": {
      "fullBathroomOptions": [
        {"name": "Bathroom 1", "wetDrySeparation": "yes", "bathtub": "required"},
        {"name": "Bathroom 2", "wetDrySeparation": "no", "bathtub": "optional"}
      ]
    },
    "kitchenDetails": {
      "type": "open",
      "size": "standard",
      "layout": "U",
      "islandType": "preparation",
      "storage": "maximum",
      "features": ["breakfast nook", "pantry"]
    },
    "keyRooms": ["garage", "home office", "combined living-dining"],
    "prompt": "Bright modern home with good natural lighting",
    "refImageUrl": "https://example.com/reference-plan.png",
    "modelType": "Pro"
  }'
Java (OkHttp)
java
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class FloorPlanApiExample {

    private static final String BASE_URL = "https://api.ideal.house";
    private static final String API_KEY = "your_api_key_here";

    public static void main(String[] args) throws Exception {
        OkHttpClient client = new OkHttpClient();
        String json = """
                {
                  "bedrooms": 4,
                  "bathrooms": 2,
                  "totalArea": "200 m²",
                  "keyRooms": ["walk-in closet", "balcony"],
                  "prompt": "Upper floor with a master bedroom and family living area",
                  "modelType": "Pro"
                }
                """;

        Request request = new Request.Builder()
                .url(BASE_URL + "/api/v1/floorPlan/generate")
                .addHeader("APIKEY", API_KEY)
                .addHeader("Content-Type", "application/json")
                .post(RequestBody.create(json, MediaType.parse("application/json")))
                .build();

        try (Response response = client.newCall(request).execute()) {
            System.out.println(response.body().string());
        }
    }
}
Python (requests)
python
import requests

BASE_URL = "https://api.ideal.house"
API_KEY = "your_api_key_here"

payload = {
    "bedrooms": 4,
    "bathrooms": 2,
    "totalArea": "200 m²",
    "keyRooms": ["walk-in closet", "balcony"],
    "prompt": "Upper floor with a master bedroom and family living area",
    "modelType": "Pro",
}

response = requests.post(
    f"{BASE_URL}/api/v1/floorPlan/generate",
    headers={"APIKEY": API_KEY, "Content-Type": "application/json"},
    json=payload,
)
response.raise_for_status()
print("Task ID:", response.json()["data"])
Node.js (axios)
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';

async function createFloorPlanTask() {
  const response = await axios.post(
    `${BASE_URL}/api/v1/floorPlan/generate`,
    {
      bedrooms: 4,
      bathrooms: 2,
      totalArea: '200 m²',
      keyRooms: ['walk-in closet', 'balcony'],
      prompt: 'Upper floor with a master bedroom and family living area',
      modelType: 'Pro'
    },
    {
      headers: {
        APIKEY: API_KEY,
        'Content-Type': 'application/json'
      }
    }
  );

  console.log('Task ID:', response.data.data);
  return response.data.data;
}

createFloorPlanTask();

Antwoord bij succesvol aanmaken van een taak#

json
{
  "code": 0,
  "message": "success",
  "data": 1234567890123456789
}
VeldTypeBeschrijving
codeinteger0 geeft aan dat de taak succesvol is aangemaakt
messagestringAntwoordbericht
datalongTaak-ID om het resultaateindpunt regelmatig op te vragen

2. Taakresultaat ophalen#

Retourneert de taakvoortgang en de gegenereerde afbeelding zodra deze beschikbaar is.

Eindpunt

http
GET /api/v1/floorPlan/result?taskId={taskId}

Verzoekheaders

VerzoekheaderVerplichtBeschrijving
APIKEY✅ JaAPI-authenticatiesleutel

Queryparameters

QueryparameterTypeVerplichtBeschrijving
taskIdlong✅ JaTaak-ID die het aanmaakendpoint retourneert

Voorbeelden van resultaatverzoeken#

cURL
bash
curl -X GET "https://api.ideal.house/api/v1/floorPlan/result?taskId=1234567890123456789" \
  -H "APIKEY: your_api_key_here"
Python status regelmatig opvragen
python
import time
import requests

BASE_URL = "https://api.ideal.house"
API_KEY = "your_api_key_here"
task_id = 1234567890123456789

while True:
    response = requests.get(
        f"{BASE_URL}/api/v1/floorPlan/result",
        headers={"APIKEY": API_KEY},
        params={"taskId": task_id},
    )
    response.raise_for_status()
    task = response.json()["data"]
    print(task["status"], task["percentage"], task["waitNumber"])

    if task["status"] in ("Success", "Failed", "Termination"):
        break

    time.sleep(3)

if task["status"] == "Success":
    print("Result URL:", task["output"]["resultUrl"])
Node.js status regelmatig opvragen
javascript
const axios = require('axios');

const BASE_URL = 'https://api.ideal.house';
const API_KEY = 'your_api_key_here';

async function pollFloorPlanResult(taskId) {
  while (true) {
    const response = await axios.get(
      `${BASE_URL}/api/v1/floorPlan/result`,
      {
        headers: { APIKEY: API_KEY },
        params: { taskId }
      }
    );

    const task = response.data.data;
    console.log(task.status, task.percentage, task.waitNumber);

    if (['Success', 'Failed', 'Termination'].includes(task.status)) {
      if (task.status === 'Success') {
        console.log('Result URL:', task.output.resultUrl);
      }
      return task;
    }

    await new Promise(resolve => setTimeout(resolve, 3000));
  }
}

pollFloorPlanResult('1234567890123456789');

Antwoord voor een voltooide taak#

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Success",
    "waitNumber": 0,
    "percentage": 100,
    "input": {
      "bedrooms": 4,
      "bathrooms": 2,
      "totalArea": "200 m²",
      "bedroomAreaRanges": [
        {"name": "Room 1", "minArea": "23", "maxArea": "28", "unit": "m²"},
        {"name": "Room 2", "minArea": "18", "maxArea": "22", "unit": "m²"},
        {"name": "Room 3", "minArea": "18", "maxArea": "22", "unit": "m²"},
        {"name": "Room 4", "minArea": "18", "maxArea": "22", "unit": "m²"}
      ],
      "keyRooms": ["walk-in closet", "balcony"],
      "prompt": "Upper floor with a master bedroom and family living area",
      "modelType": "Pro"
    },
    "output": {
      "resultUrl": "https://cdn.ideal.house/output/floor-plan.jpg",
      "width": 2496,
      "height": 1664
    }
  }
}

Antwoord tijdens verwerking#

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Processing",
    "waitNumber": 1,
    "percentage": 45,
    "input": {
      "bedrooms": 4,
      "bathrooms": 2,
      "totalArea": "200 m²",
      "modelType": "Pro"
    },
    "output": null
  }
}

Antwoord voor een mislukte taak#

json
{
  "code": 0,
  "message": "success",
  "data": {
    "id": 1234567890123456789,
    "status": "Failed",
    "waitNumber": 0,
    "percentage": 0,
    "input": {
      "bedrooms": 4,
      "bathrooms": 2,
      "totalArea": "200 m²",
      "modelType": "Pro"
    },
    "output": null
  }
}

Resultaatvelden#

VeldTypeBeschrijving
idlongTaak-ID
statusstringHuidige taakstatus
waitNumberintegerAantal taken vóór deze taak in de wachtrij; 0 betekent dat er geen taken voor staan
percentageintegerGeschat voltooiingspercentage van 0 tot 100
inputobjectGenormaliseerde taakinvoer, inclusief automatisch afgeleide slaapkamerbereiken indien van toepassing
outputobject / nullGegenereerde uitvoer wanneer de taak slaagt; anders meestal null
output.resultUrlstringOndertekende URL van de gegenereerde plattegrondafbeelding
output.widthintegerUitvoerbreedte in pixels
output.heightintegerUitvoerhoogte in pixels

📊 Taakstatus#

StatusBeschrijving
UnprocessedTaak is aangemaakt maar nog niet gestart
ProcessingTaak wordt verwerkt
SuccessTaak is voltooid en output.resultUrl is beschikbaar
FailedDe taak is mislukt
TerminationDe taak is onderbroken of beëindigd

Vraag de status elke 3–5 seconden op. Zie Taaklimiet voor de API.


❌ Foutantwoorden#

Alle foutantwoorden gebruiken de algemene antwoordstructuur:

json
{
  "code": 1011,
  "message": "bedroomAreaRanges size must match bedrooms",
  "data": null
}
FoutcodeNaamBeschrijvingAanbevolen actie
1001FAILEDAlgemene verzoekfoutControleer het veld message
1003INTERNAL_ERRORInterne serverfoutProbeer het later opnieuw; neem contact op met ondersteuning als het probleem aanhoudt
1011PARAM_ERROROngeldige verzoekparameterControleer aantallen, eenheden, opsommingswaarden en geneste arrays
5002API_KEY_INVALIDOngeldige of ontbrekende API-sleutelControleer de header APIKEY
9010SCAN_TEXT_ERRORTekstinstructie afgekeurd bij inhoudscontrolePas de tekstinstructie aan
9038PROHIBITED_CONTENTGegenereerde uitvoer bevat verboden inhoudPas de invoer aan en probeer het opnieuw
9051COINS_NOT_ENOUGHOnvoldoende creditsVoeg credits toe en probeer het opnieuw

Zie Foutcodereferentie voor de volledige lijst met algemene fouten.


🔄 Opmerkingen over webintegratie#

De geauthenticeerde webapplicatie en de openbare API gebruiken verschillende eindpunten en authenticatiemethoden:

ClienttypeEindpuntAuthenticatie
WebapplicatiePOST /floorPlan/generatetoken-header voor aanmelding
Openbare APIPOST /api/v1/floorPlan/generateVerzoekheader APIKEY

De structuren van de functionele velden komen overeen, maar openbare API-clients moeten de serverlimieten en openbare interface uit dit document volgen. In het bijzonder:

  • Webclients kunnen interne imageNumbers en extData bevatten; openbare clients hebben deze niet nodig.
  • De openbare API bepaalt metadata voor de API-aanroep op basis van het eindpunt en de aanmeldgegevens. Verzoekvelden zoals isApiCall en genByMember zijn overbodig.
  • balcon wordt voor compatibiliteit geaccepteerd en genormaliseerd naar balcony; nieuwe integraties moeten balcony versturen.
  • De huidige openbare serverlimieten blijven 0–5 slaapkamers en 0.5–4 badkamers, zelfs als een andere interface tijdelijk ruimere keuzemogelijkheden toont.