FAQ: Zabun Api

Guidelines

Algemeen

Waar vind ik de mapping van json naar scherm?

Mapping van velden

Welk endpoint moet ik gebruiken?

url
Nieuwe https://gateway-cmsapi.v2.zabun.be
Oude https://public.api-cms.zabun.be

In de nabije toekomst wordt de api op het oude platform offline gehaald. Als u nog niet bent overgeschakeld naar het nieuwe, gelieve dit dan in orde te brengen. Er zijn geen verschillen in de basis werking van de API tussen het nieuwe en het oude, behalve de URL

Waar vind ik dan de swagger?

url
Nieuwe https://gateway-cmsapi.v2.zabun.be/swagger/index.html
Oude https://public.api-cms.zabun.be/swagger/ui/index

Welke waardes heb ik nodig ?

Header name Waarde
api_key opvragen via support
client_id opvragen via support
server_id opvragen via support
X-CLIENT-ID De ID van je bedrijf, als je hoovert over je username in zabun rechtboven, kan je deze terug vinden.
X-USER-ID De ID van je user

Tip: Alles is case sensitve. Als een header met een hoofdletter is, moet je deze ook zo invullen. Anders kunnen er errors ontstaan.

Hoe kan ik de verbinding met de zabun api/server testen?

Vervang in onderstaande curl, de #...# waardes door die hierboven.

curl -X GET 'https://gateway-cmsapi.v2.zabun.be/auth/v1/heartbeat' \
--header 'Accept: text/plain' \
--header 'api_key: #api_key#'  \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id#'' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'X-USER-ID: #X-USER-ID#'

Dit is het antwoord dat je dient te krijgen

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
Request-Context: appId=cid-v1:863e6ef5-006b-4414-af65-e59561f372b2
Access-Control-Expose-Headers: Request-Context
X-Powered-By: ASP.NET
Date: Tue, 23 Jan 2024 06:55:23 GMT
Connection: close
Content-Length: 15

"V1 xx/xx/xxxx" 

Wat is curl, en wat moet ik ermee ?

Het curl commando is een veelgebruikte opdrachtregel-tool in Unix en Unix-achtige besturingssystemen voor het overbrengen van gegevens met URL-syntaxis. Het ondersteunt diverse protocollen zoals HTTP, HTTPS, FTP en SFTP, waardoor het breed inzetbaar is voor het downloaden of verzenden van bestanden van en naar servers. Daarnaast wordt curl vaak gebruikt in scripting en programmeren om API-aanvragen te doen en om met webdiensten te communiceren.

Hoe doe ik dan curl op windows?

  1. Installeer Visual Studio Code
  2. Voeg de REST Client extensie toe
  3. Maak een bestand aan met de extensie .crl
  4. Druk op F1 en kies voor commando: REST Client: Send Request
  5. Resultaat : Status code 200
HTTP/1.1 200 OK
Cache-Control: private
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Vary: Accept-Encoding
Date: Tue, 23 Jan 2024 06:50:26 GMT
Connection: close
Content-Length: 10967

Wat zijn HTTP statuscodes dan ?

HTTP-statuscodes zijn gestandaardiseerde nummers die door een webserver worden teruggegeven om de status van een verzoek aan te geven, zoals of het succesvol was, een fout bevatte, of verdere actie vereist. Ze zijn onderverdeeld in vijf categorieën, die elk een specifieke klasse van antwoorden vertegenwoordigen: informatief (1xx), succes (2xx), omleiding (3xx), cliëntfout (4xx) en serverfout (5xx). De vijf bekendste HTTP-statuscodes zijn:

Authenticatie

API Key

Via drie extra api key headers: client_id, server_id en api_key, kan men direct requests uitvoeren zonder de Oauth endpoints te gebruiken. API Key gegevens worden geactiveerd en uitgegeven door de support aan externe partners of webbouwers die een synchronisatie via de API willen opzetten.

--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_Key: #api_key#' \

Belangrijk: Met de API key headers kan je geen OAuth endpoints aanroepen. Bijgevolg, als je een OAuth Bearer token probeert in te vullen in de Authentication header, zal je altijd een 403 authentication failed krijgen. Deze authenticatie krijgt voorrang op de API Key authenticatie. U mag dus geen authentication header toevoegen.

Hoe sorteer, filter en doe ik aan paging?

basis opstelling voor alle search endpoints:

{
  "paging": {
    "page": 0,
    "size": 100
  },
  "filtering": {
    "full_text": "xxxx"
  },
  "sorting": {
    "sort": "MOST_RECENT",
    "order": "ASC"
  }
}

Paging:

Het page veld onder paging die bv. meegestuurd wordt in search start met index 0. als je dus 21 items met size 10 hebt dan zie je op:

Filtering:

Sorting:

Hoe specifieke of alle talen op halen?

Accept-Language is een header parameter

Panden

Hoe synchroniseer ik mijn panden?

Volgende endpoint wordt voorgesteld als u de panden wilt ophalen die geactiveerd worden in Zabun voor de api media .

curl --location 'https://gateway-cmsapi.v2.zabun.be/api/v1/property/media-sync/14' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_Key: #api_key#' \

De 14 in de URL staat voor media met ID "14", dat "Website via API" noemt in Zabun. De vertegenwoordiger zal deze media gebruiken om aan te duiden welke panden online mogen op de website die u zal connecteren met de API.

Via deze endpoint worden enkel panden opgehaald die zijn ingesteld als publiek (= groen huisje, status actief, niet verwijderd en niet in het archief) en geactiveerd voor de media binnen de opgegeven start en eventueel (geplande) einddatum

Deze endpoint zal ook automatisch panden deactiveren voor de media als de publicatie van het pand buiten de ingestelde datums valt, of het pand niet meer ingesteld is als publiek (= een rood huisje of status inactief, verwijderd of gearchiveerd)

Panden die u terug krijgt in de verkregen lijst, mogen online weergegeven worden. Panden die voorheen in de lijst voorkwamen, maar bij de laatste request niet meer, moeten offline gehaald worden.

U kan zelf nog filters toevoegen aan deze request, om bijvoorbeeld panden te verkrijgen met een bepaalde transactie type, pand type, stad ... zie hiervoor de swagger. De filters moeten worden toegevoegd aan de uri als query-parameters

Een alternatieve manier van panden ophalen

Als u echter alle panden wil ophalen of met uw eigen filters en zonder gebruik te maken van een media, dan kan de standaard search endpoint gebruikt worden.

curl --location --request POST 'https://https://gateway-cmsapi.v2.zabun.be/api/v1/property/search' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data-raw   ''

Hier vult u zelf de filters in, te vinden op de swagger, in de body van de request. Dit is een verschil met de GET endpoint hierboven sinds dat deze een POST is. Onthoud: hier kan u dus ook panden terug krijgen die eventueel niet online mogen weergegeven worden op de website, als u niet de correcte filters gebruikt. Daarom stellen we voor om de media-sync endpoint, hierboven, te gebruiken als u de vertegenwoordiger vanuit Zabun de controle wil geven over de beschikbare panden.

always_show_all_children: zal altijd alle kind objecten in de lijst stoppen ongeacht de filtering. deze kinderen tellen niet mee tot het aantal panden en ook niet tot de paging size limiet.

Indien u de sync request wil nabootsen met deze search endpoint, moet u ten minste volgende filters meegeven

public: true,
active_media_ids: [#media_id#], //Dit zal 14 zijn

Alle data van een pand ophalen

Bovenstaande endpoints halen een lijst van panden op met een beperkte collectie van data(=variabelen). Als u echter alle data van een pand wilt, moet u dit pand rechtstreeks opvragen

curl --location --request GET'https://gateway-cmsapi.v2.zabun.be/api/v1/property/#PAND ID#
' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data-raw   ''

Als je wil dat de geo informatie uitgebreid wordt terug gegeven kan dat op 2 manieren:

1. Via de parameter '?extended=true'

curl --location --request GET'https://gateway-cmsapi.v2.zabun.be/api/v1/property/#PAND ID#?extended=true
' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data-raw   ''

Speciale velden van een pand







2. De id van de gemeente opvragen via een ander endpoint

curl --location --request GET'https://gateway-cmsapi.v2.zabun.be/api/v1/geo/cities/#CITY ID#
' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data-raw   ''

Pand markeren als ONLINE

Wanneer u een pand synchroniseert en online brengt op uw website, is het interessant om dit door te geven aan de CMS Api. Deze gegevens worden gebruikt om aan de vertegenwoordiger te tonen dat het pand succesvol is gesynchroniseerd en online staat, waarbij een link naar het pand op de website wordt toegevoegd aan Zabun.

curl -X POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/property/#PAND_ID#/media/14/start-stop' \
--header 'Content-Type: application/json'  \
--header 'Accept: application/json' \ 
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
-d '{ "start_media": true}'

U kan ook aangeven wanneer een pand op uw website wordt bijgewerkt, of offline gehaald van de website, via deze endpoint. Deze drie JSON body's zijn mogelijke waarden die u kan gebruiken. U kan ze niet door elkaar gebruiken

{"start_media": true}  => "Het pand is aangemaakt op de website en online te bezichtigen
{"update_media": true}  => "Het pand is bijgewerkt 
{"stop_media": true}  => "Het pand is offline gehaald en niet meer te vinden op de website

Media categorie beheren en toewijzen aan panden voor op uw website

In Zabun is het mogelijk om een categorie te kiezen bij het activeren van een pand voor de geselecteerde media. Om een categorie beschikbaar te maken voor de panden voor uw media, moet u deze aanmaken via de API voordat ze geselecteerd kunnen worden op Zabun. Hieronder staan de verschillende stappen beschreven.

  1. Ophalen van beschikbare categorieën Dit kan via endpoint GET /api/v1/media/14/categories.
curl --location --request GET 'https://gateway-cmsapi.v2.zabun.be/api/v1/media/14/categories' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header 'Content-Type: application/json'
  1. Aanmaken van categorieën Dit kan via endpoint 'POST /api/v1/media/14/categories'. Enkel de 'name' is verplicht. U krijgt een object terug met daarin id. Dit is de 'category_id'. Deze variabele wordt gebruikt om de categorie te koppelen aan het pand.
curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/media/14/categories' \
--header 'Content-Type: application/json'  \
--header 'Accept: application/json' \ 
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data '{
    "name": {
        "NL": "Mijn nieuwe categorie",
        "FR": "Ma nouvelle catégorie"
    }
}'

