meetergomeetergo Help

Webhooks in meetergo

Webhook-URL einrichten für Buchungen, Stornierungen, Terminverschiebungen und Formular-Einsendungen, Payload verstehen und beheben, wenn der Webhook nicht gesendet wird oder nicht ankommt (Make, Zapier, n8n)

Aktualisiert am 28. Juli 2026

Mit Webhooks kann meetergo deine anderen Systeme automatisch benachrichtigen, wenn etwas Wichtiges passiert - etwa eine neue Buchung, eine Stornierung oder eine Terminverschiebung. Anstatt ständig nach Updates zu suchen, erhalten deine Systeme sofortige Benachrichtigungen, sodass alles synchron bleibt.

Was sind Webhooks?

Webhooks sind meetergo's Methode, deine anderen Tools auf dem Laufenden zu halten. Wenn etwas passiert - jemand bucht ein Meeting, storniert oder verschiebt einen Termin - senden wir sofort alle Details an eine Webadresse deiner Wahl. Von dort aus kann dein System die gewünschten Aktionen ausführen: dein CRM aktualisieren, dein Team in Slack benachrichtigen, eine E-Mail-Kampagne starten und vieles mehr.

Die URL kommt von dir, die Daten von meetergo. meetergo erzeugt die Webhook-URL nicht - du bekommst sie von dem Tool, das die Daten empfangen soll (ein Webhook-Trigger in Make oder Zapier, ein Webhook-Node in n8n oder dein eigener Endpunkt).

