Taal
Over Taxon Producten API-documentatie Blog API Status Contact
v2.5.1 - koppelcontract

Taxon Partner API

1.Overzicht

Eén aanvraag per adres, één gegevensbundel voor het expertisedossier: het basispakket (referentiepunten, buurtstatistieken, voorzieningen, perceel en prijskaart) en, als aparte optie, een indicatieve waardering (AVM). Voor wederverkoop-partners die de gegevens tonen in hun eigen software.

Basis-URLhttps://taxonapi.be/api/v1/partner/
FormaatJSON (UTF-8). Veldnamen en enum-waarden in het Engels; labels, meldingen en foutboodschappen in nl, fr of en via Accept-Language
AuthenticatieHeader X-Api-Key
Specificatieopenapi.yaml (OpenAPI 3.1, versie 2.5.1)
Integratiegidsgids-nl.md (quickstart, curl, PHP, Python, testplan); EN integration-guide.md, FR guide-fr.md
EndpointsGET /address   GET /usage   GET /health
PakkettenBasispakket (sections=basic, standaard): de secties basic, parcel en price_map samen, één prijs per dossier. AVM-optie (sections=basic,avm): apart geprijsd. Zie sectie 5.
TijdzoneEurope/Brussels; tijdstippen in ISO 8601 met offset
Wat de API bewust niet levert. Geen notariële verkoop- of transactieprijzen (alle prijzen zijn vraagprijzen uit publiek aanbod), geen EPC-opzoeking (EPC-labels verschijnen zoals geadverteerd), geen advertentieteksten, geen portaalnamen of links, geen kaartbeelden of tegels, geen lijst- of gebiedszoekopdrachten. Foto's van referentiepunten zijn uitsluitend beschikbaar als tijdelijke, getekende links (inbedden in het rapport van het dossier met bronvermelding: zie 11).
Contract 2.0 (07-09-2026). Alle headers, paden, query-parameters, JSON-sleutels en enum-waarden zijn Engels. De vroegere Nederlandse namen (contract 1.0 tot 1.2) staan opgelijst in sectie 12; de oude paden /adres en /verbruik antwoorden 404 not_found, oude parameternamen antwoorden 400 invalid_request. Enkel de header-aliassen X-Gebruiker-Ref, X-Kantoor-Ref en X-Dossier-Ref blijven werken (verouderd).

2.Authenticatie

Elke aanvraag draagt de header X-Api-Key. De sleutel is lang-levend, gebonden aan uw partneraccount en wordt door Taxon enkel als hash bewaard. U krijgt ze precies één keer te zien, in het partnerdashboard (zie "Uw sleutels beheren" hieronder).

SleutelGebruikEigenschappen
tx_live_ + 32 hexProductieHet gebruik wordt geteld en maandelijks gefactureerd volgens de overeenkomst.
tx_test_ + 32 hexOntwikkeling en pilot-testsNooit gefactureerd, maximaal 20 aanvragen per dag, zelfde endpoints en hetzelfde antwoordformaat; elk antwoord bevat "environment": "test" en een melding test_environment.
  • Geheimhouding. De sleutel blijft in uw backend. Nooit in een browser, een mobiele app of een publieke repository. Roep de API server-naar-server aan.
  • Rotatie. Een live-sleutel roteert u zelf in het partnerdashboard (zie "Uw sleutels beheren" hieronder): de nieuwe sleutel wordt één keer getoond, de oude blijft 7 dagen werken met de melding key_rotation_pending en antwoordt daarna 403 key_revoked.
  • IP-allowlist. Optioneel kan de sleutel beperkt worden tot de IP-adressen van uw servers (403 ip_not_allowed vanaf elk ander adres).
  • Lek of vermoeden van misbruik: roteer of trek de sleutel meteen zelf in via het dashboard en meld het binnen 48 uur; Taxon trekt de oude sleutel dan zo nodig onmiddellijk in.

Uw sleutels beheren 2.3.0

Sinds 08-09-2026 beheert u uw sleutels zelf in het partnerdashboard op taxon.be (taxon.be/api_partner, luik "Beheer"). Elke handeling daar wordt gelogd (wie, wanneer, vanaf welk IP-adres) en aan Taxon gemeld; de waarde van een sleutel staat nooit in een log of een e-mail.

HandelingWerking
Een sleutel eenmalig tonenEen nieuwe sleutel wordt niet per e-mail verstuurd. Het dashboard toont ze precies één keer ("Sleutel eenmalig tonen"), binnen 7 dagen na de aanmaak; kopieer ze meteen naar uw secret store. Tot dat moment bewaart Taxon enkel een versleutelde kopie: na de eerste weergave, of na 7 dagen, wordt die kopie vernietigd en kan de sleutel niet meer getoond worden. Sleutels van vóór 08-09-2026 kunnen niet getoond worden; vraag een nieuwe aan of maak er zelf een.
TestsleutelsMaakt u zelf aan ("Testsleutel aanmaken", met een label), maximaal 3 actieve testsleutels; trekt u zelf in ("Intrekken": de sleutel werkt meteen niet meer, 401 invalid_api_key).
Eerste live-sleutelWordt door Taxon uitgereikt na de ondertekende overeenkomst, klaar om één keer te tonen in uw dashboard. Een eerste live-sleutel maakt u niet zelf aan (live_key_not_allowed); het formulier "Live-sleutel aanvragen" in het dashboard mailt Taxon.
Een live-sleutel roteren"Live-sleutel roteren" maakt een nieuwe live-sleutel aan (toon ze één keer, zet ze in productie). De vorige live-sleutel blijft 7 dagen werken; in die periode draagt elk antwoord van /address en /usage met de oude sleutel de melding key_rotation_pending (section: null, bericht met de einddatum). Na 7 dagen wordt de oude sleutel geweigerd (403 key_revoked, daarna 401 invalid_api_key). Een live-sleutel trekt u nooit in vanuit het dashboard: roteer ze, of vraag Taxon ze onmiddellijk in te trekken.
Lek of vermoeden van misbruikRoteer (live) of trek in (test) onmiddellijk en verwittig info@taxon.be wanneer de oude sleutel meteen moet vervallen in plaats van na 7 dagen.

Foutcodes van de dashboardhandelingen (als tekst getoond in het dashboard, nooit op /address of /usage): key_already_revealed, reveal_expired, not_revealable, key_limit_reached, live_key_not_allowed, not_self_revocable.

3.Headers

HeaderStatusBetekenis
X-Api-KeyverplichtUw partnersleutel (zie 2).
X-User-RefverplichtUw eigen identificatie van de gebruiker voor wie de aanvraag gebeurt. Een gebruiker is de eenheid die u zelf bij elke aanvraag meegeeft: een kantoor, een medewerker, een filiaal of een dossierbehandelaar. Die keuze bepaalt de aanrekening: dezelfde gebruiker die hetzelfde pand binnen 30 dagen opnieuw opvraagt, betaalt niet opnieuw (dedup); een andere gebruiker wel. Per gebruiker geldt een dagplafond, per sleutel een globaal plafond. Tekenset ^[A-Za-z0-9._:@-]{1,64}$; wordt genormaliseerd (spaties weg, kleine letters: [a-z0-9._:@-]{1,64}); ongeldige tekens geven 400 invalid_request met details[].field = "X-User-Ref". billing.user_ref toont de genormaliseerde waarde. Houd ze stabiel per gebruiker: de gratis herhaling (dedup), het dagplafond per gebruiker (20 per dag) en het gebruiksrapport per gebruiker rusten er allemaal op. Ontbreekt ze: 400 user_ref_required.
X-Gebruiker-Ref
X-Kantoor-Ref
verouderdAliassen van X-User-Ref uit contract 1.1/1.2 en 1.0. Zelfde tekenset en normalisatie. Worden twee of meer van deze headers meegegeven met verschillende waarden (na normalisatie): 400 user_ref_conflict (de details[].issue noemt de betrokken headers). Gebruik in nieuwe code enkel X-User-Ref.
X-Case-RefoptioneelUw dossiernummer, tekenset ^[A-Za-z0-9._:@/ -]{1,64}$. Komt terug in billing.case_ref en in de gebruiks-CSV, zodat u elke aanvraag aan een dossier kunt koppelen (technisch optioneel: zonder wordt de aanvraag aanvaard en is billing.case_ref null; contractueel verplicht: elke aanvraag hoort bij een concreet expertisedossier, stuur hem dus altijd mee). De alias X-Dossier-Ref (contract 1.x) wordt nog aanvaard; X-Case-Ref wint wanneer beide meegegeven worden.
Idempotency-KeyoptioneelUnieke sleutel per aanvraag (bijvoorbeeld een UUID), 8 tot 128 tekens (A-Z a-z 0-9 . _ : @ -). Enkel deze header telt: X-Request-ID wordt door nginx overschreven en is geen idempotentiesleutel. Dezelfde sleutel binnen 24 uur geeft exact hetzelfde antwoord terug, met de antwoordheader X-Idempotent-Replay: true, en wordt niet opnieuw aangerekend of geteld. Dezelfde sleutel met een ander adres, een andere gebruiker of andere secties: 409 idempotency_conflict. Gebruik ze bij elke retry na een time-out.
Accept-Languageoptioneelnl (standaard), fr of en. Bepaalt de taal van labels (*_label, condition van een referentiepunt, confidence.label), meldingen, foutboodschappen, bronvermelding en disclaimer, en van de gemeentenaam (Vlaanderen Nederlands; Wallonië Frans; Brussel Nederlands voor nl, Frans voor fr en en). JSON-sleutels en enum-waarden zijn altijd Engels.

Elk antwoord (ook een fout) bevat de header X-Request-ID en het veld request_id. Vermeld het bij elke supportvraag.

4.GET /address

Levert de gevraagde secties voor één adres in Vlaanderen, Wallonië of Brussel. Verwerking: validatie, plafondcontrole, geocoding, dedup-controle, secties parallel ophalen, aanrekening, antwoord. Typische antwoordtijd 1 tot 8 seconden (AVM en parcel zijn het traagst; meerdere percelen 3 tot 12 seconden); stel uw client-timeout in op minstens 60 seconden.

Query-parameters

ParameterStatusBetekenis
addressverplichtVolledig adres: straat, huisnummer, postcode, gemeente. 8 tot 255 tekens. URL-encoderen.
typeverplichthouse, apartment of land (2.5.0). Stuurt de selectie van referentiepunten en de AVM. Aliassen huis, appartement, grond, terrain en bouwgrond aanvaard; het antwoord toont altijd de Engelse waarde. land = bouwgrond: de referentiepunten zijn grondzoekertjes te koop (5 km, uitgebreid tot 10 km bij minder dan 10), neighbourhood.land_price_level vervangt de woningstatistieken, geen AVM (zie Gronden).
sectionsoptioneelbasic (standaard) = het basispakket: levert de secties basic, parcel en price_map samen, één prijs per dossier. basic,avm = basispakket plus de AVM-optie (apart geprijsd). parcel of price_map los opvragen (of basic,parcel) blijft technisch mogelijk maar wordt genormaliseerd naar het pakket en als het pakket aangerekend; er is geen goedkopere deelweg. De Nederlandse aliassen basis en prijskaart blijven aanvaard. Een sectie buiten uw plan geeft 403 section_not_allowed (met section); een onbekende naam geeft 400 invalid_request. Uw plan is zichtbaar in GET /usage (plan.sections_allowed). sections_delivered bevat altijd de werkelijk geleverde secties (basic, parcel, avm, price_map, in die volgorde).
living_area_m2optioneelBewoonbare oppervlakte in m² (10 tot 5000). Nodig voor avm: ontbreekt ze, dan blijft het antwoord HTTP 200, maar ontbreekt avm in sections_delivered, wordt een melding living_area_required met section: "avm" toegevoegd en wordt de AVM-sectie niet aangerekend. Niet nodig bij type=land (geen AVM voor grond; zie Gronden).
year_builtoptioneelBouwjaar (1500 tot 2100). Verbetert de AVM.
epcoptioneelLabel A+ tot G, zoals opgegeven door de opdrachtgever of zoals geadverteerd. Taxon zoekt geen EPC-certificaten op en toetst het label niet aan een register.
conditionoptioneelpoor, average, good, very_good, excellent. AVM-invoer (premie tussen -5 % en +3 %). Aliassen te_renoveren, matig, goed, zeer_goed, nieuw aanvaard.
bedroomsoptioneelAantal slaapkamers (0 tot 20). Filtert de referentiepunten op plus of min 1 slaapkamer (blijven er minder dan 8 over, dan valt de filter weg met melding bedrooms_filter_dropped; zie bedrooms_filter op het blok) en gaat als invoer naar de AVM.
plot_area_m2optioneelGrondoppervlakte in m² volgens u (1 tot 100000). Terugval voor de AVM wanneer het kadaster niets oplevert, of wanneer u geen capakeys opgeeft en zelf het totaal kent. Met capakeys wint altijd het kadaster. Wordt uw waarde effectief gebruikt, dan volgt de melding plot_area_not_cadastral en toont avm.inputs_used.plot_area_source de waarde partner.
capakeysoptioneelMeerdere percelen per pand. Kommagescheiden CaPaKeys van alle percelen die bij het pand horen (woonperceel, tuin, garage, weide), in CadGIS-vorm 33016A0299/00K000 (de vorm met streepje 33016A0299-00K000 wordt aanvaard en genormaliseerd). Maximaal 10; de parcel-sectie zit in het basispakket, dus er is geen extra sectie nodig (400 invalid_request enkel wanneer uw plan de parcel-sectie niet toelaat). De parcel-sectie levert dan parcels[] plus totalen en de AVM rekent met de totale grondoppervlakte. Fouten: 422 capakey_invalid (vorm of meer dan 10), 422 capakey_too_far (een perceel verder dan 2 km van het adres, misbruikrem). Een onbestaand perceel geeft enkel een melding capakey_not_found; de rest wordt geleverd. Zie de flow.