Voorbeeld antwoord

{
    "name": {
        "nl": "Mijn nieuwe categorie",
        "fr": "Ma nouvelle catégorie"
    },
    "id": 2,
    "media_id": 14,
    "bedrijf_id": ####
}
  1. Verwijderen van categorieën Dit kan via endpoint DELETE /api/v1/media/14/categories/{category_id}. Category_id vindt u in de antwoorden van de GET list of POST new in variabele "ID". Gelieve op te passen met het verwijderen van categorieën. Dit heeft een direct resultaat en invloed op de panden in uw media syncs
curl --location --request DELETE 'https://gateway-cmsapi.v2.zabun.be/api/v1/media/14/categories/2' \
--header 'Content-Type: application/json'  \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \

U krijgt een 200 OK met body "true" als antwoord indien het verwijderen is gelukt

  1. Een categorie aan een pand toewijzen Dit kan via Zabun als er categorieën bestaan voor de media

  1. Verkrijgen van de categorie voor een pand in de API De variabele active_category_id, een lijst van intger ids = de category ids, wordt gegeven in de response van endpoint POST /api/v1/property/media-sync/14 = "media sync", indien er minstens 1 categorie geselecteerd is. Je kan de variabele voor de panden ook terug vinden in endpoint GET /api/v1/media/{media_id}/properties

Hoe haal ik foto's bij panden op?

Dit kan via endpoint http://api-cms.zabun.be/api/v1/property/{ID}/photos je krijgt een url die je kan ofwel linken of downloaden. Standaard zitten foto's ook bij de GET Property endpoint

[
  {
    "property_id": 3708136,
    "type_id": 0,
    "url": "https://files.zabun.be/upload/2791/images/3746002791000001817.jpg",
    "autoid": "3746002791000000977",
    "file_autoid": "3746002791000001817",
    "url_thumbnail": "https://files.zabun.be/upload/2791/images/3746002791000001817_tn.jpg",
    "reference": "3746001033000012505.jpg",
    "file_size": 508010,
    "index": 1,
    "creation": "2024-04-08T13:21:12+02:00",
    "creation_person_id": 18454,
    "changed": "2024-04-08T13:21:12+02:00",
    "changed_person_id": 18454,
    "company_id": 2791,
    "comment": {}
  }
]

Hoe pas ik de foto en bestand filtering op type toe die ingesteld is in de admin van mijn Zabun?

####Wat zijn de filters? Bij het syncen van foto's en bestanden is het mogelijk om een filter toe te passen op hun type. De volgende drie regels worden vaak toegepast.

####Hoe pas ik de filters toe op mijn website?

  1. Automatisch Via de GET property endpoint geeft u de media_id mee als query_parameter. Hierbij worden de filters, die hierboven zijn beschreven, automatisch toegepast op de foto en bestand lijsten die u meekrijgt in de pand data. Indien u geen media_id meegeeft, dan wordt er geen filter toegepast en krijgt u alle foto's en bestanden terug, ongeacht hun type (dus ook zonder type). De aparte endpoints om foto's en bestanden op te halen van een pand, worden nooit automatisch gefilterd. Bijvoorbeeld: /api/v1/property/?media_id=14.

  2. Manueel

Wat zijn documenten en waarom wil ik ze niet op mijn website?

Documenten zijn realtime gegenereerde bestanden op basis van een vooringestelde template. Deze bestanden kunnen affiches zijn met pand data, maar kunnen ook statistieken van contacten en hun gegevens zijn, zoals maand rapporten. Documenten zijn dus vooral voor intern gebruik bedoeld, en worden best niet zomaar op de website aangeboden. Het is uiteraard mogelijk om een document te genereren in Zabun, en deze op te laden naar de bestanden van een pand, om ze dan via /files op te halen.

