Events

Hier siehst du, welche Änderungen einen Webhook auslösen können und welche Daten i-Planner dabei sendet. Die verständliche Übersicht steht zuerst; darunter folgt das genaue Format für Entwickler.

Zuletzt geprüft: 11. September 2026

Welche Daten werden gesendet?

Jede produktive Nachricht enthält den geänderten Datensatz unter payload.data. Die Feldnamen und Werte entsprechen dem jeweiligen Einzelabruf der v3-REST-API. Aktivierte Zusatzinhalte werden dabei berücksichtigt. Der Empfänger muss das Event deshalb nicht erst über eine ID erneut auflösen.

Gehört der geänderte Datensatz zu einem anderen Datensatz, liefert payload.parent zusätzlich dessen kompakte Identifikation. Bei einer geänderten Adresse erkennt der Empfänger dadurch beispielsweise sofort den zugehörigen Kunden. Bei einem Kommentar ist der Parent der Datensatz, an dem der Kommentar tatsächlich hängt – etwa eine Aktivität oder ein Vertrag.

Für Entwickler: Der äußere Aufbau der Nachricht wird als Envelope bezeichnet und ist bei jedem Event gleich:

json
{
  "request_id": "9a8b7c…",
  "event_name": "addresses.update",
  "timestamp":  "2026-09-07T08:00:00.000Z",
  "payload": {
    "data": {
      "id": 67890,
      "kid": 12345,
      "strasse": "Musterstraße 1",
      "plz": "12345",
      "ort": "Musterstadt",
      "fields": {
        "strasse": { "label": "Straße", "data_type": "string", "select_fields_name": null }
      },
      "select_fields": {}
    },
    "parent": {
      "type": "customer",
      "id": 24680,
      "kid": 12345,
      "anrede": "Herr",
      "titel": "",
      "vorname": "Max",
      "name": "Mustermann"
    }
  }
}
request_id
Technische ID des auslösenden Events (UUID). Sie bleibt bei Wiederholungen gleich und kann bei mehreren passenden Webhooks identisch sein. Nutze für die Idempotenz einer konkreten Auslieferung den HTTP-Header webhook-id.
event_name
Technischer Event-Name, z. B. customers.insert für „Kunde anlegen“. Die vollständige Liste steht weiter unten.
timestamp
Zeitpunkt des Events als ISO-8601-Wert. Er bleibt bei Wiederholungen gleich.
payload
Enthält unter data den geänderten Datensatz im Format der v3-REST-API. Bei untergeordneten Datensätzen enthält parent zusätzlich eine kompakte Identifikation des Datensatzes, zu dem er gehört. Beim Löschen wird der zuletzt verfügbare Datensatz gesendet.

payload.data bleibt immer der Datensatz des ausgelösten Events. payload.parent ist ein direktes Objekt und enthält keine weitere data-Ebene. Es besteht ausschließlich aus type, id, kid, anrede, titel, vorname und name, soweit diese Werte vorhanden sind. type bezeichnet die Art des Parents, zum Beispiel customer, product, user, activity oder contract. Bei Daten ohne auflösbare Zuordnung fehlt parent.

Wenn im Eventbereich Feldbeschreibung aktiviert ist, enthält payload.data zusätzlich fields und select_fields. fields beschreibt die gelieferten Felder mit verständlicher Bezeichnung und Datentyp. Verweist ein Feld über select_fields_name auf eine Auswahlliste, stehen deren Werte unter demselben Namen in select_fields. Bei Kunden, Produktpartnern und Benutzern sind diese Angaben nach Entität gruppiert: beispielsweise payload.data.fields.customers, payload.data.fields.addresses, payload.data.select_fields.customers und payload.data.select_fields.addresses. So bleiben gleichnamige Felder wie art eindeutig. Die Metadaten für eingebettete Adressen stehen einmal bei der Hauptentität, nicht in jeder Adresse. Bei einem eigenständigen Nummern-Event liegt die Beschreibung von art dagegen unter payload.data.fields.art und die zugehörige Auswahlliste unter payload.data.select_fields.nummern – genau wie im v3-Einzelabruf. Hat ein Datensatz keine solchen Metadaten, werden beide Objekte leer als {} gesendet. Bei sehr großen, organisationsabhängigen Listen – Vermittler, Pools und Benutzergruppen – liefert i-Planner nur die Einträge, deren IDs im konkreten Datensatz vorkommen. Ist die Einstellung aus, fehlen fields und select_fields vollständig; die eigentlichen Datenfelder bleiben gleich.