Voorbeeld-request

GET /api/v1/partner/address?address=Doorniksestraat%2040%2C%208500%20Kortrijk&sections=basic,avm&type=apartment&living_area_m2=95 HTTP/1.1
Host: taxonapi.be
X-Api-Key: tx_live_<32 hex>
X-User-Ref: office-kortrijk-03
X-Case-Ref: DOS-2026-0452
Idempotency-Key: 2c6a8b1e-3f4d-4a5b-9c7e-1d2f3a4b5c6d
Accept-Language: en

Voorbeeld-response (200)

Live antwoord van 08-09-2026 (live-sleutel, gebruiker office-kortrijk-03, aanvraag cf514c7de2714c11806e2ebf053d0247), ingekort tot één referentiepunt per blok en drie voorzieningen; het blok price_map (deel van het basispakket) is hier weggelaten, zie sectie 5. Met een live-sleutel is environment gelijk aan live, is charged gelijk aan true en is free_reason gelijk aan null; de bedragen in billing.price zijn die van de overeenkomst van de klant waarmee het antwoord gevangen is, de uwe volgen uw eigen overeenkomst. Met een testsleutel is environment gelijk aan test, is charged gelijk aan false, is free_reason gelijk aan test en is elk bedrag 0.00.

{
  "request_id": "cf514c7de2714c11806e2ebf053d0247",
  "environment": "live",
  "address": {
    "input": "Doorniksestraat 40, 8500 Kortrijk",
    "normalized": "Doorniksestraat 40, 8500 Kortrijk",
    "box": null,
    "postal_code": "8500",
    "municipality": "Kortrijk",
    "lat": 50.82541,
    "lon": 3.267149,
    "region": "VL",
    "nis_code": "34022",
    "geocoder": "geo.api.vlaanderen.be",
    "geocode_score": 0.95,
    "precision": "house_number"
  },
  "sections_delivered": ["basic", "parcel", "avm", "price_map"],
  "basic": {
    "comparables": [
      {
        "type": "apartment",
        "type_label": "apartment",
        "transaction": "sale",
        "transaction_label": "for sale",
        "address_mode": "house_number",
        "radius_m": 1000,
        "count": 25,
        "excluded_subject_property": 0,
        "max_age_months": 24,
        "items": [
          {
            "ref": "r_1a30b3b90e",
            "address": "Schouwburgplein 10, 8500 Kortrijk",
            "distance_m": 157,
            "type": "apartment",
            "transaction": "sale",
            "price": 250000,
            "price_kind": "asking_price",
            "price_kind_label": "asking price",
            "price_per_m2": 2427,
            "living_area_m2": 103,
            "plot_area_m2": null,
            "bedrooms": 2,
            "epc_label": "B",
            "epc_kwh_m2": 108.0,
            "epc_source": "as advertised",
            "year_built": 1980,
            "condition": "good condition",
            "building_type": "terraced",
            "new_build": false,
            "published": "2026-07-16",
            "days_online": 12,
            "last_seen": "2026-07-28",
            "status": "offline",
            "status_label": "offline",
            "source": "listing",
            "source_label": "listing",
            "features": {
              "garage": true,
              "parking_spaces": 1,
              "terrace": true,
              "terrace_m2": null,
              "garden": null,
              "garden_m2": null,
              "cellar": true,
              "attic": null,
              "floor": 2,
              "floors_count": 5,
              "elevator": false,
              "kitchen": "semi_equipped",
              "bathrooms": 1,
              "shower_rooms": null,
              "toilets": 1,
              "heating": "gas",
              "solar_panels": false,
              "double_glazing": true,
              "orientation_garden": null,
              "renovation_year": null,
              "inspections": {"electrical_compliant": null, "asbestos_certificate": null, "oil_tank": null},
              "flood_zone": "none"
            },
            "summary": "Apartment on the 2nd floor of 103 m² with garage, terrace and cellar, 2 bedrooms, EPC B, built in 1980.",
            "thumbnail": {"url": "https://taxonapi.be/api/v1/marketexplorer/foto/<token>?w=160", "valid_until": "2026-09-08T09:39:16Z"},
            "photo_count": 12,
            "history": [
              {"date": "2026-04-29", "price": 250000, "event": "published", "label": "published"},
              {"date": "2026-07-28", "price": null, "event": "offline", "label": "offline"}
            ],
            "photos": [
              {"url": "https://taxonapi.be/api/v1/marketexplorer/foto/<token>?w=640", "download_token": "b71c6e8f1c51a562f33d", "valid_until": "2026-09-08T09:39:16Z"},
              {"url": "https://taxonapi.be/api/v1/marketexplorer/foto/<token>?w=640", "download_token": "4bdfcfbd9ea0c282e886", "valid_until": "2026-09-08T09:39:16Z"}
            ]
          }
        ]
      },
      {
        "type": "apartment",
        "type_label": "apartment",
        "transaction": "rent",
        "transaction_label": "for rent",
        "address_mode": "house_number",
        "radius_m": 1000,
        "count": 25,
        "excluded_subject_property": 0,
        "max_age_months": 24,
        "items": ["…"]
      }
    ],
    "neighbourhood": {
      "sector": {"code": "34022A00-", "name": "KORTRIJK-CENTRUM", "level": "sector", "municipality": "Kortrijk"},
      "building_stock": {
        "level": "sector",
        "reference_date": "2026-01-01",
        "total": 2882,
        "distribution": [
          {"category": "residential", "label": "Residential", "count": 1908, "pct": 66.2},
          {"category": "commerce_services", "label": "Commerce & services", "count": 383, "pct": 13.3},
          {"category": "industry", "label": "Industry", "count": 7, "pct": 0.2},
          {"category": "agriculture", "label": "Agriculture", "count": 0, "pct": 0.0},
          {"category": "other", "label": "Other", "count": 584, "pct": 20.3}
        ],
        "source": "FPS Finance - open patrimonial data"
      },
      "price_level": {
        "type": "apartment",
        "radius_m": 2000,
        "sale_per_m2": {"n": 430, "p25": 2260.25, "median": 2856.5, "p75": 3747.0},
        "rent_per_m2_year": {"n": 346, "p25": 89.12, "median": 105.85, "p75": 126.7},
        "gross_yield_pct": 3.71,
        "gross_yield_p25_p75": [3.12, 4.44],
        "price_kind": "asking_price"
      },
      "epc_prices": {
        "type": "apartment",
        "radius_m": 5000,
        "labels": {
          "B": {"median_per_m2": 2578.1, "count": 132},
          "C": {"median_per_m2": 2441.6, "count": 56},
          "A": {"median_per_m2": 3849.2, "count": 83},
          "D": {"median_per_m2": 2208.5, "count": 16},
          "F": {"median_per_m2": 1645.3, "count": 10},
          "A+": {"median_per_m2": 5432.6, "count": 6},
          "E": {"median_per_m2": 2521.7, "count": 4}
        },
        "price_kind": "asking_price"
      },
      "safety": {
        "level": "municipality",
        "municipality": "Kortrijk",
        "year": 2025,
        "burglaries_per_1000": 2.7,
        "crimes_per_1000": 89.0,
        "region_burglaries_per_1000": 2.1,
        "region_crimes_per_1000": 63.3,
        "years": [
          {"year": 2025, "burglaries_per_1000": 2.7, "crimes_per_1000": 89.0},
          {"year": 2024, "burglaries_per_1000": 3.2, "crimes_per_1000": 100.1},
          {"year": 2023, "burglaries_per_1000": 3.3, "crimes_per_1000": 101.9}
        ],
        "source": "Federal Police - Police Crime Statistics (PCS)"
      }
    },
    "amenities": {
      "score": 9.3,
      "scale": "0-10",
      "radius_m": 1000,
      "sub_scores": {
        "public_transport": {"score": 9.2, "label": "Public transport", "count": 17},
        "healthcare": {"score": 9.2, "label": "Healthcare", "count": 7},
        "shops": {"score": 9.8, "label": "Shops and catering", "count": 87},
        "sport_culture": {"score": 9.3, "label": "Sport and culture", "count": 12},
        "education": {"score": 8.9, "label": "Education", "count": 9}
      },
      "poi_count": 158,
      "top_10": [
        {"name": "Muskat Pureebar", "type": "shops", "type_label": "Shops and catering", "distance_m": 52},
        {"name": "KBC", "type": "shops", "type_label": "Shops and catering", "distance_m": 66},
        {"name": "Vork", "type": "shops", "type_label": "Shops and catering", "distance_m": 79}
      ],
      "attribution": "© OpenStreetMap contributors (ODbL)"
    }
  },
  "parcel": {
    "capakey": "34022G0494/00E000",
    "region": "VL",
    "area_m2": 259.14,
    "cadastral_area_m2": 259.14,
    "width_m": 4.79,
    "depth_m": 53.61,
    "frontage_m": 7.31,
    "built_area_m2": 164.1,
    "buildings_count": 2,
    "garden_orientation": "SW",
    "garden_orientation_deg": 247,
    "zoning": {"category": "residential", "label": "woongebieden", "plan": "gewestplan"},
    "preemption_right": {"status": "none", "source": "RVV thematic layer, right of pre-emption (Flanders)"},
    "source": "CadGIS (FPS Finance) / GRB Gbg - building at ground level (Digitaal Vlaanderen)",
    "main_parcel": "34022G0494/00E000",
    "parcels": [
      {
        "capakey": "34022G0494/00E000",
        "area_m2": 259.14,
        "cadastral_area_m2": 259.14,
        "width_m": 4.79,
        "depth_m": 53.61,
        "built_area_m2": 164.1,
        "buildings_count": 2,
        "zoning": {"category": "residential", "label": "woongebieden", "plan": "gewestplan"},
        "preemption_right": {"status": "none", "source": "RVV thematic layer, right of pre-emption (Flanders)"},
        "source": "CadGIS (FPS Finance) / GRB Gbg - building at ground level (Digitaal Vlaanderen)",
        "is_main": true,
        "distance_to_address_m": 0
      }
    ],
    "parcels_count": 1,
    "total_area_m2": 259.14,
    "cadastral_total_area_m2": 259.14,
    "zoning_combined": {"category": "residential", "label": "woongebieden", "plan": "gewestplan"},
    "preemption_right_combined": {"status": "none", "parcels": []},
    "parcels_not_found": [],
    "plot_area_source": "cadastre_main_parcel",
    "parcel_candidates": [
      {"capakey": "34022G0495/00C000", "area_m2": 370.75, "direction": "S", "built": true, "distance_m": 7},
      {"capakey": "34022G0493/00L000", "area_m2": 1224.37, "direction": "W", "built": true, "distance_m": 12},
      {"capakey": "34022G0490/00C000", "area_m2": 249.56, "direction": "W", "built": true, "distance_m": 32}
    ],
    "parcel_candidates_source": "CadGIS (FPS Finance), adjacent within 0.5 m; built-up via the regional buildings layer",
    "parcel_candidates_remark": null
  },
  "avm": {
    "value": 243995,
    "range": [190804, 312014],
    "range_90": [162820, 365641],
    "rental_value": 885,
    "rental_value_range": [859, 954],
    "confidence": {"score": 72.7, "label": "low", "fsd_pct": 24.59},
    "comparables_count": 19,
    "comparables_count_500m": 19,
    "comparables_count_1km": 19,
    "inputs_used": {
      "type": "apartment",
      "living_area_m2": 95.0,
      "year_built": null,
      "epc_label": null,
      "condition": null,
      "bedrooms": null,
      "plot_area_m2": null,
      "plot_area_source": null
    },
    "price_basis": "asking_price_model",
    "model": "taxon-avm v3.1"
  },
  "billing": {
    "user_ref": "office-kortrijk-03",
    "case_ref": "DOS-2026-0452",
    "charged": true,
    "pilot": false,
    "free_reason": null,
    "price": {"package": 3.0, "avm": 2.0, "total": 5.0, "currency": "EUR", "excl_vat": true},
    "dedup_of": null,
    "dedup_valid_until": "2026-10-08T10:39:24+02:00",
    "month": "2026-09",
    "month_to_date": {"cases": 3, "amount": 10.0},
    "pilot_status": null,
    "today": {"client_today": 13, "user_today": 1}
  },
  "notices": [],
  "upstream_errors": {},
  "attribution": "References: Taxon (taxon.be)",
  "disclaimer": "Asking prices from listings, not notarial sale prices. Data for internal use per case only; building a derived database is prohibited. The valuer decides, the AVM is a support tool.",
  "generated_at": "2026-09-08T10:39:24+02:00"
}
Storingen in één sectie. Valt een onderliggende bron uit (bijvoorbeeld de perceeldienst van een gewest), dan ontbreekt die sectie in sections_delivered, staat de reden in upstream_errors (sleutel per sectie of deelblok: parcel, avm, price_map, basic.comparables, basic.neighbourhood, basic.amenities, neighbourhood.building_stock, neighbourhood.safety, neighbourhood.price_level, neighbourhood.epc_prices; waarde timeout of upstream_error), wordt een melding section_missing toegevoegd. De aanrekening volgt het pakket: het basispakket wordt één keer per dossier aangerekend zodra de basic-sectie geleverd is, ook wanneer parcel of price_map door een storing ontbreekt (een herhaling binnen het dedup-venster is gratis en bouwt de ontbrekende sectie opnieuw op); de AVM-optie wordt enkel aangerekend wanneer ze geleverd is. Voor price_map betekent de waarde no_coverage (met melding price_map_unavailable) dat er binnen 3 km geen enkele buurt met prijzen ligt: geen storing, het pakket blijft aangerekend. Een falend deelblok binnen basic wordt null; basic blijft geleverd. Nul referentiepunten (melding no_comparables): pakket niet aangerekend (free_reason: no_result), tenzij uw plan anders bepaalt. Het antwoord blijft HTTP 200 zolang de basic-sectie geleverd is. Lukt de basic-sectie zelf niet: 502 upstream_unavailable, niets aangerekend.