Als er toch documenten (en de generatie ervan) willen getoond worden op de website, dan zal u voor permissie moeten vragen aan Zabun. Deze zijn namelijk niet standaard inbegrepen in het webbouwer profiel.

Hoe werken indelingen in de API

Om de beschikbare indelingen te verkrijgen, kan men de endpoint '/property/layouts' oproepen. Deze data bevindt zich ook in '/property/options_items' onder "layouts".

Het resultaat is een lijst van IDs met benamingen en andere data over de indelingen die het bedrijf heeft. Hieronder zitten standaard indelingen, zoals slaapkamer: ID = 1 en badkamer: ID = 5, en ook custom indelingen met hun eigen ID.





Foto toont een voorbeeld van woonkamer, met ID = 7

Deze IDs moeten gekoppeld worden met de layout_id die men vindt in de pand data onder "layouts". Pand data via endpoint /property/



In deze foto gaat het dus over een woonkamer, doordat layout_id gelijk is aan 7 Andere data die men vindt over een indeling van een pand is opp., verdiep, aantal, sortering en commentaar in alle actieve talen als ze iets ingevuld hebben.

Om het aantal indelingen te tellen, moet men de volgende som doen: Tel alle "counts" op van de items in de indeling lijst die voor een layout_id voorkomen. Het is namelijk mogelijk dat een bepaalde layout meerdere keren voorkomt in de layouts lijst, sinds men in Zabun dezelfde indelingen kan opslitsen in meerdere regels, om zo een onderscheid te maken tussen elkaar.

Een voorbeeld: Men maakt een regel voor slaapkamer aan met als commentaar "gelijksvloer" en vult het aantal "2" in. Men maakt nog een regel voor slaapkamer aan met als commentaar "bovenverdiep" en vult het aantal "3" in. Het resultaat is een "layouts" lijst met 2 items. Beide items hebben "layout_id" = 1, waarvan de ene count = 2 en de andere count = 3 heeft. In totaal zijn er 5 slaapkamers in het pand.

Hoe maak ik een nieuw pand?

curl --location "https://gateway-cmsapi.v2.zabun.be/api/v1/property" \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header "Content-Type: application/json" \
--data "{
    \"office_autoid\": 0,
    \"transaction_id\": 1,
    \"type_id\": 26,
    \"status_id\": 1,
    \"show\": 1,
    \"mandate_type_id\": 1,
    \"mandate_start\": \"2024-05-03T09:39:48.423Z\",
    \"price\": 250000,
    \"responsible_salesrep_person_id\": #X-USER-ID#,
    \"address\": {
        \"city_geo_id\": 1001082,
        \"number\": \"180\",
        \"country_geo_id\": 23,
        \"street_translated\": {
            \"nl\":\"vijfseweg\"
        }
    }
}"

Hoe kan ik weten hoe lang een pand een bepaalde transactie(te koop, te huur, ...) heeft?

Onder endpoint http://api-cms.zabun.be/api/v1/property/{ID} heb je een veld history_transaction.

hier kan je zien wanneer een pand naar deze transactie is veranderd. de onderste in de lijst is de laatste aangepaste transactie en op datum kan je zien hoelang het pand al deze transactie heeft.

Accounts

Hoe zoek ik mijn accounts op?

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/account/search' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data-raw   ''

Contacten

Hoe zoek ik mijn contacten op?

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/contact/search' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data-raw   ''

Hoe maak ik een nieuw contact

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/contact' \
--header 'Content-Type: application/json' \ 
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--d '{"last_name": "CROUGHS",
"title_id": 1,
"status_id": 1,
"responsible_salesrep_person_id": 18911 }'

Hoe maak ik een contact die ook kandidaat is bij een pand

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/contactmessage' \
--header 'Content-Type: application/json' \ 
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--d '{
    "contact": {
        "email": "[email protected]",
        "first_name": "Ben",
        "last_name": "Croughs",
        "marketing_opt_in": false, 
        "mailing_opt_in": false,
        "phone": "496999632",
        "phone_cc": "32",
        "language": "NL",
        "question": "Kopen" 
    },
    "message": {
        "text": "Kopen",
        "property_id": 3309172,
        "info": [
            "info1",
            "info2",
            "info3"
        ]
    }
}'

deze endpoint zal ook een standaard zoekfiche maken aan de hand van het pand.

Om de vraag of het bericht toe te voegen aan de taak (=het contactformulier), gebruikt u variabele message.text. contact.question heeft dezelfde functionaliteit als message.text en wordt momenteel gebruikt als back-up indien message.text leeg is. contact.question kan echter in de toekomst verdwijnen, dus opteer om message.text.