Beispiel für customers.update mit eingebetteten Kontaktdaten und aktivierter Feldbeschreibung (gekürzt):

{
  "event_name": "customers.update",
  "payload": {
    "data": {
      "kid": 12345,
      "name": "Mustermann",
      "contacts": [{ "id": 678, "kid": 12345, "art": "E-Mail", "wert": "max@example.com" }],
      "fields": {
        "customers": {
          "name": { "label": "Name", "data_type": "string", "select_fields_name": null }
        },
        "contacts": {
          "art": { "label": "Medium", "data_type": "string", "select_fields_name": "kommunikationArt" }
        }
      },
      "select_fields": {
        "customers": {},
        "contacts": {
          "kommunikationArt": [{ "value": "E-Mail", "display": "E-Mail" }]
        }
      }
    }
  }
}

Die Entitätsnamen verschachteln nur die Feldinfos, nicht den Kundendatensatz oder seine contacts-Liste. Das optionale REST-Query-Flag flat für Unterressourcen wird bei Webhooks nicht verwendet. Ein contacts.insert ist außerdem ein eigenes Event und wird nicht schon durch „Kontaktdaten mitsenden“ beim Kunden abonniert.

Kann i-Planner den Datensatz oder den erforderlichen übergeordneten Datensatz nicht vollständig zusammenstellen, wird kein unvollständiger Webhook mit data: null gesendet. i-Planner stoppt die Zustellung vorher und protokolliert den Fehler intern.

Die vollständige Nachricht wird bei POST, PUT oder PATCH als Body gesendet. Bei application/x-www-form-urlencoded wird sie entsprechend form-codiert. GET/DELETE sind nicht konfigurierbar, weil die Webhook-Signatur den exakten Body absichert.

Zusätzliche Daten auswählen

Im Bereich Events der Webhook-Einstellungen legst du nicht nur Anlegen, Aktualisieren und Löschen fest. Für viele Datenbereiche kannst du zusätzliche verknüpfte Datensätze aktivieren. Diese werden direkt in payload.data eingebettet. Nicht ausgewählte Inhalte fehlen, damit der Webhook übersichtlich bleibt. Außerdem kannst du pro Eventbereich entscheiden, ob Feldbeschreibungen und Auswahllisten mitgesendet werden. Neu hinzugefügte Eventbereiche starten ohne diese Metadaten; bereits bestehende Eventbereiche behalten ihre bisherige vollständige Payload, bis du die Einstellung änderst. Jeder Eventbereich kann nur einmal hinzugefügt werden; beim Hinzufügen zeigt die Auswahl nur noch freie Bereiche.

Kunden und Benutzer
Optional Adressen, Kontaktdaten, Beruf & Arbeitgeber, Bankverbindungen, Nummern und Identitätsdaten direkt in payload.data einbetten.
Produktpartner
Optional Adressen, Kontaktdaten, Bankverbindungen und Nummern direkt in payload.data einbetten.
Verträge
Optional Vertrags-Personen und Vertrags-Tarife direkt in payload.data einbetten.

Beim Löschen sendet i-Planner den Datensatz unmittelbar vor der Löschung. Ist die Feldbeschreibung für diesen Eventbereich eingeschaltet, enthält auch ein Lösch-Event fields und select_fields in payload.data – genau wie beim Anlegen oder Aktualisieren. Zusätzliche untergeordnete Datensätze wie Adressen oder Vertrags-Tarife werden bei Lösch-Events nicht eingebettet, weil sie nach der Löschung nicht mehr zuverlässig ermittelt werden können.

Wo wurde die Änderung ausgelöst?

Ein Event wie „Kunde angelegt“ kann durch einen Mitarbeiter in i-Planner oder durch ein externes System über die REST-API ausgelöst werden. Pro Webhook entscheidest du, welche dieser Quellen berücksichtigt werden. Sind beide aktiviert, werden beide Arten von Änderungen gesendet.

User Interface (`ui`)
Mitarbeiter haben Daten direkt in der Benutzeroberfläche von i-Planner geändert, zum Beispiel einen Kunden manuell angelegt.
REST-API (`api`)
Ein externes System oder Skript hat Daten über die REST-API geändert.

Verfügbare Events

i-Planner bietet derzeit 64 Events in 23 Datenbereichen. In den Einstellungen wählst du pro Eventbereich Aktionen wie Anlegen, Aktualisieren und Löschen; bei Zuordnungen heißen sie Zuweisen und Entfernen. Links steht der technische Event-Name für dein System, rechts die Bezeichnung aus den Einstellungen und wann das Event gesendet wird.

