Ereignisse
Welche Ereignisse procuris schickt, wann jedes kommt, wie eine Nachricht aufgebaut ist und woran Sie Änderungen erkennen.
Diese Leistung erhalten Sie über ein individuelles Angebot.
procuris schickt eine Nachricht je Ereignis an die Adresse Ihres Systems. Die Nachricht trägt den vollständigen Datensatz der Ausschreibung statt nur einer Kennung. Ihr System braucht also keinen zweiten Abruf.
Die Auswahl trifft die Rolle Inhaber selbst. Sie legt unter Einstellungen › Organisation › Webhooks fest, welche Ereignisse für welche Ausschreibungen kommen. Der Bereich erscheint erst, wenn der Zugang nach Vertragsschluss eingerichtet ist. Bis dahin führt die Zeile Webhooks im Abschnitt Auf Anfrage derselben Seite nur zur Anfrage eines Angebots.
Übersicht
| Ereignis | Wann es kommt | Typische Verwendung |
|---|---|---|
tender.published | eine Ausschreibung passt zu Ihren Filtern: weil sie neu ist, weil eine Änderung sie passend gemacht hat oder weil sie nach dem Herausfallen wieder passt | Verkaufschance im CRM anlegen |
tender.updated | ein Feld einer Ausschreibung aus Ihrer Auswahl ändert sich, zum Beispiel Beschreibung, Lose, Auftragswert oder Frist | Datensatz in Ihrem System nachziehen |
tender.deadline_changed | die Angebots- oder Teilnahmefrist einer Ausschreibung aus Ihrer Auswahl oder eines ihrer Lose ändert sich | Termin nachziehen, Zuständige benachrichtigen |
tender.archived | eine Ausschreibung aus Ihrer Auswahl, auch eine herausgefallene, ist abgelaufen, aufgehoben, vergeben oder mit einem anderen Datensatz zusammengeführt | Verkaufschance schließen oder zusammenführen |
search.hit | ein Suchauftrag Ihrer Organisation findet einen neuen Treffer ab seiner Schwelle | Treffer an das zuständige Team geben |
webhook.test | die Inhaberin wählt unter Webhooks Testnachricht senden | Empfang prüfen, Aufbau im Workflow-Builder lernen |
Ein Suchauftrag ist eine gespeicherte Suche, die jeden Morgen weiterläuft. Die Schwelle ist die Passung, ab der ein Treffer oben steht. Welche Ausschreibungen zu Ihrer Auswahl gehören, steht unter Auswählen, was kommt.
Zeitpunkt. tender.*-Ereignisse kommen bis zu eine Stunde nach der Übernahme durch procuris. Bezugspunkt ist lastModified, der Zeitpunkt, zu dem procuris die Änderung übernommen hat. Die Änderung bei der Vergabestelle kann früher liegen. Der Bestand bekommt höchstens einen neuen Stand je Stunde. search.hit kommt einmal am Morgen mit dem Lauf des Suchauftrags und enthält dieselben Treffer wie seine E-Mail.
Was kein Ereignis auslöst. Ein neuer Datenstand (checkedAt) ohne geänderte Felder löst kein Ereignis aus.
Herausfallen. Eine Ausschreibung außerhalb Ihrer Auswahl bekommt keine Änderungen mehr. Das gilt, wenn sie nach einer Änderung nicht mehr zu Ihren Filtern passt und kein früherer Treffer eines gewählten Suchauftrags ist. Sie bekommt dann weder tender.updated noch tender.deadline_changed. Passt sie später wieder zu den Filtern, kommt erneut tender.published. tender.archived kommt auch für herausgefallene Ausschreibungen, damit Ihr System offene Vorgänge schließen kann.
Auswählen, was kommt
Je Zieladresse wählt die Inhaberin drei Dinge. Sie kann die Auswahl unter Webhooks später ändern:
- Ereignisarten, zum Beispiel nur
search.hitundtender.archived - Filter für die
tender.*-Ereignisse, mit denselben Parametern wie bei der API:cpv,nuts,deadline_after,value_min,value_max,procedure - Suchaufträge: alle Suchaufträge Ihrer Organisation oder nur bestimmte. Diese Auswahl gilt für
search.hit.
Filter oder Suchauftrag, eines reicht. Auf Wunsch gilt die Suchauftrags-Auswahl auch für tender.updated, tender.deadline_changed und tender.archived. Dann kommen diese Ereignisse für eine Ausschreibung, wenn sie zu den Filtern passt oder schon einmal Treffer eines gewählten Suchauftrags war. Beides zugleich ist nicht nötig. So erfährt Ihr System von geänderten Werten, verschobenen Fristen und Archivierungen seiner Treffer, auch wenn diese außerhalb der Filter liegen. Ohne diese Wahl gelten für tender.* nur die Filter. Ohne Filter, aber mit dieser Wahl kommen die drei Ereignisse nur zu früheren Treffern der gewählten Suchaufträge, nicht zu allen Ausschreibungen.
tender.updated oder tender.deadline_changed? Wählen Sie tender.updated, wenn Ihr System den ganzen Datensatz aktuell hält. Eine verschobene Frist steht dann in changedFields. Wählen Sie tender.deadline_changed, wenn Ihr System nur Fristen braucht, zum Beispiel für einen Kalender. Mit beiden kommt eine Fristverschiebung zweimal, einmal je Ereignis.
Aufbau einer Nachricht
Eine Nachricht hat drei Felder nach der Spezifikation Standard Webhooks:
| Feld | Inhalt |
|---|---|
type | das Ereignis, zum Beispiel tender.published |
timestamp | wann das Ereignis eingetreten ist, nach ISO 8601. Bei einer Wiederholung bleibt dieser Wert gleich. |
data | tender, der vollständige Datensatz wie im Datenmodell, dazu je Ereignis die Felder unten |
| Ereignis | Zusätzliche Felder in data |
|---|---|
tender.published | keine |
tender.updated | changedFields: Liste der geänderten Felder, zum Beispiel ["description", "lots"]. previous: die Werte dieser Felder vor der Änderung. |
tender.deadline_changed | changedFields mit submissionDate, participationDeadline oder dem Pfad eines Loses lots[n].submissionDate, zum Beispiel lots[0].submissionDate für das erste Los (gezählt ab 0), previous mit den alten Fristen unter denselben Schlüsseln |
tender.archived | keine. Der Grund steht in tender.archiveReason, bei merged die bleibende id in tender.mergedInto. |
search.hit | search: id und name des Suchauftrags. fit: die Passung von 0 bis 100, wie sie in procuris am Treffer steht. |
webhook.test | test: true. Dazu ein Muster-Suchauftrag in search und eine Muster-Passung in fit wie bei search.hit. |
Reihenfolge. Die Reihenfolge der Nachrichten ist nicht garantiert. Wiederholungen und Nachlieferungen können einen älteren Stand nach einem neueren bringen. Übernehmen Sie Felder aus data.tender nur, wenn data.tender.lastModified neuer ist als Ihr gespeicherter Stand. Übernehmen Sie data.fit (nur bei search.hit) nur, wenn der timestamp der Nachricht neuer ist als der timestamp der Nachricht, aus der Ihre zuletzt übernommene Passung stammt. Speichern Sie diesen timestamp dazu mit der Passung. So überschreibt weder ein verspäteter noch ein nachgelieferter search.hit einen neueren Stand.
Beispiele
Die Beispiele zeigen den Musterdatensatz aus dem Datenmodell zum jeweiligen Zeitpunkt. Die Vergabestelle veröffentlichte die Bekanntmachung am 17. September ohne Auftragswert. Bis zum 22. September stand darum eine Schätzung von 334.643 Euro im Datensatz. Am 22. September nannte die Vergabestelle den Auftragswert von 351.000 Euro. Weitere Zeitpunkte sind der Treffer am 18. September, die verschobene Frist am 24. September und die Archivierung am 14. Oktober.
tender.published, vollständig
{
"type": "tender.published",
"timestamp": "2026-09-17T14:05:12.000Z",
"data": {
"tender": {
"id": "e9da30eb-50e6-47f1-887f-434016267b2f",
"status": "open",
"archiveReason": null,
"mergedInto": null,
"title": "Nordhausen - Sanierung Rolandbrunnen, Erneuerung Brunnentechnik",
"description": "Erneuerung der Brunnentechnik des Rolandbrunnens in Nordhausen. Los 1 umfasst Pumpen und Steuerung, Los 2 die Beckenabdichtung.",
"tenderNumber": "33/61/2026",
"url": "https://www.procuris.eu/notices/nordhausen-sanierung-rolandbrunnen-erneuerung-brunnentechnik-e9da30eb",
"publicationDate": "2026-09-17T13:32:56.000Z",
"submissionDate": "2026-10-07T08:00:00.000Z",
"participationDeadline": null,
"lastModified": "2026-09-17T14:05:12.000Z",
"checkedAt": "2026-09-17T14:05:12.000Z",
"contractAmount": {
"value": 334643,
"currency": "EUR",
"estimated": true
},
"procedureType": "open",
"contractNature": "works",
"legislation": null,
"organizations": [
{
"id": "7c2a9e41-3d8b-4f6a-b1e2-5a0c9d4e8f17",
"name": "Stadtverwaltung Nordhausen - Vergabestelle",
"role": "contractingParty",
"contactName": "Vergabestelle",
"email": "vergabe@example.org",
"phone": "+49 3631 000000",
"address": {
"street": "Musterstraße 1",
"postalCode": "99734",
"city": "Nordhausen",
"countryCode": "DE"
}
}
],
"cpvClassifications": [
{
"cpvCode": "45000000",
"title": "Bauarbeiten"
},
{
"cpvCode": "71000000",
"title": "Architektur & Ingenieurwesen"
}
],
"regionCodes": ["DEG"],
"realizedLocation": "Nordhausen",
"lots": [
{
"lotNumber": "1",
"title": "Pumpen und Steuerung",
"description": "Lieferung und Einbau der Umwälzpumpen und der Brunnensteuerung.",
"contractAmount": {
"value": 212000,
"currency": "EUR",
"estimated": true
},
"submissionDate": null,
"cpvClassifications": [
{
"cpvCode": "45232150",
"title": "Arbeiten an Wasserleitungen"
}
]
},
{
"lotNumber": "2",
"title": "Beckenabdichtung",
"description": null,
"contractAmount": null,
"submissionDate": null,
"cpvClassifications": []
}
],
"sources": [
{
"name": "TED",
"url": "https://ted.europa.eu/de/notice/-/detail/000000-2026",
"publishedAt": "2026-09-17T13:32:56.000Z"
}
]
}
}
}search.hit, vollständig
{
"type": "search.hit",
"timestamp": "2026-09-18T05:00:00.000Z",
"data": {
"search": {
"id": "3b1f6c2e-8f0a-4d7e-9a51-2c4e7d9b0f13",
"name": "Brunnen und Wasserspiele Thüringen"
},
"fit": 82,
"tender": {
"id": "e9da30eb-50e6-47f1-887f-434016267b2f",
"status": "open",
"archiveReason": null,
"mergedInto": null,
"title": "Nordhausen - Sanierung Rolandbrunnen, Erneuerung Brunnentechnik",
"description": "Erneuerung der Brunnentechnik des Rolandbrunnens in Nordhausen. Los 1 umfasst Pumpen und Steuerung, Los 2 die Beckenabdichtung.",
"tenderNumber": "33/61/2026",
"url": "https://www.procuris.eu/notices/nordhausen-sanierung-rolandbrunnen-erneuerung-brunnentechnik-e9da30eb",
"publicationDate": "2026-09-17T13:32:56.000Z",
"submissionDate": "2026-10-07T08:00:00.000Z",
"participationDeadline": null,
"lastModified": "2026-09-17T14:05:12.000Z",
"checkedAt": "2026-09-18T04:00:00.000Z",
"contractAmount": {
"value": 334643,
"currency": "EUR",
"estimated": true
},
"procedureType": "open",
"contractNature": "works",
"legislation": null,
"organizations": [
{
"id": "7c2a9e41-3d8b-4f6a-b1e2-5a0c9d4e8f17",
"name": "Stadtverwaltung Nordhausen - Vergabestelle",
"role": "contractingParty",
"contactName": "Vergabestelle",
"email": "vergabe@example.org",
"phone": "+49 3631 000000",
"address": {
"street": "Musterstraße 1",
"postalCode": "99734",
"city": "Nordhausen",
"countryCode": "DE"
}
}
],
"cpvClassifications": [
{
"cpvCode": "45000000",
"title": "Bauarbeiten"
},
{
"cpvCode": "71000000",
"title": "Architektur & Ingenieurwesen"
}
],
"regionCodes": ["DEG"],
"realizedLocation": "Nordhausen",
"lots": [
{
"lotNumber": "1",
"title": "Pumpen und Steuerung",
"description": "Lieferung und Einbau der Umwälzpumpen und der Brunnensteuerung.",
"contractAmount": {
"value": 212000,
"currency": "EUR",
"estimated": true
},
"submissionDate": null,
"cpvClassifications": [
{
"cpvCode": "45232150",
"title": "Arbeiten an Wasserleitungen"
}
]
},
{
"lotNumber": "2",
"title": "Beckenabdichtung",
"description": null,
"contractAmount": null,
"submissionDate": null,
"cpvClassifications": []
}
],
"sources": [
{
"name": "TED",
"url": "https://ted.europa.eu/de/notice/-/detail/000000-2026",
"publishedAt": "2026-09-17T13:32:56.000Z"
}
]
}
}
}In den folgenden Beispielen ist data.tender ebenfalls der vollständige Datensatz. Gezeigt sind nur id, lastModified, checkedAt und die Felder, um die es beim Ereignis geht.
tender.updated
{
"type": "tender.updated",
"timestamp": "2026-09-22T09:40:03.000Z",
"data": {
"tender": {
"id": "e9da30eb-50e6-47f1-887f-434016267b2f",
"lastModified": "2026-09-22T09:40:03.000Z",
"checkedAt": "2026-09-22T09:40:03.000Z",
"contractAmount": {
"value": 351000,
"currency": "EUR",
"estimated": false
}
},
"changedFields": ["contractAmount"],
"previous": {
"contractAmount": {
"value": 334643,
"currency": "EUR",
"estimated": true
}
}
}
}tender.deadline_changed
{
"type": "tender.deadline_changed",
"timestamp": "2026-09-24T09:10:00.000Z",
"data": {
"tender": {
"id": "e9da30eb-50e6-47f1-887f-434016267b2f",
"lastModified": "2026-09-24T09:10:00.000Z",
"checkedAt": "2026-09-24T09:10:00.000Z",
"submissionDate": "2026-10-14T08:00:00.000Z",
"participationDeadline": null
},
"changedFields": ["submissionDate"],
"previous": {
"submissionDate": "2026-10-07T08:00:00.000Z"
}
}
}Frist eines Loses. Bei Losfristen tragen changedFields und previous den Pfad des Loses. Der neue Wert steht in data.tender.lots[n].submissionDate. Im Musterdatensatz haben die Lose keine eigene Frist. Der Ausschnitt zeigt darum nur den Aufbau für den Fall, dass Los 1 eine eigene Frist hätte und diese sich ändert:
{
"changedFields": ["lots[0].submissionDate"],
"previous": {
"lots[0].submissionDate": "2026-10-07T08:00:00.000Z"
}
}Eine erstmals gesetzte Losfrist hat in previous den Wert null. Bis dahin galt für das Los die Frist der Ausschreibung.
tender.archived
{
"type": "tender.archived",
"timestamp": "2026-10-14T09:00:00.000Z",
"data": {
"tender": {
"id": "e9da30eb-50e6-47f1-887f-434016267b2f",
"lastModified": "2026-10-14T09:00:00.000Z",
"checkedAt": "2026-10-14T09:00:00.000Z",
"status": "archived",
"archiveReason": "expired",
"mergedInto": null
}
}
}webhook.test
Die Testnachricht trägt den Musterdatensatz im aktuellen Stand. Er steht vollständig unter data.tender, dazu ein Muster-Suchauftrag unter data.search und eine Muster-Passung unter data.fit. Ein Workflow-Builder lernt daran die Felder von tender.published und search.hit. changedFields und previous fehlen in der Testnachricht, weil sie nur bei einer Änderung entstehen. Hier ist data.tender gekürzt.
{
"type": "webhook.test",
"timestamp": "2026-10-01T08:00:00.000Z",
"data": {
"test": true,
"search": {
"id": "00000000-0000-0000-0000-000000000000",
"name": "Mustersuchauftrag"
},
"fit": 82,
"tender": {
"id": "e9da30eb-50e6-47f1-887f-434016267b2f",
"lastModified": "2026-09-24T09:10:00.000Z",
"checkedAt": "2026-10-01T07:00:00.000Z",
"title": "Nordhausen - Sanierung Rolandbrunnen, Erneuerung Brunnentechnik",
"url": "https://www.procuris.eu/notices/nordhausen-sanierung-rolandbrunnen-erneuerung-brunnentechnik-e9da30eb"
}
}
}Verwandte Seiten
Angebot anfordern
Schildern Sie uns, was Sie nutzen oder anbinden möchten. Ihr Angebot richtet sich nach diesem Umfang.
Webhooks
procuris meldet neue Ausschreibungen und Treffer von sich aus an Ihr System. Wann Webhooks statt der API passen und wie Ihre IT die erste Nachricht empfängt.
Zustellung und Sicherheit
Welche Header mitkommen, wie Ihr System die Signatur prüft, was es antworten muss und was bei einem Ausfall passiert.