5.Secties

Basispakket en AVM-optie (2.4.0). De secties basic, parcel en price_map vormen één basispakket per dossier: sections=basic levert de drie samen tegen één prijs (billing.price.package). De AVM is een aparte optie (sections=basic,avm, billing.price.avm). sections_delivered blijft de echte secties opsommen.

basic (basispakket, altijd)

  • Referentiepunten (comparables): een lijst van blokken per type en transactie (sale en rent; met type opgegeven maximaal 2 blokken), elk met maximaal 25 vergelijkbare panden, gepubliceerd binnen 24 maanden, in een adaptieve straal (1.000 m voor appartementen, 1.500 m voor huizen, verdubbeld tot 15 km zolang er minder dan 5 gevonden worden). Per pand: vraagprijs, prijs per m², oppervlaktes, slaapkamers, bouwjaar, staat, bebouwingstype (detached, semi_detached, terraced, apartment), nieuwbouw, EPC-label en kengetal zoals geadverteerd (epc_source), publicatiedatum, dagen online, laatst gezien, status online/offline en de volledige prijshistoriek (published, price_drop, price_increase, republished, offline). Het veld address is straat + huisnummer zonder busnummer, of enkel straat en gemeente, volgens uw overeenkomst (veld address_mode per blok: house_number of street); referentiepunten bevatten nooit coördinaten, enkel distance_m. Geen portaalnaam, geen link, geen advertentietekst. Met type=land is er één blok (enkel sale, geen huurblok), zie Gronden.
  • Foto's (photos): per pand maximaal 5 objecten {url, download_token, valid_until}, hoofdfoto (gevel) eerst. url is een getekende capability-URL op taxonapi.be (serverthumbnail van maximaal 640 px: w 160, 320 of 640, andere waarden naar boven afgerond en begrensd op 640, zonder w ook 640 px; het origineel wordt nooit geleverd), 1 uur geldig (bij een herhaalde aanvraag, dedup of Idempotency-Key, worden de fotolinks vernieuwd: nieuwe url en valid_until, zelfde download_token), werkt rechtstreeks in een <img> zonder sleutel: niet parseren, niet zelf samenstellen, binnen het uur ophalen. Na verloop of bij manipulatie antwoordt ze 404 (invalid_or_expired_token). download_token is een stabiel opaak kenmerk voor uw eigen boekhouding, niet om iets op te halen. Inbedden in het rapport van het dossier: zie 11.
  • Kenmerken, samenvatting en thumbnail (features, summary, thumbnail, photo_count, sinds 2.2.0): elk referentiepunt draagt een object features met de gestructureerde kenmerken van de advertentie (garage, parking_spaces, terrace en terrace_m2, garden en garden_m2, cellar, attic, floor (appartementen), floors_count, elevator, kitchen: not_equipped|semi_equipped|equipped|fully_equipped, bathrooms, shower_rooms, toilets, heating: gas|oil|electric|heat_pump|wood|district|other, solar_panels, double_glazing, orientation_garden: N|NE|E|SE|S|SW|W|NW, renovation_year, inspections {electrical_compliant, asbestos_certificate, oil_tank}, flood_zone: none|possible|effective). Elke sleutel is altijd aanwezig; null betekent onbekend, de dekking hangt dus van de advertentie af. summary is een zin in de woorden van Taxon, enkel opgebouwd uit die velden, in de taal van Accept-Language; advertentieteksten worden nooit geleverd. thumbnail {url, valid_until} is een getekende link naar de hoofdfoto (voorgevel) op w=160, 1 uur geldig en vernieuwd zoals de andere fotolinks; photos[0] is dezelfde foto op 640 px; null zonder foto's. photo_count is het totale aantal foto's van de advertentie (photos blijft beperkt tot 5).
  • Buurtstatistieken (neighbourhood): statistische sector, gebouwenpark per categorie (residential, commerce_services, industry, agriculture, other), vraagprijsniveau koop en huur per m² (kwartielen, geïndexeerd) met brutorendement, mediane prijs per geadverteerd EPC-label, en veiligheid als echte politiecijfers per 1.000 inwoners (woninginbraken en totaal misdrijven, 3 jaren, met gewestvergelijking) op gemeenteniveau. Er is geen "veiligheidsscore". Een deelblok dat faalt wordt null en staat in upstream_errors. Met type=land: price_level en epc_prices zijn null (melding housing_stats_not_available_for_land) en land_price_level {radius_m, count, price_per_m2_plot {p25, median, p75}, price_kind: asking_price, max_age_months: 24} geeft het vraagprijsniveau per m² grond uit de grondzoekertjes (2.5.0).
  • Voorzieningen (amenities): totaalscore 0-10, deelscores met label en aantal (public_transport, healthcare, shops, sport_culture, education), aantal voorzieningen binnen de straal en de 10 dichtstbijzijnde (top_10: naam, type, afstand). Attributie OpenStreetMap verplicht.

parcel (basispakket)

  • CaPaKey van het hoofdperceel, oppervlakte uit de geometrie en kadastrale oppervlakte, breedte en diepte, gevelbreedte, bebouwde oppervlakte, aantal gebouwen, tuinoriëntatie (afkorting in de taal van Accept-Language, plus graden; null voor appartementen).
  • Planologische bestemming (category, label, plan) uit het plan van het gewest (zie tabel) en het voorkooprecht (status yes / none / unknown, source, eventueel dekking en details). Het bestemmings-label is de tekst van de gewestelijke dienst (Nederlands voor VL, Frans voor WAL); van die tekst bestaat geen Engelse vertaling.
  • Geen geometrie, geen kaartbeelden of tegels: u rendert kaarten met uw eigen kaartlicentie op basis van de coördinaten.
  • Ligt het punt op openbaar domein, dan ontbreekt parcel met melding parcel_not_found (geen storing; de prijs van het basispakket verandert niet).
  • Meerdere percelen: zie hieronder.
  • Geen overstromingsgegevens (watertoets) (zie tabel per gewest).

avm (aparte optie)

  • Geschatte marktwaarde met vork (68 %) en ruime vork (range_90), geschatte maandhuur met vork, betrouwbaarheid (score 0-100, label hoog/gemiddeld/laag, spreiding fsd_pct), aantal referentiepunten (totaal, binnen 500 m en 1 km), de gebruikte invoer en de modelversie. Altijd price_basis: "asking_price_model".
  • Heeft living_area_m2 nodig: zonder oppervlakte wordt de sectie overgeslagen met melding living_area_required. year_built, epc, condition en bedrooms verbeteren de schatting. Te weinig data: melding avm_insufficient_data, sectie niet geleverd, de AVM-optie wordt niet aangerekend. Niet geleverd bij type=land (melding avm_not_available_for_land, niet aangerekend; 2.5.0).
  • Een indicatieve modeluitvoer, geen expertise: de schatter beslist. In Wallonië en Brussel altijd vergezeld van de melding avm_indicative_not_regionally_calibrated.

price_map (basispakket) 2.0

  • Vraagprijsniveau per buurt rond het adres, met de contouren als GeoJSON zodat u de kaart zelf tekent. Zie hieronder.

Bron van de perceelgegevens (2.4.2). De sectie parcel leest het actuele kadastraal percelenplan van de FOD Financiën (CadGIS PlanParcellaire, lopende fiscale toestand, vandaag 01-01-2027). De jaarlijkse INSPIRE-momentopname (01-01-2026) is enkel nog de terugval bij een storing of een leeg antwoord. Het veld fiscal_situation (op parcel, op elk item van parcels[] en op elk item van parcel_candidates[]) geeft de ISO-datum van de fiscale toestand waaruit het perceel komt; source vermeldt de laag. De datum is de fiscale toestand sinds dewelke de huidige versie van dit perceel geldt: een perceel dat al jaren ongewijzigd is, draagt een oudere datum (bv. 2019-01-01), terwijl het plan waaruit het gelezen wordt altijd de lopende fiscale toestand is. Een oudere datum betekent dus geen verouderde data; enkel 2026-01-01 samen met een INSPIRE-source wijst op de jaarlijkse momentopname als terugval. Een perceel dat na de laatste momentopname gesplitst of samengevoegd werd (bv. 45043C0460/00R000 in Kluisbergen: één perceel van 921 m² in de momentopname, 460R 392 m² + 460X 529 m² in het actuele plan) komt dus in zijn huidige vorm binnen.

Meerdere percelen per pand: eerst kandidaten, dan capakeys

Een rijwoning met een aparte garage of een tuinperceel, een hoeve met weiden, een villa op twee kadastrale percelen: het puntperceel op het adres is dan maar een deel van het pand. De API lost dit op in twee stappen.

  • Stap 1: opvragen zonder capakeys. De parcel-sectie bevat het puntperceel (main_parcel, parcels[] met 1 item) en parcel_candidates[]: de aangrenzende percelen (maximaal 12), elk met capakey, kadastrale area_m2, direction ten opzichte van het hoofdperceel (altijd N, E, S of W, taalonafhankelijk), built (gewestelijke gebouwenlaag; null wanneer die laag niet beschikbaar was) en distance_m tussen de zwaartepunten. Enkel kadastrale basisinfo, geen eigenaarsgegevens. Toon die lijst aan de gebruiker (bijvoorbeeld "33011I0172/00G000, 40 m², zuid, bebouwd" = de garage) en laat hem aanvinken wat bij het pand hoort.
  • Stap 2: opnieuw opvragen met capakeys (het hoofdperceel plus de aangevinkte percelen, kommagescheiden, maximaal 10). De sectie levert dan parcels[] (per perceel capakey, oppervlakte uit geometrie en kadaster, breedte/diepte, bebouwde oppervlakte, aantal gebouwen, planologische bestemming, voorkooprecht, distance_to_address_m, is_main) en de totalen total_area_m2, cadastral_total_area_m2, zoning_combined (één object wanneer alle percelen gelijk zijn, anders een lijst met parcels[] per bestemming), preemption_right_combined (yes zodra één perceel in een perimeter valt, met de betrokken capakeys), main_parcel (het perceel waarop het adres valt, anders het eerste, met melding main_parcel_not_in_capakeys) en parcels_not_found[]. De velden op sectieniveau blijven die van het hoofdperceel. De AVM (type house) gebruikt total_area_m2; avm.inputs_used.plot_area_source zegt cadastre_main_parcel, cadastre_<n>_parcels (n = aantal geleverde percelen, 2 tot 10) of partner; het sectieveld parcel.plot_area_source draagt enkel de twee kadasterwaarden. Voor een appartement gaat geen grondoppervlakte naar het model (ook niet met capakeys).
  • Dedup. Zelfde gebruiker, zelfde adres: het in stap 1 geleverde basispakket wordt niet opnieuw aangerekend (melding dedup met section: basic; billing.free_reason is enkel dedup wanneer niets nieuws geleverd wordt, anders null (aangerekend), test of pilot), ook al wordt de parcel-sectie met de nieuwe percelen opnieuw opgebouwd. Voegt u in stap 2 de AVM-optie toe, dan betaalt u enkel die optie. Dezelfde capakeys opnieuw binnen 30 dagen = antwoord uit het grootboek (from_cache: true). Dezelfde Idempotency-Key met andere capakeys = 409 idempotency_conflict. parcel_candidates, parcel_candidates_source en parcel_candidates_remark zijn altijd aanwezig en null wanneer capakeys meegegeven werd. Een koude perceelanalyse kan tot 21 s duren; bij upstream_errors.parcel: timeout (melding section_missing; het basispakket wordt één keer aangerekend, de herhaling is gratis binnen het dedup-venster) vraagt u na enkele seconden opnieuw op met een nieuwe Idempotency-Key.
  • Foutpaden. 422 capakey_invalid (verkeerde vorm of meer dan 10 sleutels; details[] noemt de foute delen); 422 capakey_too_far (een perceel verder dan 2 km van het adres; niets geleverd of aangerekend). De parcel-sectie zit in het basispakket, dus capakeys vereist geen extra sectie. Een capakey die niet in het percelenplan bestaat: melding capakey_not_found (sectie parcel) en parcels_not_found[]; de andere percelen worden geleverd. Faalt de perceelanalyse voor één perceel, dan telt enkel zijn kadastrale oppervlakte (melding parcel_analysis_incomplete).
  • Belasting. Beperk u tot de percelen van het dossier. Elke aanvraag met capakeys doet één kadasterbevraging plus één perceelanalyse per perceel (tot 10); een hoeve met 3 percelen duurt 3 tot 12 s.

Uitgewerkt voorbeeld met echte antwoorden (Rijselstraat 62, Ieper): integratiegids, sectie 3.

Gronden (type=land) 2.5.0