Kunden

Kunden sind die Stammdaten eines Kunden, Kunden-Beziehungen Verknüpfungen wie Ehepartner, Kind oder Arbeitgeber.

customers.insert
Kunde anlegen — wird gesendet, wenn ein neuer Kunde angelegt wird.
customers.update
Kunde aktualisieren — wird gesendet, wenn Kundendaten aktualisiert werden.
customers.delete
Kunde löschen — wird gesendet, wenn ein Kunde gelöscht wird.
customers.relations.insert
Kunden-Beziehung zuweisen — wird gesendet, wenn eine Kunden-Beziehung zugewiesen wird.
customers.relations.delete
Kunden-Beziehung entfernen — wird gesendet, wenn eine Kunden-Beziehung entfernt wird.

Verträge

Vertrags-Personen sind die versicherten Personen am Vertrag, Vertrags-Tarife die Tarife am Vertrag.

contracts.insert
Vertrag anlegen — wird gesendet, wenn ein neuer Vertrag angelegt wird.
contracts.update
Vertrag aktualisieren — wird gesendet, wenn Vertragsdaten aktualisiert werden.
contracts.delete
Vertrag löschen — wird gesendet, wenn ein Vertrag gelöscht wird.
contract.person.insert
Vertrags-Person zuweisen — wird gesendet, wenn eine Vertrags-Person zugewiesen wird.
contract.person.update
Vertrags-Person aktualisieren — wird gesendet, wenn Daten einer zugewiesenen Vertrags-Person geändert werden.
contract.person.delete
Vertrags-Person entfernen — wird gesendet, wenn eine Vertrags-Person entfernt wird.
contract.tariff.insert
Vertrags-Tarif zuweisen — wird gesendet, wenn ein Vertrags-Tarif zugewiesen wird.
contract.tariff.delete
Vertrags-Tarif entfernen — wird gesendet, wenn ein Vertrags-Tarif entfernt wird.

Produktpartner

Produktpartner sind Versicherer, Banken oder Fondsgesellschaften — mit ihren Ansprechpartnern und Anbieter-Portalen.

products.insert
Produktpartner anlegen — wird gesendet, wenn ein neuer Produktpartner angelegt wird.
products.update
Produktpartner aktualisieren — wird gesendet, wenn Produktpartnerdaten aktualisiert werden.
products.delete
Produktpartner löschen — wird gesendet, wenn ein Produktpartner gelöscht wird.
products.contact.persons.insert
Ansprechpartner anlegen — wird gesendet, wenn ein neuer Ansprechpartner angelegt wird.
products.contact.persons.update
Ansprechpartner aktualisieren — wird gesendet, wenn Ansprechpartnerdaten aktualisiert werden.
products.contact.persons.delete
Ansprechpartner löschen — wird gesendet, wenn ein Ansprechpartner gelöscht wird.
products.portals.insert
Portal anlegen — wird gesendet, wenn ein neues Portal angelegt wird.
products.portals.update
Portal aktualisieren — wird gesendet, wenn Portaldaten aktualisiert werden.
products.portals.delete
Portal löschen — wird gesendet, wenn ein Portal gelöscht wird.

Schäden, Finanzen, Ziele

Schadensfälle, Finanzeinträge (Einnahmen, Ausgaben, Vermögen, Verbindlichkeiten) sowie Wünsche und Ziele eines Kunden.

damages.insert
Schaden anlegen — wird gesendet, wenn ein neuer Schaden angelegt wird.
damages.update
Schaden aktualisieren — wird gesendet, wenn Schadendaten aktualisiert werden.
damages.delete
Schaden löschen — wird gesendet, wenn ein Schaden gelöscht wird.
finance.insert
Finanzeintrag anlegen — wird gesendet, wenn ein neuer Finanzeintrag angelegt wird.
finance.update
Finanzeintrag aktualisieren — wird gesendet, wenn Finanzdaten aktualisiert werden.
finance.delete
Finanzeintrag löschen — wird gesendet, wenn ein Finanzeintrag gelöscht wird.
goals.insert
Ziel anlegen — wird gesendet, wenn ein neues Ziel angelegt wird.
goals.update
Ziel aktualisieren — wird gesendet, wenn Zieldaten aktualisiert werden.
goals.delete
Ziel löschen — wird gesendet, wenn ein Ziel gelöscht wird.

Stammdaten (Kontakt, Adresse, Bank, …)