message.info kan gebruikt worden om extra informatie of vragen toe te voegen. Dit is handig voor als uw keuze opties (=checkboxes) toevoegt aan uw contactformulier. Deze worden na de vraag in de taak gezet in volgende formaat: Vraag + "Vraagt info over:" + elke item in message.info, gesplitst met een ','

Voorbeeld: contact.question = "Dit veld is onnodig", message.text = "Ik wil graag een huis kopen", message.info: ["Ik wil A weten", "Ik wil B zien"] Resultaat beschrijving taak (contactformulier) = Ik wil graag een huis kopen. Vraagt info over: Ik wil A weten, Ik wil B zien

Hoe maak ik een nieuw contact + bijhorende zoekfiche

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/contactrequest' \
--header 'Content-Type: application/json' \ 
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--d '{
    "contact": {
        "last_name": "CROUGHS1",
        "title": 1,
    },
    "request": {
        "price": {
            "min" : 250000,
            "max" : 750000
        },
        "sales_rep": 18911,
   } 
}'

Taken

Bij het updaten van de vertegenwoordiger van een taak moet u opletten voor de nieuwe task_autoid. Er wordt namelijk een nieuwe taak met een nieuwe task_autoid gegenereerd, waarbij de oude taak met de meegegeven task_autoid in de patch URL verwijderd wordt. Dit is uitzonderlijke logica die enkel bij taken en voor veld responsible_salesrep_person_id uitgevoerd wordt. Andere velden patchen verandert de task_autoid niet.

Zoekfiches

Hoe zoek ik mijn zoekfiches ?

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/request/search' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--data-raw   ''

Hoe kan ik een gemeente toevoegen aan een zoekfiche verzoek ?

om een zoekfiche aan te maken, kan je een lijst van cityids meegeven, als je een postcode hebt, dan zal je deze moeten vertalen naar cityids, dat kan je door eerst onderstaande request te doen, country_geo_ids = id van België, vast = 23, en dan kan je in zipcode een lijst van postcode zetten

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be//api/v1/geo/cities/search' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'Client_ID: #client_id#' \
--header 'Server_ID: #server_id# \
--header 'API_Key: #api_key#' \
--header 'Content-Type: application/json' \
--data-raw   '{ filtering: {
      "zip_codes": [ 3800, 3840 ],
        "country_geo_ids": [23],
            },
            "paging": {
                "page": 0,
                "size": 10
            },
            "sorting": {
                "order": "ASC"
            },
            }'

en dan via onderstaande call kan je de fiche zelf aanmaken

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/contactrequest' \
--header 'Content-Type: application/json' \ 
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--d '{
    "contact": {
        "last_name": "CROUGHS1",
        "title": 1,
    },
    "request": {
        "price": {
            "min" : 250000,
            "max" : 750000
        },
        "sales_rep": 18911,
        "cities": [
           #city-ids#
         ],

   } 
}'

dan heb je een lijst van gemeenten en deelgemeenten, die moet je dan doorgeven aan de contactrequest api functie

Het verschil tussen hoofdtypes en types

Zoekfiches werken op basis van pand types. Als een hoofdtype wordt aangeduid in Zabun, dan worden alle types onder die hoofdtypes opgeslagen in het zoekfiche. Dezelfde logica wordt toegepast op het aanmaken van een zoekfiche via de API.

Bij het aanmaken van een zoekfiche kan je een lijst van pand hoofdtypes "headtypes" en/of pand types "types" doorgeven. Indien je een hoofdtype id invult in de headtypes lijst, dan worden automatisch alle types van die hoofdtype toegevoegd aan de zoekfiche. Als je een type id invult in de types lijst, dan wordt enkel die ene type toegevoegd aan de zoekfiche. Terwijl wordt ook de hoofdtype zichtbaar in de zoekfiche in Zabun, omdat je een type onder deze hoofdtype hebt gekozen. De hoofdtype zelf wordt niet opgeslagen in de zoekfiche.

Dit betekent dat, als je maar 1 of meerdere types van een hoofdtype wilt toevoegen aan een zoekfiche, maar ze niet allemaal, dat je dan al de nodige type_ids moet toevoegen aan "types", zonder de headtype_id toe te voegen aan "headtypes". Je laat dan "headtypes" leeg.

Je kan uiteraard mengelen door bijvoorbeeld de headtype_id van Huis toe te voegen aan de headtypes lijst voor alle huis types toe tevoegen, en dan een specifieke grond type_id in te vullen in de "types" lijst, zodat enkel die ene grond type wordt toegevoegd aan de zoekfiches i.p.v. ze allemaal.

