Webservice Dokumentation

Vorbereitung

Damit Sie den Web-Service nutzen können muss zunächst ein Suchprofil eingerichtet werden. Beim Speichern des Suchprofils muss darauf geachtet werden, dass dieses mit der Option "Web-Service" angelegt wird:

image

Die ID des Suchprofils kann seiner URL entnommen werden, z.B

https://login.xplorer.ch/projects/21425/0

Wichtig:
  • Nach der Einrichtung des Suchprofils kann dieses per Webservice erst ab dem nächsten Tag abgerufen werden!
  • Neue Ergebnisse können nur an den beim Speichern des Suchprofils aktivierten Tagen abgerufen werden!

Umgebungen

Produkt Webservice-URL
Baublatt Xplorer https://api.login.xplorer.ch

Login

Um sich mit dem Web-Service zu verbinden, muss zunächst ein Login erfolgen. Dieser kann unter dem Endpunkt POST /login_check erreicht werden. Hier wird eine Anfrage mithilfe des Benutzernamens und Passwortes des zur Verfügung gestellten Benutzers gestellt.

Beispiel Login Abfrage:
Beispiel Login Ergebnis:

Ein erfolgreicher Login liefert einen JWT-Token und einen entsprechenden Refresh-Token. Ersteres wird für jeden weiteren Kontakt mit der Schnittstelle benötigt. Letzteres wird benötigt, um sich nach Ablauf des Tokens einen neuen Token ausstellen zu lassen.

Wichtig:

Wenn Sie einen normalen Benutzer haben, welcher sich nicht mehrfach gleichzeitig einloggen kann, bekommen Sie auch einen Security-Cookie. Diesen müssen Sie ebenfalls bei jedem Aufruf mit sich führen.

Hinweis zur Session-Verwaltung: Beim Testen der Schnittstelle ist zu beachten, dass pro Benutzerkonto nur eine aktive Session erlaubt ist. Wenn Sie sich über die Schnittstelle mit Benutzername und Passwort einloggen, wird eine bestehende Browser-Session automatisch beendet. Das gleiche gilt umgekehrt: Sobald Sie sich erneut im Browser anmelden, wird die bestehende API-Session beendet. Dies sollte insbesondere bei Entwicklungs- und Testarbeiten berücksichtigt werden.

Beispiel

Der JWT ist standardmässig eine Stunde lang gültig. Benötigt man eine längere Session, kann man den Token mithilfe des Refresh-Tokens unter POST /token/refresh wie folgt erneuern:

Beispiel Refresh Abfrage:

Das Ergebnis dieser Abfrage ist identisch mit der Login-Abfrage. Der Refresh-Token ist 8 Stunden lang gültig und wird ebenfalls erneuert bei jedem Aufruf.

Abholen der Daten

Es gibt zwei mögliche Endpunkte entsprechend der im Xplorer verfügbaren Produkte.

SearchProfile-IDs sind strikt an den jeweiligen Endpunkt (Objekttyp) gebunden und können nicht zwischen verschiedenen Endpunkten wiederverwendet werden. Wird ein SearchProfile mit einem nicht passenden Endpunkt verwendet, führt dies zu einem „SearchProfile with given id not found"-Fehler, auch wenn die ID grundsätzlich existiert.

Endpunkt-Name Objekte
all_pn_headers Ausschreibungen / Tenders
projects Projekte

Hinweis: Welche Objekte bei Ihnen verfügbar sind, hängt von Ihrem Baublatt- Rahmenvertrag ab.

Das Abholen der Daten findet über einen der o.g. Endpunkte per GET statt, z.B. /web_service/all_pn_headers/. Hierzu wird der bereits erhaltene JWT-Token und die ID von dem zuvor angelegten Suchprofil benötigt. Der Token wird mittels Authorization-Header mitgegeben. Die Suchprofil-ID mithilfe eines GET-Parameters wie folgt:

Beispiel Daten Abholen:

Diese Abfrage liefert nun, sofern vorhanden, die neuen Daten Ihres Suchprofils. Das Format der Daten kann mittels des Accept-Headers entschieden werden. Die folgenden Optionen stehen standardmässig zur Verfügung:

  • Accept: application/xml
  • Accept: application/json
  • Accept: application/ld+json
Empfehlung:

Für neue Integrationen empfehlen wir die Nutzung des Formats application/json, da dieses Format in den meisten Programmiersprachen und Integrationsplattformen standardmässig unterstützt wird.

Bestätigung der Abholung