Diese Datensätze können an Kunden und Benutzern hängen: Kontaktdaten (E-Mail und Telefon), Adressen, Bankverbindungen, Nummern (z. B. Steuer- oder Vermittlernummern), Identitätsdaten (z. B. Ausweis und Pass) sowie Beruf und Arbeitgeber. Bei Produktpartnern gibt es davon Adressen, Kontaktdaten, Bankverbindungen und Nummern.

contacts.insert
Kontaktdaten anlegen — wird gesendet, wenn neue Kontaktdaten angelegt werden.
contacts.update
Kontaktdaten aktualisieren — wird gesendet, wenn Kontaktdaten aktualisiert werden.
contacts.delete
Kontaktdaten löschen — wird gesendet, wenn Kontaktdaten gelöscht werden.
addresses.insert
Adresse anlegen — wird gesendet, wenn eine neue Adresse angelegt wird.
addresses.update
Adresse aktualisieren — wird gesendet, wenn Adressdaten aktualisiert werden.
addresses.delete
Adresse löschen — wird gesendet, wenn eine Adresse gelöscht wird.
banking.insert
Bankverbindung anlegen — wird gesendet, wenn eine neue Bankverbindung angelegt wird.
banking.update
Bankverbindung aktualisieren — wird gesendet, wenn Bankdaten aktualisiert werden.
banking.delete
Bankverbindung löschen — wird gesendet, wenn eine Bankverbindung gelöscht wird.
numbers.insert
Nummer anlegen — wird gesendet, wenn eine neue Nummer angelegt wird.
numbers.update
Nummer aktualisieren — wird gesendet, wenn eine Nummer aktualisiert wird.
numbers.delete
Nummer löschen — wird gesendet, wenn eine Nummer gelöscht wird.
identity.insert
Identitätsdaten anlegen — wird gesendet, wenn neue Identitätsdaten angelegt werden.
identity.update
Identitätsdaten aktualisieren — wird gesendet, wenn Identitätsdaten aktualisiert werden.
identity.delete
Identitätsdaten löschen — wird gesendet, wenn Identitätsdaten gelöscht werden.
jobs.insert
Beruf & Arbeitgeber anlegen — wird gesendet, wenn neue Berufs- oder Arbeitgeberdaten angelegt werden.
jobs.update
Beruf & Arbeitgeber aktualisieren — wird gesendet, wenn Berufs- oder Arbeitgeberdaten aktualisiert werden.
jobs.delete
Beruf & Arbeitgeber löschen — wird gesendet, wenn Berufs- oder Arbeitgeberdaten gelöscht werden.

Weitere CRM-Daten

Aktivitäten (Termine, Aufgaben, E-Mails, Anrufe, Notizen), Dokumente, Kommentare, Follower und Tag-Zuweisungen an Datensätzen. Änderungen am Tag-Katalog selbst lösen kein Event aus.

activities.insert
Aktivität anlegen — wird gesendet, wenn eine neue Aktivität angelegt wird.
activities.update
Aktivität aktualisieren — wird gesendet, wenn Aktivitätsdaten aktualisiert werden.
activities.delete
Aktivität löschen — wird gesendet, wenn eine Aktivität gelöscht wird.
documents.insert
Dokument anlegen — wird gesendet, wenn ein neues Dokument angelegt wird.
documents.update
Dokument aktualisieren — wird gesendet, wenn Dokumentdaten aktualisiert werden.
documents.delete
Dokument löschen — wird gesendet, wenn ein Dokument gelöscht wird.
comments.insert
Kommentar anlegen — wird gesendet, wenn ein neuer Kommentar angelegt wird.
comments.delete
Kommentar löschen — wird gesendet, wenn ein Kommentar gelöscht wird.
follower.insert
Follower zuweisen — wird gesendet, wenn ein Follower zugewiesen wird.
follower.delete
Follower entfernen — wird gesendet, wenn ein Follower entfernt wird.
tag.assign
Tag zuweisen — wird gesendet, wenn ein Tag zugewiesen wird.
tag.remove
Tag entfernen — wird gesendet, wenn ein Tag entfernt wird.

Benutzer

Mitarbeiter-Stammdaten der Organisation.

users.insert
Benutzer anlegen — wird gesendet, wenn ein neuer Benutzer angelegt wird.
users.update
Benutzer aktualisieren — wird gesendet, wenn Benutzerdaten aktualisiert werden.
users.delete
Benutzer löschen — wird gesendet, wenn ein Benutzer gelöscht wird.