curl --location --request POST 'https://gateway-cmsapi.v2.zabun.be/api/v1/contactrequest' \
--header 'Content-Type: application/json' \ 
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--d '{
    "contact": {
        "last_name": "CROUGHS1",
        "title": 1,
    },
    "request": {
        "price": {
            "min" : 250000,
            "max" : 750000
        },
        "sales_rep": 18911,
        "cities": [
           #city-ids#
         ],
        "headtypes": [3], //House = alle types onder hoofdtype Huis
        "types": [19] //Landbouwgrond. Hoofdtype grond zal zichtbaar zijn in de zoekfiche, met enkel landbouwgrond aangevinkt
   } 
}'

Keuzelijsten

Alle keuzelijsten hebben hun eigen endpoints, maar je kan ook alle keuzelijsten voor een sectie ophalen via de /option_items endpoint

Voorbeeld:

Met deze endpoint kan u het aantal requests naar de API verminderen.

Extra Velden

Het ophalen en invullen van extra velden op pand, contact of account niveau kan op verschillende manieren. Hieronder een stappenplan met een contact dropdown extra veld als voorbeeld

Stap 1: Ophalen van extra velden

De /extra_fields endpoints halen de mogelijke extra velden op voor hun respectievelijke object: /property/extra_fields, /contact/extra_fields, /account/extra_fields of /extra_fields voor ze allemaal.

curl --location 'https://gateway-cmsapi.v2.zabun.be/api/v1/contact/extra_fields' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header 'Content-Type: application/json'



Stap 1 bis: Ophalen van dropdown opties.

Er zijn drie mogelijkheden om de optie lijst op te halen van een extra veld met type "DROPDOWNLIST"

  1. Je kan de /extra_field endpoint extenden om de lijst als extra data binnen te krijgen. Dit zorgt ervoor dat de request mogelijks wat langer duurt
curl --location 'https://gateway-cmsapi.v2.zabun.be/api/v1/contact/extra_fields?extended=true' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header 'Content-Type: application/json'



haalt dan alle extra velden op met hun dropdown opties.

  1. Via volgende endpoint kan je de dropdown opties apart ophalen per extra veld
curl --location 'https://gateway-cmsapi.v2.zabun.be/api/v1/extra_fields/3523002791000000004/dropdowns \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header 'Content-Type: application/json'



  1. Je kan ook via alle dropdown opties ophalen voor alle extra velden. Het resultaat is dezelfde als hierboven. Je moet zelf de dropdown opties groeperen op basis van de extra_field variabele.

Stap 3. Ophalen van de extra veld waardes die ingevuld zijn bij het object

Dit kan via de /extra_field_values endpoints bij de respectievelijke controllers

curl --location 'https://gateway-cmsapi.v2.zabun.be/api/v1/contact/3709002791000000010/extra_field_values 'Het grote nummer is hier een contact_autoid
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header 'Content-Type: application/json'



Voor de waarde op te halen, gebruik je ofwel de respectievelijke "value_xxxx", of kan je de generieke value variabele gebruiken. In het voorbeeld is de type "DROPDOWNLIST" en kan je value_ddl gebruiken, maar ook value die dezelfde waarde heeft

Hieronder een lijst van de koppeling tussen type en waarde

Stap 4. Invullen of aanpassen van een extra veld waarde

  1. Dit kan via de PUT .../extra_field_values endpoints bij de respectievelijke controllers. De belangrijke velden in de body zijn extra_field_autoid en value_xxxx.
curl --location --request PUT 'https://gateway-cmsapi.v2.zabun.be/api/v1/contact/3709002791000000010/extra_field_value' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header 'Content-Type: application/json'
--data '{
    "extra_field_autoid": 3523002791000000004,
    "value_ddl": 5
}'

U hoeft geen object_key_autoid in te vullen. Indien u dit toch wilt doen, moet u zorgen dat deze gelijk is aan de ID die u gebruikt in de URL van de endpoint. In het voorbeeld moet object_key_autoid = 3709002791000000010

Op dit moment kan je de generieke value + type variabele niet gebruiken om de waarde in te vullen, je moet de specifieke gebruiken. Volgende waarden werken maar zijn nog niet uitvoerig getest. Indien u een van deze wilt gebruiken, neem contact op met de support zodat uw gevraagde waarde kan afgecheckt worden, of gebruik het op eigen risico.

  1. Je kan ook via de extra_field controller een waarde invullen voor een extra veld van eender welk object Bij deze endpoint moet u wel de object_key_autoid variabele invullen met de id van het pand, de contact of het account. De validatie controleert of deze bestaat
curl --location --request PUT 'https://gateway-cmsapi.v2.zabun.be/api/v1/extra_field/extra_field_value' \
--header 'X-CLIENT-ID: #X-CLIENT-ID#' \
--header 'client_id: #client_id#' \
--header 'server_id: #server_id# \
--header 'api_key: #api_key#' \
--header 'Content-Type: application/json'
--data '{
    "extra_field_autoid": 3523002791000000004,
    "object_key_autoid": 3709002791000000010,
    "value_ddl": 5
}'