type=land (aliassen grond, terrain, bouwgrond) vraagt de bundel voor een bouwgrond. Wat verandert tegenover een huis of appartement:

  • Referentiepunten: één blok (type: land, transaction: sale, geen huurblok) met grondzoekertjes te koop (bouwgronden, projectgronden en gronden zonder nader subtype; landbouwgrond, weiden, bos, boomgaarden, industrie- en KMO-grond, staanplaatsen, garages en recreatiegrond worden op basis van het geadverteerde subtype uitgesloten), van alle publicatiejaren (2.5.1: geen leeftijdsgrens meer, zodat u de vraagprijzen van oudere zoekertjes binnen het dossier kunt aanpassen aan de marktevolutie (prijsindexering); de licentievoorwaarden blijven gelden: niet samenvoegen, indexeren of opslaan over dossiers heen), binnen 5 km van het adres; bij minder dan 10 in totaal wordt de straal eenmaal uitgebreid tot 10 km (radius_m). Rangorde: eerst de zoekertjes van de laatste 24 maanden (op afstand), daarna de oudere (op afstand), maximaal 25 per blok; elk item draagt age_months (hele kalendermaanden tussen published en vandaag) en het blokveld max_age_months is null voor grond. Nog altijd minder dan 10: blokveld low_sample: true en melding low_sample (sectie basic). Elk item draagt de gebruikelijke velden waar ze zinvol zijn (address, distance_m, price, price_kind, source, published, status, history, photos, thumbnail, photo_count) plus plot_area_m2 en price_per_m2_plot (vraagprijs per m² grond); de woningvelden (living_area_m2, price_per_m2, bedrooms, epc_label, year_built, condition, building_type, new_build) zijn null. features is beperkt tot {plot_area_m2, zoning, flood_zone, land_type} (zoning is momenteel altijd null: de bestemming van een zoekertje wordt niet opgezocht; die van het perceel van het pand staat in parcel.zoning; land_type is building_plot, project_land of other en bepaalt het eerste woord van summary: "Bouwgrond", "Projectgrond" of "Grond"). summary luidt bijvoorbeeld "Bouwgrond van 694 m² in Kluisbergen, aangeboden sinds 10-09-2026."
  • Buurt: land_price_level (zie hierboven) uit dezelfde grondzoekertjes (zelfde uitsluitingen) van de laatste 24 maanden; een prijsniveau moet actueel zijn: bij minder dan 10 bruikbare zoekertjes binnen 24 maanden wordt het venster verruimd tot 60 maanden en zegt max_age_months welk venster gebruikt is (24 of 60; 2.5.1); enkel zoekertjes met een grondoppervlakte en een vraagprijs tussen 15 en 5.000 EUR per m² grond tellen mee in de kwartielen (count), zodat landbouwgrond die als bouwbaar geadverteerd staat en plaatshouder-oppervlakten het niveau niet vertekenen (items buiten die band blijven in de lijst met hun eigen price_per_m2_plot); price_level en epc_prices zijn null met melding housing_stats_not_available_for_land; building_stock, safety en amenities zoals gewoonlijk.
  • Geen AVM: Taxon levert voor grond geen automatische waardebepaling en geen indicatieve grondwaarde. sections=basic,avm blijft HTTP 200: avm is null en staat niet in sections_delivered, melding {code: avm_not_available_for_land, section: avm}, de AVM-optie wordt niet aangerekend. living_area_m2 mag ontbreken.
  • Perceel en prijskaart: ongewijzigd. De perceelsectie (bestemming, voorkooprecht, meerdere percelen via capakeys) is voor grond de kern; price_map blijft de woningkaart (vraagprijzen per m² van huizen en appartementen per wijk), geen grondprijskaart.
  • Facturatie: het basispakket zoals gewoonlijk (één prijs per dossier, dedup 30 dagen, pilot en testsleutel zoals bij huizen); geen AVM-optie.

Dekking (15-09-2026, zoekertjes van de laatste 24 maanden met een prijs; op 16-09-2026 over alle publicatiejaren ongeveer 73.000 grondzoekertjes, waarvan ongeveer 38.200 binnen 24 maanden): Vlaanderen ongeveer 30.800 grondzoekertjes, Wallonië ongeveer 8.300, Brussel ongeveer 330; ongeveer 95 % draagt een grondoppervlakte. Sommige landelijke Waalse gemeenten hebben weinig grondzoekertjes (dan low_sample).

Voorbeeld: echt antwoord van 15-09-2026 met een testsleutel (Accept-Language: en, aanvraag f0c372798b3f285b66ab4b584819be57; de 2.5.1-velden age_months en max_age_months: null toegevoegd), ingekort tot één referentiepunt met één foto, de hoofdvelden van het perceel en de buurtblokken die voor grond veranderen; building_stock, safety, amenities, parcels, parcel_candidates en price_map zijn vervangen door "...":

{
  "request_id": "f0c372798b3f285b66ab4b584819be57",
  "environment": "test",
  "address": {
    "input": "Buissestraat 17, 9690 Kluisbergen",
    "normalized": "Buissestraat 17, 9690 Kluisbergen",
    "box": null,
    "postal_code": "9690",
    "municipality": "Kluisbergen",
    "lat": 50.76716,
    "lon": 3.484313,
    "region": "VL",
    "nis_code": "45060",
    "geocoder": "geo.api.vlaanderen.be",
    "geocode_score": 0.95,
    "precision": "house_number"
  },
  "sections_delivered": [
    "basic",
    "parcel",
    "price_map"
  ],
  "basic": {
    "comparables": [
      {
        "type": "land",
        "type_label": "land",
        "transaction": "sale",
        "transaction_label": "for sale",
        "address_mode": "house_number",
        "radius_m": 5000,
        "count": 25,
        "excluded_subject_property": 0,
        "max_age_months": null,
        "low_sample": false,
        "items": [
          {
            "ref": "r_9965f5493e",
            "address": "Buissestraat 19, 9690 Kluisbergen",
            "distance_m": 25,
            "type": "land",
            "transaction": "sale",
            "price": 80000,
            "price_kind": "asking_price",
            "price_kind_label": "asking price",
            "price_per_m2": null,
            "price_per_m2_plot": 115,
            "living_area_m2": null,
            "plot_area_m2": 694,
            "bedrooms": null,
            "epc_label": null,
            "epc_kwh_m2": null,
            "epc_source": null,
            "year_built": null,
            "condition": null,
            "building_type": null,
            "new_build": null,
            "published": "2026-09-10",
            "days_online": 4,
            "last_seen": "2026-09-14",
            "age_months": 0,
            "status": "online",
            "status_label": "online",
            "source": "listing",
            "source_label": "listing",
            "features": {
              "plot_area_m2": 694,
              "zoning": null,
              "flood_zone": null,
              "land_type": "building_plot"
            },
            "summary": "Building plot of 694 m² in Kluisbergen, listed since 10-09-2026.",
            "thumbnail": {
              "url": "https://taxonapi.be/api/v1/marketexplorer/foto/fp_WzI3NDc1OTEsIjAxYTA0NzM2LTE5OGUtN2Q3ZC1iZjNjLWYyZDQ2NzliOTI3ZSIsMTc4OTQ2MzYyNiwicCJd.QB9ILrzzIwQxlyOV?w=160",
              "valid_until": "2026-09-15T09:13:46Z"
            },
            "photo_count": 13,
            "history": [
              {
                "date": "2026-08-28",
                "price": 80000,
                "event": "published",
                "label": "published"
              }
            ],
            "photos": [
              {
                "url": "https://taxonapi.be/api/v1/marketexplorer/foto/fp_WzI3NDc1OTEsIjAxYTA0NzM2LTE5OGUtN2Q3ZC1iZjNjLWYyZDQ2NzliOTI3ZSIsMTc4OTQ2MzYyNiwicCJd.QB9ILrzzIwQxlyOV?w=640",
                "download_token": "b17f02c8feb98b013e60",
                "valid_until": "2026-09-15T09:13:46Z"
              }
            ]
          }
        ]
      }
    ],
    "neighbourhood": {
      "sector": {
        "code": "45060A010",
        "name": "BUISESTRAAT",
        "level": "sector",
        "municipality": "Kluisbergen"
      },
      "building_stock": "...",
      "price_level": null,
      "epc_prices": null,
      "safety": "...",
      "land_price_level": {
        "radius_m": 5000,
        "count": 116,
        "price_per_m2_plot": {
          "p25": 126,
          "median": 160,
          "p75": 224
        },
        "price_kind": "asking_price",
        "max_age_months": 24
      }
    },
    "amenities": "..."
  },
  "parcel": {
    "capakey": "45043C0460/00X000",
    "region": "VL",
    "area_m2": 528.79,
    "cadastral_area_m2": 528.78,
    "fiscal_situation": "2027-01-01",
    "zoning": {
      "category": "residential",
      "label": "woongebieden",
      "plan": "gewestplan"
    },
    "preemption_right": {
      "status": "none",
      "source": "RVV thematic layer, right of pre-emption (Flanders)"
    },
    "source": "CadGIS PlanParcellaire (FPS Finance) / GRB Gbg - building at ground level (Digitaal Vlaanderen)",
    "main_parcel": "45043C0460/00X000",
    "parcels_count": 1,
    "total_area_m2": 528.79,
    "plot_area_source": "cadastre_main_parcel",
    "parcels": "...",
    "parcel_candidates": "..."
  },
  "avm": null,
  "price_map": "...",
  "billing": {
    "user_ref": "office-oudenaarde-02",
    "case_ref": "DOS-2026-0518",
    "charged": false,
    "pilot": false,
    "free_reason": "test",
    "price": {
      "package": 0.0,
      "avm": 0.0,
      "total": 0.0,
      "currency": "EUR",
      "excl_vat": true
    },
    "dedup_of": null,
    "dedup_valid_until": "2026-10-15T10:13:47+02:00",
    "month": "2026-09",
    "month_to_date": {
      "cases": 0,
      "amount": 0.0
    },
    "pilot_status": {
      "active": true,
      "quota": 200,
      "used": 0,
      "remaining": 200,
      "ends": "2026-11-03",
      "expired": false
    },
    "today": {
      "client_today": 10,
      "user_today": 1
    }
  },
  "notices": [
    {
      "code": "avm_not_available_for_land",
      "section": "avm",
      "message": "AVM not delivered: Taxon does not provide an automated valuation for land (type land); not charged."
    },
    {
      "code": "housing_stats_not_available_for_land",
      "section": "basic",
      "message": "price_level and epc_prices are housing statistics and are not delivered for land; see neighbourhood.land_price_level."
    },
    {
      "code": "price_map_sparse",
      "section": "price_map",
      "message": "price map: fewer than 30 listings in the subject neighbourhood (small sample)."
    },
    {
      "code": "test_environment",
      "section": null,
      "message": "test key: not invoiced"
    }
  ],
  "upstream_errors": {},
  "attribution": "References: Taxon (taxon.be)",
  "disclaimer": "Asking prices from listings, not notarial sale prices. Data for internal use per case only; building a derived database is prohibited. The valuer decides, the AVM is a support tool.",
  "generated_at": "2026-09-15T10:13:47+02:00"
}

Prijskaart (sectie price_map) 2.0

Vraagprijsniveaus per buurt binnen radius_m (3.000 m) rond het adres, gesorteerd op afstand, maximaal 40 buurten (de buurt van het pand altijd inbegrepen), geleverd als data plus GeoJSON-geometrie. Taxon levert geen kaartbeelden of tegels: u tekent de polygonen zelf met uw eigen kaartbibliotheek en -licentie (bijvoorbeeld Leaflet, MapLibre of Mapbox) en kleurt ze op price_per_m2_house of price_per_m2_apartment. Zit sinds 2.4.0 in het basispakket: geen aparte prijs (de pakketprijs staat in billing.price.package); dedup volgt het pakket. Blokgrootte 20 tot 50 KB; warm antwoord onder 0,5 s, de eerste aanvraag na een herstart van de dienst kan tot 20 s duren. Live gemeten op 07-09-2026: Eigenbrakel 40 buurten, Ieper 38, Schaarbeek 40.

VeldBetekenis
radius_mStraal rond het adres, 3000.
price_kindAltijd asking_price.
reference_period, updated_atPeildatum van de prijslaag waarop de cijfers gebaseerd zijn ("2026-03-30") en het moment waarop die laag het laatst herbouwd werd (ISO 8601).
subject_neighbourhoodid (string) van de buurt die het adres bevat: het item met is_subject: true en distance_m: 0.
neighbourhoods[]Per buurt: id, name, municipality (in de taal van Accept-Language), postal_code, distance_m, is_subject, price_per_m2_house, price_per_m2_apartment (vraagprijsniveau per m² uit de Taxon-prijslaag van reference_period, null wanneer de laag geen cijfer heeft), listings_count_house, listings_count_apartment (aantal Taxon-advertenties van de laatste 24 maanden in die buurt: een maat voor hoe sterk het actuele aanbod het cijfer draagt, niet de steekproef erachter; 0 = cijfer uit de referentielaag zonder recente Taxon-advertenties), low_sample (minder dan 30 van die advertenties: als indicatief tonen) en geometry (GeoJSON Polygon of MultiPolygon, WGS84 lon/lat).
sourceBronregel, te tonen naast de kaart (vertaald; zegt altijd dat het om vraagprijzen gaat, geen notariële verkoopprijzen).

Melding price_map_sparse (sectie price_map) wanneer de buurt van het pand zelf minder dan 30 advertenties heeft; de sectie wordt wel geleverd. Ligt er binnen 3 km geen enkele buurt met prijzen, dan is de sectie null, wordt de melding price_map_unavailable toegevoegd, is upstream_errors.price_map gelijk aan no_coverage; dat is geen storing en het basispakket blijft aangerekend. Bewaar de geometrie niet buiten het dossier (gebruiksregels, sectie 11). Echt voorbeeld: live antwoord van 08-09-2026 (live-sleutel, sections=basic, Grote Markt 34, 8900 Ieper, aanvraag f5569dd2c231469abaa2536b1bc4dd61), 2 van de 38 buurten, geometrie van de buurt van het pand volledig:

"price_map": {
  "radius_m": 3000,
  "price_kind": "asking_price",
  "reference_period": "2026-03-30",
  "updated_at": "2026-07-09T10:26:08+00:00",
  "subject_neighbourhood": "7220",
  "source": "Taxon asking prices (advertised prices, not notarial sale prices)",
  "neighbourhoods": [
    {
      "id": "7220",
      "name": "Ieper-Centrum",
      "municipality": "Ieper",
      "postal_code": "8900",
      "distance_m": 0,
      "is_subject": true,
      "price_per_m2_house": 1937.91,
      "price_per_m2_apartment": 2693.77,
      "listings_count_house": 76,
      "listings_count_apartment": 59,
      "low_sample": false,
      "geometry": {
        "type": "Polygon",
        "coordinates": [[[2.89239, 50.84819], [2.89082, 50.84804], [2.88999, 50.84756], [2.88856, 50.84716], [2.88727, 50.84885], [2.88559, 50.84838], [2.88386, 50.84823], [2.88343, 50.84899], [2.88207, 50.8487], [2.88188, 50.84888], [2.88017, 50.8484], [2.87996, 50.84875], [2.87954, 50.84865], [2.87908, 50.84969], [2.87869, 50.84955], [2.87772, 50.85146], [2.88352, 50.85238], [2.88367, 50.85225], [2.88646, 50.85268], [2.88857, 50.85268], [2.89005, 50.85297], [2.89134, 50.853], [2.89214, 50.85059], [2.89239, 50.84819]]]
      }
    },
    {
      "id": "7226",
      "name": "Diksmuidse Poort",
      "municipality": "Ieper",
      "postal_code": "8900",
      "distance_m": 121,
      "is_subject": false,
      "price_per_m2_house": 1991.52,
      "price_per_m2_apartment": 2374.19,
      "listings_count_house": 41,
      "listings_count_apartment": 22,
      "low_sample": false,
      "geometry": {"type": "Polygon", "coordinates": ["…"]}
    }
  ]
}

Per gewest