Webhooks in meetergo einrichten

  1. Öffne Integrationen & Apps und klicke auf die Kachel Webhooks. Die Kachel n8n öffnet denselben Dialog.
  2. Klicke auf "Webhook einrichten"
  3. Füge unter Endpunkt URL die Adresse ein, die dir dein System oder deine Integrationsplattform gegeben hat (zum Beispiel https://hook.eu2.make.com/...)
  4. Optional kannst du eine Beschreibung eintragen, um deine Webhooks später auseinanderzuhalten
  5. Schalte unter Aktive Events die Ereignisse ein, die an diese URL gehen sollen. Neue Terminbuchung ist standardmäßig aktiv
  6. Klicke auf "Webhook erstellen"

Nach dem Speichern sendet meetergo Benachrichtigungen an deine URL, sobald diese Ereignisse eintreten. Jede Benachrichtigung enthält vollständige Informationen darüber, was passiert ist, sodass dein System alles hat, was es braucht.

Verfügbare Webhook-Ereignisse

Diese Ereignisse kannst du im Webhooks-Dialog einschalten. Jedes liefert spezifische Informationen, die dein System verwenden kann.

  • Neue Terminbuchung (booking_created) — Wird ausgelöst, wenn jemand ein neues Meeting bucht. Du erhältst alle Buchungsdetails einschließlich Teilnehmerinformationen, Meetingzeit, Gastgeber und die Terminseite.
  • Terminabsagen (booking_cancelled) — Wird ausgelöst, wenn eine Buchung storniert wird. Die Daten enthalten dieselben Informationen wie bei einer erstellten Buchung, plus Stornierungsdetails (wer storniert hat, wann und warum). Bei Gruppenterminen wird dieses Ereignis auch ausgelöst, wenn ein einzelner Teilnehmer storniert — in diesem Fall bleibt isCancelled auf false (der Termin ist für andere Teilnehmer weiterhin aktiv), aber das cancel-Objekt enthält die Stornierungsdetails.
  • Terminverschiebungen (booking_rescheduled) — Wird ausgelöst, wenn jemand ein Meeting auf eine andere Zeit verschiebt. Dies umfasst sowohl die ursprüngliche Startzeit als auch alle Details des neu geplanten Meetings.
  • Formular-Einsendungen (form_submission) — Wird ausgelöst, wenn jemand ein Routing-Formular oder einen Funnel ausfüllt. Die Daten enthalten die Formular-Metadaten, die Einreichungsdaten und optionale Kontaktinformationen.
  • Kalender-Verbindungsfehler (credential_error) — Wird ausgelöst, wenn die Kalenderverbindung eines Nutzers widerrufen oder abgelaufen ist und neu verbunden werden muss. Praktisch, um den Gastgeber zu warnen, bevor Buchungen ohne Kalendereintrag bleiben.

meetergo sendet außerdem ein new_employee-Ereignis sowie Ereignisse für Bewertungen, abgeschlossene E-Signaturen und eingehende WhatsApp-Nachrichten. Diese sind keine Schalter im Dialog, sondern werden über Zapier, Make oder die API abonniert.

Wie die Zustellung funktioniert

Was meetergo nicht tut, erklärt die meisten Probleme:

VerhaltenWas das für dich bedeutet
Ein Versuch pro Ereignismeetergo sendet genau einen POST, sobald das Ereignis eintritt. Es gibt keine Wiederholungsversuche.
Kein Zustellprotokollmeetergo speichert nicht, was gesendet wurde oder was dein Endpunkt geantwortet hat. Nur die Historie deines Zielsystems zeigt das.
Fehler siehst du nichtWenn dein Endpunkt nicht erreichbar oder zu langsam ist oder einen Fehler zurückgibt, geht das Ereignis verloren. In meetergo erscheint dazu nichts.
Ein 410 Gone löscht den WebhookAntwortet dein Endpunkt mit 410 Gone - was Make und Zapier tun, sobald das Szenario oder der Zap hinter der URL gelöscht oder deaktiviert wurde - entfernt meetergo den Webhook automatisch. Deshalb kann ein Webhook von allein aus der Liste verschwinden.
Gilt für den ganzen Account, nicht pro TerminseiteJeder Webhook bekommt seine Ereignisse für den gesamten Account. Filtern musst du in deinem eigenen System über meetingType.id.

Da es keine Wiederholung gibt, sollte dein Endpunkt die Anfrage schnell annehmen (die langsame Verarbeitung danach erledigen) und aus dem öffentlichen Internet erreichbar sein.

Nur die Einsendungen eines einzelnen Formulars senden

Wenn nur ein bestimmtes Routing-Formular oder ein Funnel eine Automatisierung auslösen soll, hinterlege den Webhook am Formular statt am Account:

  1. Öffne das Formular im Formular-Builder und gehe im Einstellungsbereich zu Nach dem Absenden
  2. Trage deine Adresse unter Webhook URL ein ("Füge eine Make-, Zapier- oder eigene Webhook-URL ein. Bei jeder Einreichung wird ein POST-Request gesendet.")

Der Payload ist die unten beschriebene form_submission-Struktur. Dieses Feld setzt den Teams-Plan voraus, und die URL muss https:// sein und öffentlich erreichbar - interne Adressen wie localhost oder 192.168.x.x werden abgelehnt.

Ein accountweiter form_submission-Webhook und eine Webhook URL am Formular können gleichzeitig aktiv sein; die Einsendung geht dann an beide.

Webhook-Payloads verstehen

Wenn meetergo einen Webhook sendet, enthält er einen "Payload" - das Paket mit Informationen darüber, was passiert ist. Der Payload ist strukturierte Daten, die dein System einfach lesen und verwenden kann.

Jeder Payload enthält ein webhookType-Feld (z.B. "booking_created", "form_submission"), damit dein System den Ereignistyp einfach identifizieren kann. Bei erstellten und stornierten Buchungen befinden sich die Buchungsdaten auf der obersten Ebene. Bei verschobenen Buchungen findest du die ursprüngliche Startzeit oben und alle neuen Buchungsdetails verschachtelt darunter. Diese Struktur macht es einfach zu vergleichen, was sich geändert hat.

Webhooks testen

In meetergo gibt es keinen Button für ein Testereignis - ein Webhook wird nur durch das echte Ereignis ausgelöst. So testest du ihn:

  1. Richte den Webhook auf eine URL, die dir zeigt, was ankommt. Make, Zapier und n8n zeigen die eingehende Anfrage an, solange der Trigger lauscht; auch eine Wegwerf-URL zum Mitschneiden von Requests funktioniert.
  2. Löse das Ereignis echt aus: buche einen Testtermin auf einer deiner Terminseiten oder sende das Formular ab.
  3. Sieh dir die eingegangene Rohanfrage an. Dieser JSON-Body ist die verbindliche Quelle dafür, welche Feldnamen und Werte du bekommst - nicht das Mapping, das dein Zieltool vermutet.

Wenn nichts ankommt, arbeite diese Liste ab:

PrüfenWarum
Ist die URL noch gültig?Make und Zapier vergeben bei jedem Neuaufbau des Triggers eine neue URL. Die alte antwortet meist mit 410 Gone, wodurch meetergo den Webhook löscht.
Steht der Webhook noch in der Liste?Öffne den Webhooks-Dialog erneut. Fehlt er, wurde er nach einem 410 Gone entfernt - lege ihn mit der aktuellen URL neu an.
Ist das richtige Event aktiv?Nur Neue Terminbuchung ist standardmäßig eingeschaltet. Ein Webhook für Buchungen bekommt nichts, wenn ein Formular abgesendet wird.
Ist der Endpunkt öffentlich per HTTPS erreichbar?meetergo ruft deine URL aus dem Internet auf. Lokale Adressen und Endpunkte hinter VPN oder Basic Auth bekommen nie etwas.
Ist das Ereignis überhaupt schon eingetreten?Wenn die Terminseite eine Bestätigung verlangt, entsteht der Termin erst mit der Bestätigung - booking_created wird dann ausgelöst, nicht beim Ausfüllen des Formulars.

Es gibt keine Wiederholung und keine Fehlermeldung in meetergo. Ein Ereignis, das verloren ging, während dein Endpunkt nicht erreichbar war, lässt sich nicht nachliefern - löse stattdessen eine neue Testbuchung aus.

Webhook-Datenreferenz

Unten findest du die genaue Struktur der Daten, die meetergo für jeden Ereignistyp sendet. Deine Entwickler können diese verwenden, um Integrationen zu erstellen.

Buchungsereignis-Payload (booking_created, booking_cancelled)

{
  "webhookType": "booking_created",
  "id": "uuid",
  "secret": "string",
  "start": "2024-01-15T10:00:00.000Z",
  "end": "2024-01-15T11:00:00.000Z",
  "location": "string | null",
  "isCancelled": true,
  "rescheduledAt": null,
  "meetingInfo": { },
  "cancel": {
    "actionAt": "2024-01-15T08:00:00.000Z",
    "actionSource": "attendee | host | company",
    "reason": "string | null",
    "actionBy": {
      "id": "uuid",
      "email": "host@example.com",
      "givenName": "Jane",
      "familyName": "Smith"
    }
  },
  "ics": "string",
  "note": "string | null",
  "hostingInfo": { },
  "attendees": [
    {
      "id": "uuid",
      "email": "attendee@example.com",
      "phone": "+1234567890",
      "firstname": "John",
      "lastname": "Doe",
      "fullname": "John Doe",
      "timezone": "Europe/Berlin",
      "language": "en",
      "notes": "string | null",
      "attendeeEnrichment": { }
    }
  ],
  "hosts": [
    {
      "id": "uuid",
      "email": "host@example.com",
      "givenName": "Jane",
      "familyName": "Smith",
      "fullName": "Jane Smith",
      "slug": "jane-smith",
      "picture": "https://..."
    }
  ],
  "hostIds": ["uuid"],
  "meetingType": {
    "id": "uuid",
    "slug": "30-min-call",
    "meetingInfo": { },
    "meetingOptions": { },
    "crmOptions": { },
    "metadata": { }
  },
  "meetingTypeId": "uuid",
  "paymentId": "string | null",
  "companyId": "uuid",
  "createdAt": "2024-01-14T09:00:00.000Z",
  "updatedAt": "2024-01-15T08:00:00.000Z"
}

Hinweise zum cancel-Objekt:

  • cancel ist null bei booking_created-Ereignissen und befüllt bei booking_cancelled-Ereignissen
  • actionSource zeigt an, wer storniert hat: "attendee" (Teilnehmer), "host" (Gastgeber) oder "company" (Admin)
  • actionBy enthält den Gastgeber/Admin, der storniert hat. Der Wert ist null, wenn der Teilnehmer storniert
  • isCancelled ist true bei vollständigen Stornierungen. Bei Gruppenterminen, bei denen ein einzelner Teilnehmer absagt, ist isCancelled false, aber cancel ist trotzdem befüllt

Formular-Einreichung Payload (form_submission)

{
  "webhookType": "form_submission",
  "formId": "uuid",
  "formName": "Kontaktformular",
  "formSlug": "kontaktformular",
  "companyId": "uuid",
  "workspaceId": "uuid",
  "submissionData": {
    "name": "Max Mustermann",
    "email": "kontakt@example.com",
    "upload": "[{\"fileAssetId\":\"abc123\",\"filename\":\"dokument.pdf\",\"sizeBytes\":102400}]"
  },
  "files": [
    {
      "fieldName": "upload",
      "fileAssetId": "abc123",
      "filename": "dokument.pdf",
      "sizeBytes": 102400,
      "downloadUrl": "https://s3.eu-central-1.amazonaws.com/..."
    }
  ],
  "submittedAt": "2024-01-15T10:00:00.000Z",
  "contact": {
    "id": "uuid",
    "email": "kontakt@example.com",
    "firstName": "Max",
    "lastName": "Mustermann",
    "phoneNumber": "+491234567890"
  }
}

Hinweise zum files-Array:

  • Das files-Array bietet direkten Zugriff auf alle hochgeladenen Dateien mit vorsignierten Download-URLs — kein JSON-Parsing nötig
  • downloadUrl ist eine temporäre vorsignierte URL, die 7 Tage nach dem Webhook-Versand gültig ist
  • fieldName zeigt an, über welches Formularfeld die Datei hochgeladen wurde
  • Wenn keine Dateien hochgeladen wurden, ist files ein leeres Array
  • Dieselben Dateidaten sind auch in submissionData als JSON-String eingebettet, aber das Top-Level files-Array ist der empfohlene Weg, um in Automatisierungstools wie Make oder Zapier auf Dateien zuzugreifen

Neuer Mitarbeiter Payload (new_employee)

{
  "webhookType": "new_employee",
  "id": "uuid",
  "email": "user@example.com",
  "givenName": "John",
  "familyName": "Doe",
  "fullName": "John Doe",
  "companyId": "uuid",
  "userType": "USER | ADMIN | COMPANY_ADMIN",
  "createdAt": "2024-01-15T10:00:00.000Z"
}

Terminverschiebung Payload (booking_rescheduled)

{
  "webhookType": "booking_rescheduled",
  "oldStartDate": "2024-01-15T10:00:00.000Z",
  "rescheduledAppointment": {
    "id": "uuid",
    "secret": "string",
    "start": "2024-01-16T14:00:00.000Z",
    "end": "2024-01-16T15:00:00.000Z",
    "location": "string | null",
    "isCancelled": false,
    "rescheduledAt": "2024-01-15T12:00:00.000Z",
    "meetingInfo": { },
    "cancel": { },
    "ics": "string",
    "note": "string | null",
    "hostingInfo": { },
    "attendees": [
      {
        "id": "uuid",
        "email": "attendee@example.com",
        "phone": "+1234567890",
        "firstname": "John",
        "lastname": "Doe",
        "fullname": "John Doe",
        "timezone": "Europe/Berlin",
        "language": "en",
        "notes": "string | null",
        "attendeeEnrichment": { }
      }
    ],
    "hosts": [
      {
        "id": "uuid",
        "email": "host@example.com",
        "givenName": "Jane",
        "familyName": "Smith",
        "fullName": "Jane Smith",
        "slug": "jane-smith",
        "picture": "https://..."
      }
    ],
    "hostIds": ["uuid"],
    "meetingType": {
      "id": "uuid",
      "slug": "30-min-call",
      "meetingInfo": { },
      "meetingOptions": { },
      "crmOptions": { }
    },
    "meetingTypeId": "uuid",
    "paymentId": "string | null",
    "companyId": "uuid",
    "createdAt": "2024-01-14T09:00:00.000Z",
    "updatedAt": "2024-01-15T12:00:00.000Z"
  }
}

Wichtiger Unterschied: booking_rescheduled enthält oldStartDate auf der obersten Ebene und verschachtelt die Termindaten unter rescheduledAppointment, während booking_created und booking_cancelled die Termindaten direkt auf der Stammebene senden.

FAQ

Kann ich Webhooks für bestimmte Terminseiten filtern?

Webhooks werden für alle Terminseiten in deinem Konto ausgelöst. Wenn du nur bestimmte Meetings verarbeiten möchtest, kannst du diese in deinem System mit den meetingType.id-Informationen im Payload filtern.

Kann ich die Felder umbenennen oder auf die Namen meines Tools mappen?

Nein. meetergo sendet immer die oben dokumentierte Payload-Struktur, und in meetergo gibt es kein Feld-Mapping. Wenn dein Zielsystem andere Schlüssel erwartet - etwa ein CRM, das first_name verlangt, während meetergo firstname sendet - schalte eine Zwischenstation davor: Make, Zapier oder n8n benennen Felder in einem Modul um, oder dein eigener Endpunkt übersetzt das JSON, bevor er es weiterreicht.

Mein Webhook ist aus der Liste verschwunden. Warum?

Dein Endpunkt hat mit 410 Gone geantwortet, deshalb hat meetergo das Abo entfernt. Make und Zapier antworten dauerhaft mit 410, sobald das Szenario oder der Zap hinter dieser URL gelöscht, deaktiviert oder neu aufgebaut wurde - auch nach einer erneuten Autorisierung der Verbindung. Lege den Webhook mit der URL neu an, die das aktuelle Szenario anzeigt.

Versucht meetergo einen fehlgeschlagenen Webhook erneut zu senden?

Nein. Jedes Ereignis wird genau einmal gesendet. Wenn dein Endpunkt nicht erreichbar ist, in einen Timeout läuft oder einen Fehler zurückgibt, ist die Benachrichtigung verloren und lässt sich aus meetergo nicht erneut senden. Wenn du eine garantierte Zustellung brauchst, empfange den Webhook in einem Tool, das selbst puffert und wiederholt (Make, Zapier, n8n), und halte diesen Endpunkt schnell und dauerhaft erreichbar.

Wo sehe ich, welche Webhooks meetergo gesendet hat?

meetergo führt kein Zustellprotokoll für Webhooks. Nutze die Historie deines empfangenden Tools - den Ausführungsverlauf in Make, die Zap-Historie in Zapier, die Executions-Liste in n8n oder die Logs deines eigenen Servers.

Wie schnell werden Webhooks nach einem Ereignis gesendet?

Webhooks werden sofort gesendet, wenn das Ereignis eintritt. In den meisten Fällen erhält dein System die Benachrichtigung innerhalb von Sekunden.

Benötige ich einen Entwickler, um Webhooks einzurichten?

Das Einrichten des Webhooks in meetergo ist unkompliziert, aber du benötigst technische Unterstützung, um den empfangenden Endpunkt zu erstellen, der die Benachrichtigungen verarbeitet. Wenn du eine Integrationsplattform wie Zapier, Make oder n8n verwendest, bringen diese fertige Webhook-Empfänger mit, sodass du nichts programmieren musst.

Wie viele Webhooks kann ich anlegen?

Sechs pro Account. Dieses Limit zählt auch Webhooks mit, die über Zapier und Make angelegt wurden, denn jeder verbundene Trigger registriert ein eigenes Abo. Wenn das Anlegen mit der Meldung zum erreichten Webhook-Limit fehlschlägt, öffne den Webhooks-Dialog und lösche die Einträge, die du nicht mehr zuordnen kannst.

Brauche ich einen Webhook, um Buchungen in mein E-Mail-Marketing-Tool zu bekommen?

Nicht unbedingt. KlickTipp bekommt Kontaktdaten plus Terminbeginn, Buchungsdatum, Terminname, Ort sowie Storno- und Umbuchungslink direkt, Brevo bekommt die Kontaktdaten. Ein Webhook lohnt sich, wenn du Antworten aus dem Buchungsformular, ein Storno-Event oder ein Tool ohne eingebaute Integration brauchst.

Verwandte Artikel

War dieser Artikel hilfreich?

Lass uns wissen, ob dieser Artikel deine Fragen beantwortet hat.