Korte vragen met bondige antwoorden

Q: Ik krijg een validatie error met als melding "Error converting value xxxx to type 'System.Int64[]'.

A: U stuurt een waarde, zoals een id, als apart door terwijl de variabele/filter een lijst verwacht. Zet het ID tussen []. Bijvoorbeeld office_autoids => "office_autoids:" [xxxxxxxxxx] (foutief: "office_autoids:" xxxxxxxxx)

Q: Grondoppervlakte, bewoonbare oppervlakte, kadastraal inkomen

A: op te vragen via url:

Q: Bouwtechnische informatie

Te vinden onder de tab technisch in Zabun. Waar via de API?

A: op te vragen via url: https://gateway-cmsapi.v2.zabun.be/api/v1/property/xxxxxx

Technicals, technical_dropdowns en evaluation lijsten zijn ook terug te vinden onder

Q: WETTELIJKE INFO

EPC Label Alle gewenste EPC info kan ik vinden via de API, behalve de label. Op Zabun zie ik wel een label staan.

A: op te vragen via url: https://gateway-cmsapi.v2.zabun.be/api/v1/property/xxxxxx Indien de vertegenwoordiger manueel een label heeft gekozen voor het pand, dan bevat variabele custom_epc_label deze label als pure tekst. (Bijvoorbeeld A, A+, A plus, D, E, ...)

Indien bovenstaande veld leeg is, dan werd de label berekend. U zal zelf een label moeten berekenen voor uw website op basis van de waarde die te vinden is in variabele epc_value

Q: Via de API krijg ik EPC Certificate 1 terug, hoe weet ik welke waarde voor welke Label staat of staat dit er los van?

A: dit veld is gemapped met dit veld

De referentie van het epc document is te vinden in volgende variabele

Q: Wat is het verschil tussen de gewone EPC velden en de _Shared velden? Waarom bestaat er een epb_reference maar geen epb_value of custom_epb_label?

A: De gewone epc en epb zijn voor volledige huizen of uw eigen appartement, de _shared versies zijn voor het gehele gebouw bij een appartement of andere properties waar er gedeelde layout is.

Alle epc velden worden gebruikt voor de epb waarden, behalve de referentie. Dit komt omdat deze andere regels heeft qua formaat die niet samen kan geprogrammeerd worden met het epc referentie veld. De aparte regels voor de waarde en de label van de epb is wel geprogrammeerd in de epc velden.

Q: Waardes van overstromingsgevoeligheid

A:



de tekst kan je opvragen via url: https://gateway-cmsapi.v2.zabun.be/api/v1/property/flooding_sensitivities

in dit geval betekend 3 niet overstromingsgevoelig.





de tekst kan je opvragen via url: https://gateway-cmsapi.v2.zabun.be/api/v1/property/flooding_zones

in dit geval betekend 3 niet van toepassing.

Q: Omgevingsvergunning voor stedenbouwkundige handelingen

Zou dit hetzelfde zijn als Dagvaarding voor stedenbouwkundige overtreding? Hoe kan ik hier dan via de API juist aan?

A:

is gemapped met

om te weten wat de id betekend kan je dit opvragen via url: https://gateway-cmsapi.v2.zabun.be/api/v1/property/town_planning_violations

in dit geval betekend 0 Geen rechterlijke herstelmaatregel of bestuurlijke maatregel opgelegd.

Q: Verkooprecht, Handhaving

Kan dit precies ook niet in Zabun terugvinden. Onder wat kan ik dit moest dit toch ergens staan, terugvinden via de API?

A:

deze is gemaped met



deze is gemaped met

om te weten wat deze id betekend kan je dit opvragen via de url: https://gateway-cmsapi.v2.zabun.be/api/v1/property/building_licenses

in dit geval betekend 1 bouw vergund

Q: Omgevingsvergunning voor het verkavelen van gronden

Zou dit dan gaan om verkavelingsvergunning? Hoe kan ik hier dan aan via de API?"

A:

is gemapped met

Q: Waar vind ik mijn vertegenwoordigers, en heb ik rechten tot accounts nodig ?

A Omtrent accounts/gebruikers: ze moeten /api/v1/person gebruiken voor de vertegenwoordigers. Rechten tot accounts is dus niet nodig

Q: Wat zijn de mogelijk waardes van overstromingsgevoeligheid ?

A op pand niveau bestaat flooding_building_score (g score) en flooding_parcel_score (p score). Deze geven de effectieve waarde terug, A, B, C, D of 0 voor onbekend .