Vlaanderen (VL)Wallonië (WAL)Brussel (BXL)
Geocodinggeo.api.vlaanderen.be, terugval BeSt (fedservices.be)BeSt (fedservices.be)BeSt (fedservices.be)
Planologische bestemming (parcel)Gewestplan of RUP (plan: gewestplan | RUP)Plan de secteur (plan: "plan de secteur")GBP / PRAS (plan: "GBP/PRAS")
PerceelbronFOD Financiën (CadGIS) + GRBFOD Financiën (CadGIS) + SPW (PICC)FOD Financiën (CadGIS) + UrbIS
Gemeentenaam (één regel voor address, referentiepunten, neighbourhood.sector, neighbourhood.safety en price_map)Nederlands in elke taalFrans in elke taal, ook voor nl (geen exoniemen: Liège, Braine-l'Alleud)Nederlands voor nl, Frans voor fr en en
AVMVolledig geijktMelding avm_indicative_not_regionally_calibrated: model nog niet gewestelijk geijkt, bredere vork, expliciete toetsing door de schatterZelfde melding, idem
Overstromingsgegevens (watertoets), NIET inbegrepenGeen informatieplicht overstromingsgevoeligheid (fluviaal/pluviaal, regeling 2023), geen P-score/G-scoreGeen aléa d'inondation (kaarten SPW)Geen overstromingskaarten van Leefmilieu Brussel

De watertoets komt in een latere versie als extra veld in de parcel-sectie. Tot dan raadpleegt de schatter de overstromingsgegevens bij het gewest; de API doet er geen uitspraak over.

6.Dedup (gratis herhaling) en Idempotency-Key

De aanrekening gebeurt per gebruiker + pand. Het pand wordt bepaald door de geocode (afgerond op ongeveer 1 m), niet door de letterlijke spelling van het adres. Een aangerekende aanvraag blijft 30 dagen geldig voor dezelfde gebruiker. Een pand is het gegeocodeerde punt plus het busnummer; een ander type, andere AVM-parameters, andere capakeys of een andere taal maken geen ander pand: zo'n herhaling wordt met de nieuwe invoer opnieuw opgebouwd en blijft gratis voor de al geleverde secties (dedup bevriest niets).

SituatieResultaat
Gebruiker A vraagt basic op; dezelfde dag opnieuw; twee dagen later een derde keer ("drie keer klikken")Eén aanrekening. De tweede en derde aanvraag geven charged: false, dedup_of = request_id van de eerste, price.total = 0, free_reason: "dedup", from_cache: true (het antwoord komt uit het grootboek van de eerste aanvraag) en een melding dedup met section: null.
Gebruiker A vroeg basic op; een week later vraagt hij basic,avm voor hetzelfde pandEnkel de nieuwe AVM-optie wordt aangerekend (price.avm); het basispakket staat op 0 (price.package) met een melding dedup voor section: basic (bericht: basispakket al geleverd). Het verschil, niets meer.
Gebruiker A vroeg basic,avm op; een week later opnieuw basic,avmVolledig gratis tot dedup_valid_until (30 dagen na de eerste aanrekening). free_reason is dedup zodra elke geleverde sectie al geleverd was voor deze gebruiker en dit pand (grootboektreffer of herbouw, ook met een testsleutel); anders test, pilot of null (aangerekend) met meldingen dedup per sectie.
Gebruiker B vraagt hetzelfde pand op, één uur na gebruiker ANieuwe aanrekening: gebruiker A en gebruiker B zijn twee dossiers (dedup_of: null).
Gebruiker A vraagt hetzelfde pand op na 31 dagenNieuwe aanrekening; er start een nieuwe periode van 30 dagen.
Adres niet gevonden, nul referentiepunten (free_reason: no_result), sectie mislukt, fout op aanvraagniveauNiet aangerekend, en de dedup-periode start niet: de volgende aanvraag voor hetzelfde pand door dezelfde gebruiker wordt opnieuw opgebouwd en gewoon aangerekend zodra er referentiepunten zijn (een AVM-optie die bij het lege resultaat wel geleverd werd, houdt wel haar eigen venster).
Idempotency-Key is iets anders dan dedup. Dedup is een commerciële regel (30 dagen, per gebruiker en pand, secties tellen). De Idempotency-Key is een technische beveiliging voor retries: dezelfde sleutel binnen 24 uur geeft byte-voor-byte hetzelfde antwoord terug (zelfde request_id) zonder telling, ook tegen het dagplafond, herkenbaar aan de antwoordheader X-Idempotent-Replay: true. Gebruik per aanvraag een nieuwe UUID en hergebruik ze enkel bij een retry na een time-out of een 5xx. Twee gelijktijdige identieke aanvragen zonder sleutel worden ook opgevangen: slechts één wordt aangerekend, de andere krijgt dedup_of en prijs 0.

Let op de waakhond: draagt één X-User-Ref een onnatuurlijk groot deel van het verkeer, of vertoont een gebruiker een raster-scanpatroon (opeenvolgende huisnummers of postcodes in korte tijd), dan wordt die gebruiker geschorst (403 user_suspended); de andere gebruikers blijven werken. De schorsing treft de gebruiker, niet de klant (uw sleutel); pas bij drie of meer geschorste gebruikers binnen 24 uur volgt 403 client_suspended. Gebruik dus altijd de echte gebruiker-id.

7.Plafonds en foutcodes

Plafonds

NiveauWaardeBij overschrijding
Per sleutel, per minuut60 aanvragen (burst 20: hoogstens 20 mogen tegelijk binnenkomen; daarboven volgt 429 ook onder 60 per minuut)429 rate_limited + header Retry-After (ook retry_after in de body), of de nginx-variant 429 rate_limit_exceeded zonder header
Per sleutel, per dag300 aanvragen (globaal plafond per sleutel)403 quota_exceeded met scope: "day" en limit + header Retry-After (seconden tot middernacht Europe/Brussels)
Per gebruiker, per dag20 aanvragen403 quota_exceeded met scope: "user_day", limit en user_ref + header Retry-After; andere gebruikers blijven werken
Per sleutel, per maandVolgens de overeenkomstMelding aan beide partijen; blokkering enkel na overleg
Pilot200 dossiers binnen 60 dagen na ondertekening403 pilot_exhausted (body pilot{active, quota, used, remaining, ends, expired}) tot het jaarcontract actief is
Raster-scan per gebruikerWaakhond op opeenvolgende huisnummers/postcodes, nachtelijke pieken, scheve gebruikersverdeling403 user_suspended met user_ref, reason (raster_scan, handmatig (manueel) of vrije tekst) en since, zonder Retry-After; enkel die gebruiker is geschorst, de andere blijven werken; dedup en gebruik ongewijzigd; geen automatisch verval; opheffing enkel door Taxon-beheer (info@taxon.be, met vermelding van user_ref). Drie of meer geschorste gebruikers binnen 24 uur: de klant zelf krijgt 403 client_suspended
Testsleutel20 aanvragen per dag (geteld, voor elk dagplafond: elke aanvraag die de adresopzoeking bereikt, dedup-treffers en 404/422-adresfouten inbegrepen; niet geteld: 400, 401, 403, 405, 409, 422 capakey_invalid, 429, 503 en Idempotency-Key-replays)403 quota_exceeded, scope: "day"
OverbelastingswachtTe veel bundels in verwerking op de dienst503 overloaded + Retry-After, niets aangerekend of geteld
Bundel-time-out40 seconden504 timeout, niets aangerekend

Elk 200-antwoord toont de dagstand in billing.today (client_today, user_today), zodat u een plafond kunt zien aankomen. Dedup-herhalingen tellen ook als verkeer.

Retry-advies. Bij 429: wacht de Retry-After af (of retry_after uit de body wanneer de header ontbreekt, de nginx-variant) en probeer opnieuw met dezelfde Idempotency-Key. Bij 502, 503, 504 of 500: maximaal 3 pogingen met exponentiële wachttijd (2, 4, 8 s; bij 503 de waarde van Retry-After), zelfde Idempotency-Key. Bij 403 quota_exceeded: wacht de Retry-After (tot middernacht) af. Bij andere 4xx: niet herhalen, de aanvraag zelf is fout.

Foutcodes

Uniforme foutbody: {"error": "...", "message": "...", "request_id": "...", "charged": false}, eventueel aangevuld met details[] ({field, issue}), retry_after, scope en limit, section, user_ref, reason, since of pilot. message volgt Accept-Language.

HTTPerrorWanneerWat de client doet
400invalid_requestParameter of header ontbreekt of is ongeldig (ook een X-User-Ref met verboden tekens, een onbekende sectie, een 1.x-parameternaam, een parameter die tweemaal verstuurd is); details[] geeft veld en probleem.Corrigeer de aanvraag; niet ongewijzigd herhalen.
400user_ref_requiredHeader X-User-Ref ontbreekt (en geen alias).Voeg de gebruikersheader toe.
400user_ref_conflictTwee of meer van X-User-Ref, X-Gebruiker-Ref, X-Kantoor-Ref verstuurd met verschillende waarden (na normalisatie).Stuur één header, bij voorkeur X-User-Ref.
401missing_api_keyHeader X-Api-Key ontbreekt.Configuratiefout; verwittig uw operations.
401invalid_api_keySleutel onbekend.Idem; niet herhalen.
403key_revokedSleutel ingetrokken (na rotatie of incident).Schakel over op de nieuwe sleutel.
403ip_not_allowedAanvraag van buiten de IP-allowlist.Geef het nieuwe server-IP door aan Taxon.
403client_suspendedToegang geschorst (misbruikpatroon, wanbetaling).Contacteer Taxon; niet herhalen.
403section_not_allowedGevraagde sectie zit niet in uw plan (section in de body).Verwijder de sectie of breid het plan uit.
403quota_exceededDagplafond van de partner (scope: "day") of van de gebruiker (scope: "user_day", met user_ref); limit in de body. Header Retry-After en retry_after (seconden tot middernacht).In wachtrij zetten tot Retry-After; andere gebruikers blijven werken.
403pilot_exhaustedPilotquota van 200 dossiers bereikt of 60 dagen verstreken; pilot{} in de body.Contacteer Taxon (jaarcontract).
403user_suspendedGebruiker geschorst (raster-scan of manueel); user_ref, reason en since in de body. Opheffing enkel via Taxon-beheer (info@taxon.be).Blokkeer die gebruiker in uw UI; niet herhalen.
404address_not_foundGeen enkele geocoder vindt het adres. Controleer postcode en huisnummer.Laat de gebruiker het adres corrigeren.
404not_foundOnbekend pad onder /api/v1/partner/ (ook de 1.x-paden /adres en /verbruik).Corrigeer het pad.
405method_not_allowedAndere methode dan GET.Gebruik GET.
409idempotency_conflictZelfde Idempotency-Key binnen 24 uur met een ander adres, een andere gebruiker, andere secties of andere parameters.Gebruik een nieuwe sleutel.
422address_impreciseAdres wel gevonden, maar niet tot op het huisnummer (enkel straat of gemeente), of zonder postcode en gemeente.Laat de gebruiker het huisnummer aanvullen.
422type_unsupportedHet gevonden adres of de geocoder ondersteunt het opgegeven type niet.Wijzig het type.
422capakey_invalidcapakeys in de verkeerde vorm of meer dan 10 (details[]).Corrigeer de capakeys.
422capakey_too_farEen perceel ligt verder dan 2 km van het adres; niets geleverd.Verwijder dat perceel.
429rate_limitedMinuutplafond in de applicatie. Header Retry-After en retry_after in de body.Wacht Retry-After, probeer opnieuw met dezelfde Idempotency-Key.
429rate_limit_exceededMinuutplafond in nginx: body {"error": "rate_limit_exceeded", "retry_after": 60}, zonder Retry-After-header en zonder request_id.Wacht retry_after uit de body, probeer dan opnieuw.
502upstream_unavailableBasic-sectie kon niet geleverd worden (databank of geocoder onbereikbaar); details[] noemt het blok en de reden.Tot 3 keer opnieuw proberen met back-off, zelfde Idempotency-Key.
503overloadedTe veel bundels in verwerking; Retry-After en retry_after.Wacht Retry-After, probeer dan opnieuw.
504timeoutDe bundel duurde langer dan 40 seconden.Probeer opnieuw met dezelfde Idempotency-Key.
500internal_errorOnverwachte fout.Eén keer opnieuw proberen; meld daarna de request_id.

Een fout wordt nooit aangerekend (charged: false).

Geen fout, wel een melding. Een ontbrekende bewoonbare oppervlakte bij avm (living_area_required), een uitgevallen sectie (section_missing) of nul referentiepunten (no_comparables) geven HTTP 200 met een regel in notices[] (code, section, message); de betrokken sectie ontbreekt dan in sections_delivered. De aanrekening volgt het pakket (zie 4): een ontbrekende AVM-optie wordt niet aangerekend, een ontbrekende parcel of price_map laat het basispakket aangerekend, nul referentiepunten laten het pakket onaangerekend (free_reason: no_result). Overige codes: dedup (section: basic = basispakket al geleverd, section: avm = AVM-optie al geleverd, section: null = volledige grootboektreffer), avm_indicative_not_regionally_calibrated (WAL/BXL), avm_type_unsupported, avm_insufficient_data, parcel_not_found, address_street_level, region_conflict, geocoder_partially_unavailable, subject_property_excluded (advertenties van het te schatten pand zelf zijn uit de referentiepunten gehaald: zelfde straat en huisnummer binnen 300 m, met dezelfde bus wanneer u een bus opgaf; het aantal staat in excluded_subject_property op het blok), capakey_not_found, main_parcel_not_in_capakeys, parcel_analysis_incomplete, plot_area_not_cadastral, bedrooms_filter_dropped, price_map_sparse (sectie geleverd), price_map_unavailable (geen dekking binnen 3 km, sectie niet geleverd, pakket ongewijzigd), pilot_exhausted (enkel bij een plan waarvan de pilot-overloop aangerekend wordt), key_rotation_pending (de gebruikte sleutel is geroteerd en werkt nog tot de datum in het bericht; ook in /usage), test_environment, info; bij section_missing is message gelijk aan timeout of upstream_error. Onbekende codes negeren.

8.GET /usage

Uw eigen gebruik per kalendermaand: totaal, per gebruiker, per API-sleutel (2.4.1), per dag, per sectie en een kwaliteitsblok (foutpercentage, latentie p50/p95, aantal aanvragen met upstream-storingen). requests telt alle aanvragen, cases de aanvragen met HTTP 200, charged die met een prijs; sections telt aangerekende eenheden met de sleutels package (basispakket) en avm (AVM-optie); sections_delivered (sinds 2.4.0 ook in total) telt de vier echte secties basic, parcel, avm, price_map; per_section gebruikt package en avm. Bedoeld om zelf te controleren wat Taxon factureert en om door te factureren aan uw gebruikers. X-User-Ref is hier optioneel en werkt als filter. Het blok plan toont uw plan zonder prijzen: sections_allowed, max_per_minute, max_per_day, max_per_user_per_day, test_max_per_day, dedup_days, idempotency_hours, address_mode. requests telt dezelfde aanvragen als de dagplafonds (zie 7).

ParameterBetekenis
monthYYYY-MM, standaard de lopende maand (Europe/Brussels).
formatjson (standaard) of csv.
user_refOptioneel filter op één gebruiker (evenwaardig aan de header X-User-Ref, die wint wanneer beide opgegeven zijn), hoofdletterongevoelig.

Onbekende parameters (ook de 1.x-namen maand, formaat, gebruiker_ref) geven 400 invalid_request met details[].field. Live antwoord van 08-09-2026 (live-sleutel, twee gebruikers, twee sleutels, vier aanvragen; de klantcode is vervangen door een plaatshouder):

GET /api/v1/partner/usage?month=2026-09 HTTP/1.1
X-Api-Key: tx_live_<32 hex>

{
  "client": "<client code>",
  "month": "2026-09",
  "environment": "live",
  "user_ref": null,
  "total": {
    "requests": 4,
    "cases": 4,
    "charged": 4,
    "free_dedup": 0,
    "free_pilot": 0,
    "free_error": 0,
    "sections": {"package": 3, "avm": 2},
    "sections_delivered": {"basic": 4, "parcel": 4, "avm": 2, "price_map": 4},
    "amount": 13.0,
    "currency": "EUR",
    "excl_vat": true,
    "duration_ms_avg": 3531
  },
  "per_user": [
    {
      "user_ref": "office-kortrijk-03",
      "requests": 2,
      "cases": 2,
      "charged": 2,
      "free_dedup": 0,
      "sections": {"package": 2, "avm": 1},
      "sections_delivered": {"basic": 2, "parcel": 2, "avm": 1, "price_map": 2},
      "amount": 8.0,
      "last_activity": "2026-09-08T10:39:27+02:00"
    },
    {
      "user_ref": "office-ieper-01",
      "requests": 2,
      "cases": 2,
      "charged": 2,
      "free_dedup": 0,
      "sections": {"package": 1, "avm": 1},
      "sections_delivered": {"basic": 2, "parcel": 2, "avm": 1, "price_map": 2},
      "amount": 5.0,
      "last_activity": "2026-09-08T10:39:16+02:00"
    }
  ],
  "per_day": [{"day": "2026-09-08", "requests": 4, "cases": 4, "charged": 4, "amount": 13.0}],
  "per_section": {"package": {"delivered": 4, "charged": 3, "amount": 9.0}, "avm": {"delivered": 2, "charged": 2, "amount": 4.0}},
  "quality": {"error_pct": 0.0, "latency_p50_ms": 3065, "latency_p95_ms": 7531, "upstream_errors": 0},
  "pilot": null,
  "generated_at": "2026-09-08T10:39:27+02:00",
  "plan": {
    "sections_allowed": ["basic", "parcel", "avm", "price_map"],
    "max_per_minute": 30,
    "max_per_day": 300,
    "max_per_user_per_day": 80,
    "test_max_per_day": 80,
    "dedup_days": 30,
    "idempotency_hours": 24,
    "address_mode": null
  },
  "request_id": "c535faa3301644c1af51f3901fea7e2c"
}

Het blok pilot (en billing.pilot_status) is enkel de pilotteller. De klantstatus uit het grootboek (pilot, actief, geschorst, beëindigd) wordt niet in het antwoord geleverd; een schorsing merkt u aan 403 client_suspended of 403 user_suspended. Met een live sleutel dragen sections en charged de aangerekende aantallen en amount de bedragen volgens uw overeenkomst.

Per API-sleutel 2.4.1

Sinds 2.4.1 draagt het antwoord ook het blok per_key (tussen per_user en per_day): het gebruik per API-sleutel, met dezelfde filters als de rest van het antwoord (maand, de omgeving van de aanroepende sleutel, user_ref). Per sleutel: prefix (de eerste 12 tekens, zoals in uw sleutellijst), label (null als leeg), environment, active, revoked_at (null zolang actief), requests, cases, charged, sections, sections_delivered, amount en last_activity; gesorteerd op amount, dan requests, aflopend. Sleutels zonder aanvragen in de maand staan er niet in; een ingetrokken sleutel met aanvragen in die maand wel (active: false, revoked_at ingevuld). De sommen over per_key zijn gelijk aan total. Voor het voorbeeld hierboven (drie aanvragen met de huidige live-sleutel, één met een vorige live-sleutel die intussen ingetrokken is):

"per_key": [
  {
    "prefix": "tx_live_3f9a",
    "label": "production",
    "environment": "live",
    "active": true,
    "revoked_at": null,
    "requests": 3,
    "cases": 3,
    "charged": 3,
    "sections": {"package": 2, "avm": 2},
    "sections_delivered": {"basic": 3, "parcel": 3, "avm": 2, "price_map": 3},
    "amount": 10.0,
    "last_activity": "2026-09-08T10:39:27+02:00"
  },
  {
    "prefix": "tx_live_b71c",
    "label": "old key",
    "environment": "live",
    "active": false,
    "revoked_at": "2026-09-08T10:39:20+02:00",
    "requests": 1,
    "cases": 1,
    "charged": 1,
    "sections": {"package": 1, "avm": 0},
    "sections_delivered": {"basic": 1, "parcel": 1, "avm": 0, "price_map": 1},
    "amount": 3.0,
    "last_activity": "2026-09-08T10:39:15+02:00"
  }
]

CSV

?format=csv levert één rij per aanvraag, UTF-8 met BOM, scheidingsteken ;, elk veld tussen dubbele aanhalingstekens, decimaal , (opent direct in Excel nl-BE/fr-BE), CRLF-regeleinden. Bestandsnaam taxon-usage-<client>-<month>.csv (Content-Disposition). Dit is dezelfde lijst als de gebruiksbijlage bij de maandfactuur. Secties worden gescheiden met |; charged is 0 of 1. Echte rijen van 08-09-2026 (de vier aanvragen uit het gebruiksvoorbeeld hierboven, 16 kolommen sinds 2.4.1): rij 1 is het basispakket voor Grote Markt 34 Ieper, rij 2 de AVM-optie die één seconde later voor hetzelfde dossier toegevoegd werd (dedup_of = rij 1, pakket 0), rij 3 het hoofdvoorbeeld van sectie 4, rij 4 een aanvraag met sections=parcel genormaliseerd naar het pakket:

"request_id";"timestamp";"user_ref";"case_ref";"address";"region";"sections_requested";"sections_delivered";"charged";"free_reason";"dedup_of";"price_package";"price_avm";"price_total";"status_code";"key_prefix"
"f5569dd2c231469abaa2536b1bc4dd61";"2026-09-08T10:39:15+02:00";"office-ieper-01";"DOS-2026-0451";"Grote Markt 34, 8900 Ieper";"VL";"basic|parcel|price_map";"basic|parcel|price_map";"1";"";"";"3,00";"0,00";"3,00";"200";"tx_live_b71c"
"76cddf8bb6fc4a299283f85aa2be799e";"2026-09-08T10:39:16+02:00";"office-ieper-01";"DOS-2026-0451";"Grote Markt 34, 8900 Ieper";"VL";"basic|parcel|avm|price_map";"basic|parcel|avm|price_map";"1";"";"f5569dd2c231469abaa2536b1bc4dd61";"0,00";"2,00";"2,00";"200";"tx_live_3f9a"
"cf514c7de2714c11806e2ebf053d0247";"2026-09-08T10:39:24+02:00";"office-kortrijk-03";"DOS-2026-0452";"Doorniksestraat 40, 8500 Kortrijk";"VL";"basic|parcel|avm|price_map";"basic|parcel|avm|price_map";"1";"";"";"3,00";"2,00";"5,00";"200";"tx_live_3f9a"
"3aa7ba378561487fad54fd5fbbe83f1e";"2026-09-08T10:39:27+02:00";"office-kortrijk-03";"";"Rijselstraat 20, 8900 Ieper";"VL";"basic|parcel|price_map";"basic|parcel|price_map";"1";"";"";"3,00";"0,00";"3,00";"200";"tx_live_3f9a"

free_reason is leeg (aangerekend) of dedup, pilot, pilot_exhausted (rij met status 403: de aanvraag kreeg pilot_exhausted), test, no_result (nul referentiepunten, of een adresfout: rijen met status 404 of 422), error, timeout. price_package is de prijs van het basispakket (basic + parcel + price_map), price_avm die van de AVM-optie (kolommen sinds 2.4.0; de drie vroegere prijskolommen per sectie zijn verdwenen). sections_requested is de genormaliseerde lijst: het pakket uitgeschreven als basic|parcel|price_map. key_prefix (laatste kolom, 2.4.1) is het voorvoegsel van de API-sleutel die de aanvraag deed, zoals in per_key[].prefix.

9.GET /health

Publiek, zonder sleutel, zonder gegevens. Geschikt voor uw monitoring. De sleutels van dit endpoint zijn bewust behouden uit 1.x (Nederlandse namen): versie = versie, tijd = tijdstip, bundel = bundelmodus, db = databank.

{"status": "ok", "service": "taxon-partner-api", "versie": "2.5.1", "tijd": "2026-09-16T10:47:16+02:00", "bundel": "live", "db": "ok"}

versie is de versie van de dienst (2.4.2 = contract 2.0 plus de sectie price_map, de kenmerken van de referentiepunten, de fixes van de eerste externe integratietest, het sleutelbeheer door de partner, het basispakket en het gebruik per sleutel), niet de versie van dit contract (2.0). bundel is live (echte secties) of stub (testopstelling); db is ok of fout. Bij een databankfout antwoordt het endpoint met HTTP 503 en "status": "degraded". Er is geen aparte onderhoudsvlag; gepland onderhoud wordt per e-mail aangekondigd.

10.Bronvermelding en disclaimer (verplicht)

Elk scherm, rapport of document waarin API-gegevens getoond worden, draagt zichtbaar en onlosmakelijk de bronvermelding en de disclaimer. De API levert beide letterlijk mee in de velden attribution en disclaimer, in de taal van Accept-Language. Ze mogen niet ingekort, naar een bijlage verplaatst of verwijderd worden.

Bronvermelding

EN: References: Taxon (taxon.be)
FR: Références : Taxon (taxon.be)
NL: Referenties: Taxon (taxon.be)

Disclaimer

EN: Asking prices from listings, not notarial sale prices. Data for internal use per case only; building a derived database is prohibited. The valuer decides, the AVM is a support tool.
FR: Prix d'annonce, pas de prix de vente notariés. Données à usage interne par dossier; toute constitution de base de données dérivée est interdite. L'expert décide, l'AVM est un outil d'aide.
NL: Vraagprijzen uit advertenties, geen notariële verkoopprijzen. Gegevens uitsluitend voor intern gebruik per dossier; het aanleggen van een afgeleide databank is verboden. De schatter beslist, de AVM is een hulpmiddel.

Bronregels per gegevenslaag

Naast de algemene bronvermelding levert de API per laag een bronregel (source, attribution) die u eveneens overneemt naast die gegevens, ook in white-label:

  • Perceel en gebouwenpark: Bron: FOD Financiën, kadastraal percelenplan (CadGIS) plus de gewestelijke gebouwenlaag die in parcel.source genoemd wordt
  • Statistische sectoren en indexen: Bron: Statbel, CC BY 4.0
  • Wallonië (planologische bestemming, geocoding): Bron: Service public de Wallonie
  • Vlaanderen: Bron: Vlaamse overheid, Gratis Open Data Licentie v1.2
  • Brussel: Bron: perspective.brussels / Leefmilieu Brussel, CC BY
  • Veiligheid: Bron: Federale Politie, politiële criminaliteitsstatistieken (PCS)
  • Voorzieningen: © OpenStreetMap-bijdragers (ODbL)
  • Prijskaart: de source-regel van de sectie

Aanvullende kwalificaties die u letterlijk overneemt in uw rapportsjablonen: de referentiepunten zijn vraagprijzen uit publiek aanbod, geen transactieprijzen; de AVM-waarde is een indicatieve modeluitvoer met vork, geen expertise; perceel-, plan- en overheidsgegevens worden "as is" en louter ter informatie geleverd met hun peildatum; de gegevens bevatten geen energieprestatiegegevens (EPC/PEB).

11.Gebruiksregels

Samenvatting van de contractuele regels die de API ook technisch afdwingt. De overeenkomst primeert.

  • Per dossier. Toon de gegevens enkel aan de schatter en neem ze enkel op in het expertiserapport van het dossier waarvoor de aanvraag gebeurde. Elke aanvraag hoort bij een concreet dossier en een geïdentificeerde gebruiker (X-User-Ref, bij voorkeur ook X-Case-Ref).
  • Bewaring maximaal 30 dagen. Ruwe API-antwoorden verdwijnen uiterlijk 30 dagen na de aanvraag uit operationele systemen, logs en caches. Enkel het afgewerkte rapport (PDF) blijft in het wettelijke dossierarchief.
  • Geen afgeleide databank. Gegevens uit meerdere aanvragen niet samenvoegen, indexeren of opslaan tot een eigen databank, kaartlaag, index of prijsmodel; dit geldt ook voor de geometrie van de prijskaart.
  • Geen modelvoeding. De gegevens niet gebruiken om een algoritme, model of AI-systeem te trainen, te kalibreren, te valideren of te verbeteren.
  • Geen doorverkoop of bulk. Niet doorverkopen, publiceren, exporteren of aan derden geven buiten het rapport; de API niet geautomatiseerd of systematisch bevragen buiten een dossier.
  • Foto's (2.5.0). Haal foto's op binnen de geldigheid van de link (1 uur) en gebruik ze enkel voor het dossier waarvoor de aanvraag gebeurde. Ze inbedden in het schattingsrapport (PDF) van dat dossier mag, altijd met een zichtbare bronvermelding bij elke foto (attribution, zie 10), onder de voorwaarden van de partnerovereenkomst (de partner vrijwaart Taxon voor claims van portalen of makelaars over de foto's). Geen herpublicatie, geen bewaring buiten dat rapport, geen bulkdownload; de resolutie blijft maximaal 640 px.
  • Bronvermelding zichtbaar in uw UI en in elk rapport (zie 10). White-label enkel via een apart addendum.
  • EPC "zoals geadverteerd". Toon EPC-labels van referentiepunten nooit als een opgezochte of gecontroleerde waarde.
  • Geen notariële prijzen. Communiceer nooit dat de gegevens van notarissen, VLABEL of transacties afkomstig zijn; het zijn vraagprijzen.
  • Menselijke beslissing. Geen beslissing met rechtsgevolgen (krediet, fiscaal, verzekering) uitsluitend op basis van de API of de AVM zonder de eindverantwoordelijkheid van een expert.
  • Sleutel geheim, een lek melden binnen 48 uur; op verzoek (maximaal tweemaal per jaar) een uittreksel van dossiernummers tegenover aanvragen leveren.
  • Documentatie vertrouwelijk. Deze documentatie is bestemd voor uw technisch personeel; niet openbaar maken.

12.Changelog en 1.x-mapping

VersieDatumWijzigingen
2.5.116-09-2026Grond zonder leeftijdsgrens. Bij type=land zijn de referenties niet langer beperkt tot zoekertjes van de laatste 24 maanden: alle grondzoekertjes te koop (zelfde subtype-uitsluitingen) binnen 5 km (eenmaal uitgebreid tot 10 km bij minder dan 10 in totaal) worden geleverd, eerst de zoekertjes van de laatste 24 maanden (op afstand) en daarna de oudere (op afstand), maximaal 25 per blok, zodat u oudere vraagprijzen binnen het dossier kunt aanpassen aan de marktevolutie (prijsindexering); de licentievoorwaarden blijven gelden: niet samenvoegen, indexeren of opslaan over dossiers heen. Nieuw itemveld age_months (hele kalendermaanden sinds published, enkel bij type: land); het blokveld max_age_months is null voor grond (blijft 24 voor huis en appartement). neighbourhood.land_price_level houdt de laatste 24 maanden aan en verruimt naar 60 maanden bij minder dan 10 bruikbare zoekertjes binnen 24 maanden; zijn max_age_months zegt welk venster gebruikt is (24 of 60). De melding no_comparables krijgt een eigen grondtekst. Huis en appartement ongewijzigd. Additief. Dienstversie 2.5.1. Patch van 16-09-2026 (zelfde versie 2.5.1): days_online is gedocumenteerd als nullable (null als de bron geen online-duur registreerde, vooral oudere offline zoekertjes; last_seen is dan gelijk aan published); het doel van de oudere zoekertjes is geformuleerd als prijsindexering binnen het dossier (licentie ongewijzigd); testscenario T24d gebruikt een voorbeeldadres dat effectief oudere zoekertjes teruggeeft; landantwoorden bewaard onder 2.5.0 worden niet meer uit de invoercache herhaald.
2.5.015-09-2026Gronden en fotoregel. Nieuwe waarde type=land (aliassen grond, terrain, bouwgrond) voor bouwgronden: één referentieblok met grondzoekertjes te koop binnen 5 km (eenmaal uitgebreid tot 10 km bij minder dan 10; blokveld low_sample en melding low_sample), items met plot_area_m2 en price_per_m2_plot (woningvelden null, features beperkt tot plot_area_m2, zoning, flood_zone), neighbourhood.land_price_level {radius_m, count, price_per_m2_plot {p25, median, p75}, price_kind, max_age_months} terwijl price_level en epc_prices null zijn (melding housing_stats_not_available_for_land); geen AVM voor grond (melding avm_not_available_for_land, sectie niet geleverd, niet aangerekend); living_area_m2 optioneel; parcel en price_map ongewijzigd; prijs van het basispakket. Fotoregel versoepeld: foto's mogen in het rapport van het dossier ingebed worden met een zichtbare bronvermelding per foto, onder de voorwaarden van de partnerovereenkomst (geen herpublicatie, geen bewaring buiten dat rapport, geen bulkdownload, maximaal 640 px). Patch van 15-09-2026 (zelfde versie): grondreferenties en land_price_level beperkt tot bouwgronden, projectgronden en gronden zonder nader subtype (landbouwgrond, weiden, bos, industriegrond en staanplaatsen via het subtype uitgesloten); land_price_level telt enkel zoekertjes tussen 15 en 5.000 EUR per m² grond; nieuwe LandFeatures-sleutel land_type (building_plot | project_land | other), het eerste woord van summary volgt die (additief). Additief: geen wijziging van paden of bestaande velden. Dienstversie 2.5.0.
2.4.214-09-2026Actueel kadastraal percelenplan. De sectie parcel leest nu de laag PlanParcellaire van de FOD Financiën (lopende fiscale toestand, vandaag 01-01-2027) in plaats van de jaarlijkse INSPIRE-momentopname (01-01-2026); de INSPIRE-laag blijft de terugval bij een storing of een leeg antwoord. Nieuw veld fiscal_situation (ISO-datum van de fiscale toestand van het percelenplan, bv. 2027-01-01; 2026-01-01 als de INSPIRE-terugval antwoordde; null als onbekend) op parcel, op elk item van parcels[] en op elk item van parcel_candidates[]. source vermeldt de laag (CadGIS PlanParcellaire (FOD Financiën) of CadGIS INSPIRE (FOD Financiën)). Additief: geen wijzigingen aan paden, parameters of bestaande velden. Dienstversie 2.4.2.
2.4.108-09-2026Gebruik per API-sleutel. /usage krijgt het blok per_key[] (per sleutel: prefix, label, environment, active, revoked_at, requests, cases, charged, sections, sections_delivered, amount, last_activity; dezelfde filters als de rest van het antwoord; sleutels zonder aanvragen in de maand staan er niet in, ingetrokken sleutels met aanvragen wel). CSV: nieuwe laatste kolom key_prefix (16 kolommen). Geen wijzigingen aan paden, parameters of bestaande velden. Dienstversie 2.4.1.
2.4.008-09-2026Basispakket. basic + parcel + price_map vormen nu één pakket per dossier; de AVM blijft een aparte optie. billing.price is nu {package, avm, total, currency, excl_vat}; in /usage gebruiken total.sections, per_user[].sections en per_section package/avm, total.sections_delivered toegevoegd; CSV-kolommen price_package, price_avm, price_total. parcel of price_map apart opvragen wordt genormaliseerd naar het pakket. Dienstversie 2.4.0.
2.3.008-09-2026Sleutelbeheer door de partner. Sleutels worden precies één keer getoond in het partnerdashboard op taxon.be (binnen 7 dagen na de aanmaak, daarna wordt de versleutelde kopie vernietigd); partners maken en trekken zelf hun testsleutels in (maximaal 3 actief) en roteren zelf hun live-sleutel: de oude live-sleutel blijft 7 dagen werken en elk antwoord van /address en /usage ermee draagt de nieuwe melding key_rotation_pending (section: null, bericht met de einddatum); daarna 403 key_revoked. De eerste live-sleutel wordt nog altijd door Taxon uitgereikt na de ondertekende overeenkomst. Geen wijzigingen aan paden, parameters of velden. Dienstversie 2.3.0.
2.2.207-09-2026Fixes na de eerste externe integratietest (Propteo): fotolinks leveren altijd een serverthumbnail (standaard 640 px, nooit het origineel); rental_value altijd binnen rental_value_range; parcel_candidates, parcel_candidates_source en parcel_candidates_remark altijd aanwezig (null met capakeys); parcel_candidates[].direction en garden_orientation taalonafhankelijk (N/E/S/W); zoning.category is een Engelse enum; source-regels vertaald voor fr/en; één gemeentenaamregel voor de hele bundel (geen exoniemen); new_build enkel als year_built het niet tegenspreekt; Franse samenvattingen in het juiste geslacht; header- en parameterfouten in één 400; free_reason: dedup ook met een testsleutel als elke geleverde sectie al geleverd was; pilot_status.expired overal; blok plan in /usage; CSV-Content-Type met één charset; Cache-Control en X-Content-Type-Options één keer. Dienstversie 2.2.2.
2.2.107-09-2026Adversariele QA-ronde (geen sleutel- of padwijzigingen): busnummers box 3, b3, app 3 herkend; een adres zonder postcode en zonder gemeente geeft 422 address_imprecise; epc=A+ met een rauwe plus geeft 400 (stuur A%2B); de invoercache en de Idempotency-Key-vergelijking dekken alle parameters en de taal (andere invoer = verse bundel, nog steeds gratis voor al geleverde secties; zelfde sleutel met andere parameters = 409); section_missing voor een deelblok van basic draagt section: basic met de bloknaam in de message; /usage weigert een parameter die twee keer verstuurd wordt; price_map-geometrieen altijd geldig; gelijktijdige identieke aanvragen in pilot/test tellen een keer. Dienstversie 2.2.1.
2.2.007-09-2026Kenmerken per referentiepunt. Elk referentiepunt (koop en huur) draagt features (gestructureerde kenmerken van de advertentie, onbekend = null), summary (een zin in de woorden van Taxon, nl/fr/en), thumbnail {url, valid_until} (hoofdfoto op 160 px, dezelfde foto als photos[0]) en photo_count. Geen advertentietekst, geen prijswijziging (hoort bij basic). Dienstversie 2.2.0 in /health.
2.0.007-09-2026Engels contract. Paden /address en /usage (oude paden 404). Header X-User-Ref verplicht (aliassen X-Gebruiker-Ref, X-Kantoor-Ref verouderd), X-Case-Ref (alias X-Dossier-Ref), Accept-Language: en toegevoegd. Alle query-parameters, JSON-sleutels, enum-waarden en meldingscodes Engels (mapping hieronder); oude parameternamen geven 400 invalid_request. Foutbody's met charged, details[] {field, issue}, user_ref, reason, since, limit, scope user_day; foutcodes user_ref_required en user_ref_conflict. Nieuwe sectie price_map (dienst 2.1.0): meldingen price_map_sparse en price_map_unavailable, upstream_errors.price_map: no_coverage, een prijssleutel, een gebruikssleutel en een CSV-kolom voor de prijskaart (vervangen door de pakketsleutels in 2.4.0). Gedragswijziging: condition bereikt nu de AVM. /health behoudt zijn sleutels; versie toont de dienstversie (2.1.0 op dat moment).
1.2.007-09-2026Meerdere percelen per pand. Query-parameter capakeys (kommagescheiden, maximaal 10, CadGIS-vorm, ook met streepje): de parcel-sectie levert parcels[] plus totalen; de velden op sectieniveau blijven die van het hoofdperceel. Zonder capakeys: parcel_candidates[] (aangrenzende percelen, maximaal 12, met richting en bebouwd). Nieuwe fouten 422 capakey_invalid en 422 capakey_too_far (meer dan 2 km); meldingen voor perceel niet gevonden, hoofdperceel niet in capakeys, onvolledige perceelanalyse, niet-kadastrale grondoppervlakte, losgelaten slaapkamerfilter. Parameters grondoppervlakte (terugval voor de AVM) en slaapkamers (filter plus of min 1 met terugval onder 8, en AVM-invoer). Dedup: hetzelfde pand met andere capakeys binnen het venster = geen nieuwe aanrekening.
1.1.004-09-2026Het begrip "kantoor" werd "gebruiker" (beslissing Taxon). De gebruikersheader werd verplicht; de kantoorheader bleef als verouderde alias (zelfde normalisatie; beide met een verschillende waarde = 400 conflict). Definitie van gebruiker in sectie 3. Plafonds vastgelegd: 20 per gebruiker per dag, 300 per sleutel per dag, 60 per minuut. De waakhond schorst de gebruiker, niet de klant.
1.0.003-09-2026Eerste versie van het koppelcontract: adresbundel (basic, parcel, avm), gebruik (JSON + CSV), health. Dedup per gebruiker + pand gedurende 30 dagen, Idempotency-Key 24 uur, plafonds per minuut/dag/maand en per gebruiker, pilot 200 dossiers. Watertoets niet inbegrepen. AVM zonder oppervlakte = HTTP 200 met een melding; dagplafonds als 403 quota_exceeded; 504 timeout; antwoordheader X-Idempotent-Replay; gebruikersreferentie genormaliseerd naar kleine letters. Responsvorm volgens de gebouwde bundel: referentiepunten als lijst van blokken per type en transactie, foto-objecten (404 na verloop), veiligheid als cijfers per 1.000 inwoners, upstream-fouten, ruime vork en huurvork.
geplandlaterOverstromingsgegevens per gewest als extra veld in parcel; POST /address met JSON-body voor rijkere AVM-invoer; asynchrone verwerking voor trage lagen.

Wijzigingen aan bestaande velden worden minstens 30 dagen vooraf aangekondigd; nieuwe velden kunnen zonder aankondiging toegevoegd worden (uw parser moet onbekende velden negeren). Een nieuwe hoofdversie krijgt een nieuw pad (/api/v2/partner/).

Mapping 1.x (Nederlands) naar 2.0 (Engels)

Voor teams die de 1.x-documentatie gelezen hebben. De oude namen werken niet meer, behalve de drie header-aliassen. Niet-opgelijste sleutels (lat, lon, capakey, epc_label, score, label, plan, model, n, p25, p75, pct, ref, url, download_token, quota, code, status, type, request_id, pilot, details, top_10, comparables, parcel, avm, capakeys, epc, format) zijn ongewijzigd.

Waar1.x2.0
Paden/adres, /verbruik/address, /usage
HeadersX-Gebruiker-Ref (1.1), X-Kantoor-Ref (1.0), X-Dossier-Ref; Accept-Language: nl|frX-User-Ref, X-Case-Ref (oude namen blijven als aliassen); Accept-Language: nl|fr|en
Query /addressadres, secties (basis), type=huis|appartement, opp, bouwjaar, staat (nieuw|zeer_goed|goed|matig|te_renoveren), slaapkamers, opp_grondaddress, sections (basic), type=house|apartment|land, living_area_m2, year_built, condition (excellent|very_good|good|average|poor), bedrooms, plot_area_m2
Query /usagemaand, formaat, gebruiker_refmonth, format, user_ref
Topniveauomgeving, uit_cache, adres, secties_geleverd, basis, facturatie, meldingen, fouten_upstream, bronvermelding, gegenereerd_openvironment, from_cache, address, sections_delivered, basic, billing, notices, upstream_errors, attribution, generated_at
addressinvoer, genormaliseerd, bus, postcode, gemeente, gewest, niscode, geocode_bron, precisie: huisnummerinput, normalized, box, postal_code, municipality, region, nis_code, geocoder, precision: house_number
basic.comparables[]-bloktransactie: koop|huur, transactie_label, adres_modus: huisnummer|straat, straal_m, aantal, max_leeftijd_maanden, uitgesloten_eigen_pand, slaapkamers_filter {gevraagd, bereik, toegepast, aantal_binnen_filter}transaction: sale|rent, transaction_label, address_mode: house_number|street, radius_m, count, max_age_months, excluded_subject_property, bedrooms_filter {requested, range, applied, count_within_filter}; nieuw in 2.5.0 (geen 1.x-equivalent): low_sample (grond)
items[] (referentiepunt)adres, afstand_m, prijs, prijs_soort: vraagprijs, prijs_soort_label, prijs_per_m2, opp_wonen_m2, opp_grond_m2, slaapkamers, epc_kengetal_kwh_m2, epc_bron, bouwjaar, staat, bebouwing: open|halfopen|gesloten|appartement, nieuwbouw, publicatie, dagen_online, laatst_gezien, bron: advertentie, bron_label, historiek[] {datum, prijs, gebeurtenis: publicatie|prijsdaling|prijsstijging|herpublicatie|offline}, fotos[] {geldig_tot}address, distance_m, price, price_kind: asking_price, price_kind_label, price_per_m2, living_area_m2, plot_area_m2, bedrooms, epc_kwh_m2, epc_source, year_built, condition, building_type: detached|semi_detached|terraced|apartment, new_build, published, days_online (null when the source recorded no online duration, mostly older offline listings; last_seen then equals published), last_seen, source: listing, source_label, history[] {date, price, event: published|price_drop|price_increase|republished|offline}, photos[] {valid_until}; nieuw in 2.2.0 (geen 1.x-equivalent): features {...}, summary, thumbnail {url, valid_until}, photo_count; nieuw in 2.5.0: price_per_m2_plot (grond)
basic.neighbourhood (was buurtstats)sector {naam, niveau, gemeente}, gebouwenpark {niveau, peildatum, totaal, verdeling[] {cat: residentieel|handel_diensten|industrie|landbouw|andere, aantal}, bron}, prijsniveau {koop_m2, huur_m2_jaar, brutorendement_pct, brutorendement_p25_p75, straal_m, prijs_soort} met mediaan, epc_prijzen {straal_m, labels {mediaan_m2, aantal}}, veiligheid {niveau, gemeente, jaar, woninginbraak_per_1000, misdrijven_per_1000, gewest_woninginbraak_per_1000, gewest_misdrijven_per_1000, jaren[], bron}sector {name, level, municipality}, building_stock {level, reference_date, total, distribution[] {category: residential|commerce_services|industry|agriculture|other, count}, source}, price_level {sale_per_m2, rent_per_m2_year, gross_yield_pct, gross_yield_p25_p75, radius_m, price_kind} met median, epc_prices {radius_m, labels {median_per_m2, count}}, safety {level, municipality, year, burglaries_per_1000, crimes_per_1000, region_burglaries_per_1000, region_crimes_per_1000, years[], source}; nieuw in 2.5.0: land_price_level {radius_m, count, price_per_m2_plot {p25, median, p75}, price_kind, max_age_months} (grond)
basic.amenities (was voorzieningen)schaal, straal_m, aantal_pois, deelscores {openbaar_vervoer, zorg, winkels, sport_cultuur, onderwijs, groen} {aantal}, top_10[] {naam, afstand_m}, attributiescale, radius_m, poi_count, sub_scores {public_transport, healthcare, shops, sport_culture, education, green_space} {count}, top_10[] {name, distance_m}, attribution
parcelgewest, oppervlakte_m2, oppervlakte_kadastraal_m2, perceel_breedte_m, perceel_diepte_m, gevel_breedte_m, bebouwde_opp_m2, gebouwen_aantal, orientatie_tuin, orientatie_tuin_graden, bestemming {categorie}, voorkooprecht {status: ja|geen|onbekend, bron, dekking_pct, percelen, percelen_onbekend}, opmerking, bron, hoofdperceel, percelen[] {hoofdperceel, afstand_tot_adres_m}, percelen_aantal, oppervlakte_totaal_m2, oppervlakte_kadastraal_totaal_m2, bestemming_gezamenlijk, voorkooprecht_gezamenlijk, percelen_niet_gevonden, opp_grond_bron: "kadaster hoofdperceel" | "kadaster n percelen" | partner, perceel_kandidaten[] {oppervlakte_m2, richting, bebouwd, afstand_m}, perceel_kandidaten_bron, perceel_kandidaten_opmerkingregion, area_m2, cadastral_area_m2, fiscal_situation (2.4.2, ook in parcels[] en parcel_candidates[]; geen 1.x-equivalent), width_m, depth_m, frontage_m, built_area_m2, buildings_count, garden_orientation, garden_orientation_deg, zoning {category}, preemption_right {status: yes|none|unknown, source, coverage_pct, parcels, parcels_unknown}, remark, source, main_parcel, parcels[] {is_main, distance_to_address_m}, parcels_count, total_area_m2, cadastral_total_area_m2, zoning_combined, preemption_right_combined, parcels_not_found, plot_area_source: cadastre_main_parcel | cadastre_<n>_parcels (n = 2 to 10; partner only in avm.inputs_used), parcel_candidates[] {area_m2, direction, built, distance_m}, parcel_candidates_source, parcel_candidates_remark
avmwaarde, vork, vork_90, huurwaarde, huurwaarde_vork, betrouwbaarheid, n_comparables, n_comparables_500m, n_comparables_1km, invoer_gebruikt {opp_wonen_m2, bouwjaar, staat, slaapkamers, opp_grond_m2, opp_grond_bron}, prijs_soort: vraagprijsvalue, range, range_90, rental_value, rental_value_range, confidence, comparables_count, comparables_count_500m, comparables_count_1km, inputs_used {living_area_m2, year_built, condition, bedrooms, plot_area_m2, plot_area_source}, price_basis: asking_price_model
billing (was facturatie)gebruiker_ref (1.0: kantoor_ref), dossier_ref, aangerekend, reden_gratis: geen_resultaat|fout|pilot_uitgeput, prijs {basis, totaal, munt, excl_btw}, dedup_van, dedup_geldig_tot, maand, verbruik_maand_tot_nu {dossiers, bedrag}, pilot_stand {actief, gebruikt, resterend, einde, verlopen}, dag {klant_vandaag, gebruiker_vandaag}user_ref, case_ref, charged, free_reason: no_result|error|pilot_exhausted, price {package, avm, total, currency, excl_vat} (2.4.0), dedup_of, dedup_valid_until, month, month_to_date {cases, amount}, pilot_status {active, used, remaining, ends, expired}, today {client_today, user_today}
notices[] (was meldingen){code, sectie, bericht}; codes opp_required, avm_indicatief, geen_comparables, adres_straatniveau, geocoder_deels_onbereikbaar, gewest_conflict, eigen_pand_uitgesloten, hoofdperceel_niet_in_capakeys, perceel_analyse_onvolledig, opp_grond_niet_kadastraal_bevestigd, slaapkamers_filter_losgelaten, sectie_ontbreekt (upstream_fout), test_omgeving, pilot_uitgeput{code, section, message}; codes living_area_required, avm_indicative_not_regionally_calibrated, no_comparables, address_street_level, geocoder_partially_unavailable, region_conflict, subject_property_excluded, main_parcel_not_in_capakeys, parcel_analysis_incomplete, plot_area_not_cadastral, bedrooms_filter_dropped, section_missing (upstream_error), test_environment, pilot_exhausted; nieuw in 2.3.0 (geen 1.x-equivalent): key_rotation_pending
upstream_errors-sleutelsbasis, basis.comparables, basis.buurtstats, basis.voorzieningen, buurtstats.gebouwenpark, buurtstats.veiligheid, buurtstats.prijsniveau, buurtstats.epc_prijzen; waarde upstream_foutbasic, basic.comparables, basic.neighbourhood, basic.amenities, neighbourhood.building_stock, neighbourhood.safety, neighbourhood.price_level, neighbourhood.epc_prices; waarde upstream_error
Foutbody'saangerekend, details[] {veld, fout}, sectie, gebruiker_ref, reden, sinds, limiet, scope: gebruiker_day; codes gebruiker_ref_required, gebruiker_ref_conflictcharged, details[] {field, issue}, section, user_ref, reason, since, limit, scope: user_day; codes user_ref_required, user_ref_conflict
/usageklant, maand, omgeving, gebruiker_ref, totaal {opvragingen, dossiers, aangerekend, gratis_dedup, gratis_pilot, gratis_storing, secties, bedrag, munt, excl_btw, duur_ms_gem}, per_gebruiker[] {secties_geleverd, laatste_activiteit}, per_dag[] {dag}, per_sectie {geleverd, aangerekend, bedrag}, kwaliteit {fout_pct, latentie_p50_ms, latentie_p95_ms, upstream_fouten}, gegenereerd_opclient, month, environment, user_ref, total {requests, cases, charged, free_dedup, free_pilot, free_error, sections, amount, currency, excl_vat, duration_ms_avg}, per_user[] {sections_delivered, last_activity}, per_key[] {prefix, label, environment, active, revoked_at, requests, cases, charged, sections, sections_delivered, amount, last_activity} (2.4.1, interne naam per_sleutel, geen 1.x-equivalent), per_day[] {day}, per_section {delivered, charged, amount} (2.4.0: sleutels package, avm; total.sections {package, avm}, total.sections_delivered), quality {error_pct, latency_p50_ms, latency_p95_ms, upstream_errors}, generated_at
CSV-koptekstrequest_id;tijdstip;gebruiker;dossier_ref;adres;gewest;secties_gevraagd;secties_geleverd;aangerekend;reden_gratis;dedup_van;prijs_basis;prijs_parcel;prijs_avm;prijs_totaal;status_code; bestand taxon-verbruik-...request_id;timestamp;user_ref;case_ref;address;region;sections_requested;sections_delivered;charged;free_reason;dedup_of;price_package;price_avm;price_total;status_code;key_prefix (2.4.0; key_prefix 2.4.1, interne naam sleutel_prefix); bestand taxon-usage-<client>-<month>.csv

13.Contact

Technische en commerciële vrageninfo@taxon.be, met vermelding van de request_id van een concrete aanvraag
Gegevensbeschermingprivacy@taxon.be (verzoeken van betrokkenen binnen 5 werkdagen doorsturen)
BeschikbaarheidGET /health; gepland onderhoud wordt vooraf per e-mail aangekondigd
UitgeverTaxon, Schat mijn huis BV, Ieper (België), taxon.be