Der Web-Service liefert Ihnen die Daten Ihres Suchprofils und merkt sich dabei, was Sie bereits abgeholt haben. Standardmässig bekommen Sie 10 bzw. 20 Datensätze (Projekte bzw. Tenders) pro Aufruf der oben genannten Endpunkte. Damit eventuelle Fehler behandelt werden können, müssen Sie das Abholen jedoch bestätigen um an die nächsten 20 Datensätze zu kommen. Hierzu bieten wir Ihnen zwei Wege:

Bestätigung per Header

Wenn Sie keinen weiteren Endpunkt aufrufen wollen, können Sie direkt beim Abholen der Daten bestätigten, dass Sie die Daten erhalten haben. So bekommen Sie bei jedem Aufruf des o.g. Endpunktes neue Daten. Dies geschieht mithilfe des Headers X-AUTO-ACK. Dazu das passende Beispiel:

Beispiel Abholen Mit Auto-Ack:
Bestätigung per Endpunkt

Der sicherste Weg keine Daten zu verlieren ist es, uns nach dem Abholen separat mitzuteilen, dass Sie die Daten sauber bekommen haben. Dies geschieht mithilfe des Endpunktes POST /web_service/acknowledge/. Hierzu wird ein JSON-Objekt erwartet, welches sowohl die Suchprofil-ID von Ihnen enthält als auch die IDs der Datensätze, welche Sie uns Bestätigen wollen. Hierzu ein Beispiel:

Beispiel Ack-Endpunkt:

Datenstruktur für Projekte

Wenn Sie den Endpunkt /web_service/projects/ abrufen, erhalten Sie die Projekte in der unten beschriebenen Datenstruktur.

Anmerkung: Immer wenn Sie ein Datenfeld "Code" in der Datenstruktur sehen, können Sie eine entsprechende Liste mit allen verfügbaren Codes zusammen mit den dazugehörigen Namen als CSV über das Download-Symbol herunterladen.

Hier ist die vollständige Datenstruktur:

Field Type Description Example
externalID string Externe ID 3197834
id int Eindeutige ID 312885
title string Titel Neubau Reservoir mit Leitungsersatz
subtitle Nicht für CH verwendet
postcode int Postleitzahl 4001
country string Land CHE
town string Ort Basel
area string Gebietsbezeichnung Zwischen der Bahnhofstrasse und der Strasse «Im Sack»
street string Strassenname und Hausnummer Reservoir Häuslersegg
projectValue double Bausumme in Währungseinheiten 1340000
valueDescription string Bausummen Text 1.34 Mio CHF
startDate datetime Baustart 2023-05-21T22:00:00+00:00
startDateAccuracy Nicht für CH verwendet
startDescription string Text zum Baustart Mai 2023
endDate datetime Bauende 2024-06-29T22:00:00+00:00
endDescription string Text zum Bauende Juni 2024
lastPublished datetime Letzte Veröffentlichung 2023-05-23T09:13:44+00:00
lastUpdate datetime Letzte Aktualisierung 2023-05-23T09:13:44+00:00
projectTexts
Field Type Description Example
content string Text Inhalt Bewerbung erst nach Veröffentlichung der Ausschreibung möglich
projectTextType
Field Type Description Example
code string Code 500
name string Name Gewerkebemerkung
sortOrder int Sortierung 1
projectDetails
Field Type Description Example
id int Eindeutige ID 32502749
value string Wert 15
negated boolean Typ negiert: Ja/Nein 0
unitType Nicht für CH verwendet
projectDetailType
Field Type Description Example
id int Eindeutige ID 763
code string Code CH_STRUCTURES
name string Name Fenster
sortOrder int Sortierung 1
visible boolean Typ sichtbar: Ja/Nein 0
parentProjectDetailType
Field Type Description Example
id int Eindeutige ID 5
code string Code Bestandteil
name string Name Bestandteile
sortOrder int Sortierung 1
visible boolean Typ sichtbar: Ja/Nein 0
projectDisplayGroup
Field Type Description Example
id int Eindeutige ID 3
code string Code COST_SIZE
filterable boolean Typ filterbar: Ja/Nein 1
investmentType Nicht für CH verwendet
qualityType Nicht für CH verwendet
labelProjects Nicht für CH verwendet
projectType
Field Type Description Example
id int Eindeutige ID 33
code string Code 11
name string Name Technische Anlagen
sortOrder int Sortierung 50
projectResearchType
Field Type Description Example
id int Eindeutige ID 8
code string Code 1
infoText string Recherchetyp Achtung: Dieses Projekt wird aufgrund des schnellen Baufortschritts nicht aktualisiert.
sortOrder int Sortierung 0
purpose
Field Type Description Example
id int Eindeutige ID 14
code string Code CH_OWN_USE
name string Name Eigenbedarf
planningStage
Field Type Description Example
id int Eindeutige ID 19
code string Code CH_PASSED_IN
name string Name Baugesuch eingereicht
sortOrder int Sortierung 4
contractType
Field Type Description Example
code string Code PUBLIC
name string Name public
projectAttributes
Field Type Description Example
id int Eindeutige ID 7911848
value string Wert Gst. 1243, 2200, 848
projectAttributeType
Field Type Description Example
id int Eindeutige ID 120
code string Code 1
name string Name Einsprache
valueType string Datentyp String
showIfEmpty boolean Typ leer anzeigen: Ja/Nein 0
sortOrder string Sortierung 1
projectDisplayGroup
Field Type Description Example
id int Eindeutige ID 4
code string Code PLOT
externalSystem string Systemreferenz 8
projectRoles
Field Type Description Example
projectRoleType
Field Type Description Example
id int Eindeutige ID 162
code string Code 1010
name string Name Bauherr
sortOrder string Sortierung 3
deprecated boolean Typ veraltet: Ja/Nein 0
projectRoleTypeGroup
Field Type Description Example
id int Eindeutige ID 1
code string Code ARCHITECTS
name string Name Architekten
externalSystem string Systemreferenz 8
active boolean Typ aktiv: Ja/Nein 0
mainContact boolean Hauptkontakt: Ja/Nein 1
visible boolean Typ sichtbar: Ja/Nein 1
company
Field Type Description Example
id int Eindeutige ID 215266
name1 string Name 1 Gemeinde Teufen
name2 string Name 2 Wasserversorgung
language
Field Type Description Example
id int Eindeutige ID 1
code string Code FRA
name string Name Französisch
parishPostcode
Field
parish
Field
parishLanguageRegions
Field
languageRegion
Field Type Description Example
name string Name Deutschschweiz
country
Field Type Description Example
name string Name Schweiz
nameInternational string Internationaler Name Switzerland
isoCode string ISO-Code CHE
postCode string Postleitzahl (internationales Format) CH
phonePrefix string Telefonvorwahl 0041
isEU boolean Land in der EU: Ja/Nein 0
code string Code 4120
countryCode string Ländercode CH
district
Field
province
Field Type Description Example
officialCode string Offizieller Code BS
street string Strassenname und Hausnummer Krankenhausstrasse 1
houseNo Nicht für CH verwendet
town string Ort Basel
postcode int Postleitzahl 4001
country string Ländercode CHE
salesTaxId string Umsatzsteuer-ID CHE-356.414.154
contactSpecifications
Field Type Description Example
contactSpecificationType
Field Type Description Example
code string Code PHONE
name string Name Phone
content string Text Inhalt 071 335 00 15
externalID int Externe ID 1312979
projectRolePersons
Field Type Description Example
active boolean Typ aktiv: Ja/Nein 1
person
Field Type Description Example
id int Eindeutige ID 1548945
salutationType
Field Type Description Example
id int Eindeutige ID 33
code string Code 1
name string Name Herr
language
Field Type Description Example
id int Eindeutige ID 1
code string Code FRA
name string Name Französisch
firstName string Vorname Mia
lastName string Nachname Müller
street string Strasse Clarastrasse 13
postcode string Postleitzahl 4048
town string Ort Basel
contactSpecifications
Field Type Description Example
contactSpecificationType
Field Type Description Example
code string Code PHONE
name string Name Phone
content string Text Inhalt 071 335 00 15
active boolean Typ aktiv: Ja/Nein 1
externalID string Externe ID 887585
externalSystem string Systemreferenz 8
projectRolePersonType
Field Type Description Example
id int Eindeutige ID 9
code string Code CH_ARCHITECT
name string Name Architekt
sortOrder int Sortierung 130
deprecated boolean Typ veraltet: Ja/Nein 0
teaserCompany Nicht für CH verwendet
projectCategories
Field Type Description Example
main boolean Hauptkategorie: Ja/Nein 0
projectCategoryType
Field Type Description Example
id int Eindeutige ID 738
parentId int Eltern-ID 679
code string Code 520
name string Name Wasseraufbereitungsanlagen
visible boolean Typ sichtbar: Ja/Nein 0
projectDevelopmentType
Field Type Description Example
code string Code CH_NEW_CONSTRUCTION
name string Name Neubau
projectDevelopmentTypeGroup
Field Type Description Example
id int Eindeutige ID 2
code string Code MODIFICATION
name string Name Umbau/Sanierung
sortOrder int Sortierung 20
deprecated boolean Typ veraltet: Ja/Nein 0
filterable boolean Typ filterbar: Ja/Nein 1
parishPostcode
Field
parish
Field
parishLanguageRegions
Field
languageRegion
Field Type Description Example
name string Name Deutschschweiz
country
Field Type Description Example
name string Name Schweiz
nameInternational string Internationaler Name Switzerland
isoCode string ISO-Code CHE
postCode string Postleitzahl (internationales Format) CH
phonePrefix string Telefonvorwahl 0041
isEU boolean Land in der EU: Ja/Nein 0
code string Code 4120
countryCode string Ländercode CH
district
Field
province
Field Type Description Example
officialCode string Offizieller Code BS
projectFiles Nicht für CH verwendet
projectAccessLogs
Field Type Description Example
projectAccess datetime Projektzugriff 2025-12-22T07:36:26+00:00
readAccess datetime Lesezugriff 2025-12-22T07:36:26+00:00
topProject Nicht für CH verwendet
relatedHeaders
Field Type Description Example
id int Eindeutige ID 1996627
pnHeader
Field Type Description Example
id int Eindeutige ID 5996327
objectID int Objekt-ID 217112
publishedAt datetime Veröffentlicht am 2024-05-09T19:24:37+00:00
lastUpdate datetime Letzte Aktualisierung 2024-05-09T19:24:37+00:00
title string Titel Concours Rôtisserie (M311TIC)
mainSitePostcode string Postleitzahl 4001
mainSiteTown string Ort Basel
mainSiteCountry string Land CHE
offerTimeLimit datetime Angebotsfrist 2026-06-16T22:00:00+00:00
publicNotices
Field Type Description Example
id int Eindeutige ID 1496667
documentType
Field Type Description Example
name string Name Ausschreibung
code string Code TENDER
title string Titel Campus Petersplatz, Fensterreinigung
officialNumber string Offizielle Nummer 1418709
publicNoticeCodes
Field
publicNoticeCodeType
Field Type Description Example
content string Text Inhalt WTO/OMC
code string Code 9025
new boolean Typ neu: Ja/Nein 0
active boolean Typ aktiv: Ja/Nein 0
filterable boolean Typ filterbar: Ja/Nein 0
externalID string Externe ID 217112_9025
externalSystem string Systemreferenz 11
publicNoticeUrls
Field
id int Eindeutige ID 1996627
publicNoticeUrlType string Typ der Bekanntmachungs-URL /public_notice_url_types/1
content string Text Inhalt https://www.simap.ch/de/project-detail/5427f2….
attachedCorrection boolean Korrektur verknüpft: Ja/Nein 0
attachedAward boolean Ergebnisse verknüpft: Ja/Nein 0
attachedExante boolean Exante-Daten verknüpft: Ja/Nein 0
attachedTender boolean Ausschreibung verknüpft: Ja/Nein 1
attachedProject boolean Projekt verknüpft: Ja/Nein 1
accessible boolean Typ zugänglich: Ja/Nein 1
externalID string Externe ID 217112
externalSystem string Systemreferenz 11
updatedAt datetime Letzte Aktualisierung 2024-05-09T19:27:27+00:00
accessible boolean Typ zugänglich: Ja/Nein 1
unknown boolean Typ unbekannt: Ja/Nein 0
mainCategory Nicht für CH verwendet
projectRolePersons
Field Type Description Example
active boolean Typ aktiv: Ja/Nein 0
person
Field Type Description Example
id int Eindeutige ID 1548945
salutationType
Field Type Description Example
id int Eindeutige ID 33
code string Code 1
name string Name Herr
language
Field Type Description Example
id int Eindeutige ID 1
code string Code FRA
name string Name Französisch
firstName string Vorname Lucas
lastName string Nachname Baumann
street string Strasse Poststrasse 3
postcode string Postleitzahl 9422
town string Ort Staad SG
contactSpecifications
Field Type Description Example
contactSpecificationType
Field Type Description Example
code string Code PHONE
name string Name Phone
content string Text Inhalt 071 335 00 15
active boolean Typ aktiv: Ja/Nein 1
externalID string Externe ID c1099161
externalSystem string Systemreferenz 8
projectRolePersonType
Field Type Description Example
id int Eindeutige ID 9
code string Code CH_ARCHITECT
name string Name Architekt
sortOrder int Sortierung 130
deprecated boolean Typ veraltet: Ja/Nein 0
planningStageDates
Field Type Description Example
id int Eindeutige ID 27447
planningStage
Field Type Description Example
id int Eindeutige ID 19
code string Code CH_PASSED_IN
name string Name Baugesuch eingereicht
sortOrder int Sortierung 4
planningStageDate datetime Datum der Planungsstufe 2023-05-23T09:13:44+00:00