Q: Waar vind ik verkoopsrecht, verkavelingsvergunning, gerechterlijke of bestuurlijk maatregel

A Voorkooprecht presale_right_ynu (string, optional): Recht van voorkoop = ['YES', 'NO', 'UNKNOWN']

Verkavelingsvergunning allocation_license_ynu (string, optional): Verkavelingsvergunning = ['YES', 'NO', 'UNKNOWN']

Tip: Alle _ynu velden zijn variabelen met als waarde "Ja", "Nee", of "Onbekend", in het engels

Gerechtelijke en bestuurlijke maatregel ik neem aan dat hiermee "Dagvaarding voor stedenbouwkundige overtreding" wordt bedoelt town_planning_violation_id (integer, optional)

Deze bevat slechts de ID, de mapping kan opgehaald worden onder /api/v1/property/town_planning_violations

Q: Ik heb bv. 15 records in zabun maar zie er maar bv. 5 in api response?

kijk of je page parameter start met index 0. Zie 'Hoe sorteer, filter en doe ik aan paging?'

Q: Indien een pand wordt toegevoegd aan een project, wordt de gewijzigd datum van het project aangepast?

A: Ja

Q: Wat is het nut van de sales_rep variabele (=vertegenwoordiger/makelaar) in een zoekfiche en wat gebeurt er als deze niet is ingevuld bij de request?

A: De sales_rep bij zoekfiche is handig voor als je een specifeke vertegenwoordiger hebt die binnenkomende zoekfiches behandeld, of als men met regios werkt. Het is niet verplicht, maar betekent wel dat de zoekfiche in Zabun terecht komt zonder vertegenwoordiger. Die kan uiteraard in Zabun of via de API alsnog ingevuld worden via een update.

Q: Welke zaken moeten wij extra in orde brengen na het live brengen van onze integratie van de Api?

A: U hoeft verder niets door te geven om uw implementatie te voltooien. Wij hebben geen extra configuratie nodig. U kan wel het URL formaat van de pand pagina op uw website doorgeven voor de functionaliteit van het oogje in de media grid bij een pand op Zabun. Zorg hier wel voor een url formaat die gebruik maakt van de Zabun Property Ids. Dit is echter niet nodig, sinds u bij het doorgeven van de publicatie status van het pand ook de URL kan doorgeven, volledig in uw eigen formaat.

Q: Moeten bestanden en foto's (=Media) gedownload worden en mogen de directe URL gebruikt worden.

A: De directe URLs mogen gebruikt worden. Voor foto's hebben wij ook een cache. Hou er rekening mee dat als een foto/bestand niet meer online staat, dit ook direct zichtbaar is op uw website

Q: Mogen panden 'on the fly' opgevraagd worden? Of is het de bedoeling dat alle data opgehaald wordt in een eigen databank?

A: Panden kunnen 'on the fly' opgehaald worden maar we raden dit ten strengste af door volgende redenen

  1. De API is ingesteld met een rate-limit, waardoor u maar een beperkt aantal requesten kan uitsturen per minuut. Indien uw veel verkeer ontvangt op uw website, kan dit betekenen dat u dit limit bereikt en tijdelijk geen requests meer mag uitsturen.
  2. Indien er een fout ontstaat op onze API of deze is gaat offline, bijvoorbeeld door een update of interne problemen, dan hebt u tijdelijk geen data meer en zullen de panden niet meer zichtbaar zijn op uw website
  3. De snelheid van uw website wordt bepaald door de snelheid van de requests naar de API. Indien er netwerk problemen zijn of onze API heeft vertraging tijdens piekmomenten, zal dit direct zichtbaar zijn op uw website. U voorziet ofwel een database of ten minste een cache die de panden data bijhoudt. Beide de "Property Search" en de "Property Media Sync" accepteren een "updated_since" filter om de laatste gewijzigde panden op te halen

Q: Hoe haal ik enkel projecten op? Hoe haal ik enkel "nieuwbouw" panden op?

Om enkel projecten op te halen, kan je op twee manieren werken.

  1. Je kan aan de "Property Search" de filteren "kind": "true" meegeven om enkel projecten binnen te halen.
  2. Je kan zelf in de lijst van panden filteren op variabele is_project = true

Om nieuwbouw panden op te halen, m.a.w. panden met eigenschap "nieuwbouw", moet je zelf in de panden lijst filteren op variabele development = true.

Nieuwbouw panden kunnen beide gewone panden en projecten zijn. Als u enkel nieuwbouw projecten wil, m.a.w. een pand van type "project" met eigenschap "nieuwbouw", dan doet u een combinatie van bovenstaande opties

  1. "Propert Search" met de project filter + zelf filteren op development = true
  2. Zelf filteren op is_project = true en development = true