Zur WebsiteZum Dashboard
Themen

Webhook-Ereignisse

Welche Ereignisse es gibt, wann sie ausgelöst werden und was in jeder Zustellung steht.

Für jeden Endpunkt wählst du, bei welchen Ereignissen er Bescheid bekommt. Jedes Ereignis bringt das betroffene Objekt mit, also die Bestellung, das Event oder den Gutschein, genau so, wie die API es liefert. Du musst danach also nichts mehr abfragen.

Ereignisse auswählen

Beim Anlegen oder Bearbeiten eines Endpunkts stehen die Ereignisse nach Bereichen sortiert, jeweils mit ihrem Typ darunter. Mit Alle Ereignisse bekommt der Endpunkt alle, auch solche, die wir später einführen. Wähl einzelne Ereignisse, wenn dein System nur einen Teil verarbeitet.

Auswahl der Ereignisse nach Bereichen: Bestellungen, Tickets, Events, Gutscheine, Warteliste und Gästeliste, jeweils mit Typ

Alle Ereignisse

EreignisTypWann
Bestellung per Vorkasse aufgegebenorder.payment_pendingJemand hat per Vorkasse bestellt. Die Bestellung wartet auf die Überweisung, die Tickets sind reserviert.
Bestellung bezahltorder.paidEine Bestellung ist bezahlt oder war kostenlos, die Tickets sind ausgestellt. Bei Vorkasse kommt es, sobald du den Zahlungseingang bestätigst.
Vorkasse-Frist abgelaufenorder.payment_expiredDie Frist einer Vorkasse-Bestellung ist ohne Zahlung abgelaufen. Die Tickets sind wieder im Verkauf.
Bestellung geändertorder.updatedEine Bestellung hat sich geändert: einzelne Tickets storniert, umgebucht, Käuferdaten oder ein Name auf einem Ticket geändert, Tickets zum Weiterverkauf angeboten oder zurückgenommen, eine Rückbuchung.
Bestellung storniertorder.cancelledEine Bestellung ist komplett storniert, auch eine unbezahlte Vorkasse-Bestellung, die du beendet hast.
Bestellung erstattetorder.refundedEine Erstattung ist abgeschlossen, auch eine teilweise: beim Zahlungsanbieter oder, bei Vorkasse, sobald du sie in der Bestellung abgehakt hast.
Ticket eingelassen oder Extra eingelöstticket.checked_inEin Ticket wurde am Einlass angenommen oder ein Extra eingelöst. Abgelehnte Scans lösen nichts aus.
Event veröffentlichtevent.publishedEin Event ist veröffentlicht und im Verkauf.
Event geändertevent.updatedEin veröffentlichtes Event hat sich geändert, auch wenn ein Termin verschoben oder abgesagt wurde.
Event abgesagtevent.cancelledEin Event ist abgesagt.
Gutschein gekauft oder ausgestelltvoucher.createdEin Gutschein wurde im Shop gekauft oder im Dashboard ausgestellt.
Gutschein eingelöstvoucher.redeemedJemand hat mit einem Gutschein bezahlt.
Auf die Warteliste eingetragenwaitlist.joinedJemand hat seinen Platz auf einer Warteliste bestätigt.
Gast auf die Gästeliste gesetztguest.addedJemand steht jetzt auf einer Gästeliste, die kostenlosen Tickets sind ausgestellt.
Rechnung oder Rechnungskorrektur ausgestelltinvoice.issuedEine Rechnung oder Rechnungskorrektur an einen Firmenkunden ist ausgestellt (kind). PDF und XML stehen zum Download bereit.
Rechnung storniertinvoice.cancelledEine Rechnung ist mit einer Rechnungskorrektur storniert, die Korrektur steht in correctedBy.

Dazu kommt webhook.test, das du auf der Seite des Endpunkts mit Test-Ereignis senden auslöst.

Was in einer Zustellung steht

Jede Zustellung ist eine POST-Anfrage mit JSON. Der Aufbau ist immer gleich, hier gekürzt:

{
  "id": "f3d4b95c-b569-400d-87e9-d38044e27f8d",
  "object": "event",
  "type": "order.paid",
  "createdAt": "2026-10-22T00:40:00.401Z",
  "apiVersion": "v1",
  "workspace": { "id": "8d59b98c-…", "slug": "kulturhaus-am-fluss" },
  "data": {
    "object": {
      "object": "order",
      "number": "W7NT-6U4X",
      "status": "paid",
      "total": 5800,
      "currency": "EUR",
      "customer": { "name": "Katharina Lehmann", … },
      …
    }
  }
}
FeldBedeutung
idEindeutige Nummer des Ereignisses. Bei einer Wiederholung bleibt sie gleich, daran erkennst du doppelte Zustellungen.
typeDas Ereignis, z. B. order.paid
createdAtWann das Ereignis entstanden ist
workspaceDer Workspace, aus dem es kommt. Praktisch, wenn ein Endpunkt Ereignisse aus mehreren Workspaces bekommt.
data.objectDas Objekt, so wie die API es liefert, mit Namen und E-Mail-Adressen der Käufer

Was in data.object steckt, hängt vom Ereignis ab:

EreignisseObjekt (data.object.object)
order.*order: die Bestellung mit Positionen, Tickets, Beträgen und Käufer
event.*event: das Event mit Terminen und Ticketarten
ticket.checked_incheck_in: der Scan mit Ticket, Bestellnummer, Bereich und Gerät
voucher.*voucher: der Gutschein
waitlist.joinedwaitlist_entry: der Eintrag auf der Warteliste
guest.addedguest: der Gast auf der Gästeliste
invoice.*invoice: die Rechnung oder Rechnungskorrektur mit Empfänger, Positionen und Beträgen

Alle Felder mit ihren Typen findest du in der API-Doku unter „Webhooks“.

Jede Anfrage hat außerdem diese Header:

HeaderInhalt
TickySmart-SignatureDie Signatur zum Prüfen, siehe Webhooks absichern
TickySmart-Event-IdWie id im Inhalt
TickySmart-Event-TypeWie type im Inhalt
TickySmart-Delivery-IdNummer dieser Zustellung, wie im Zustell-Log
User-AgentTickySmart-Webhooks/1.0

Gut zu wissen

  • Reihenfolge: Ereignisse können in anderer Reihenfolge ankommen, als sie passiert sind, vor allem nach Wiederholungen. Vergleich bei Bedarf createdAt.
  • Stand des Objekts: data.object zeigt den Stand von dem Moment, in dem wir das Ereignis verschickt haben, wenige Sekunden nach der Änderung. Eine Wiederholung bringt denselben Inhalt noch einmal. Brauchst du den neuesten Stand, frag das Objekt über die API ab.
  • Neue Felder: Wir ergänzen Felder und Ereignisse, ohne dass sich die Version ändert. Ignoriere, was dein System nicht kennt.

Häufige Fragen

Welches Ereignis brauche ich für neue Käufer in meinem CRM?

order.paid. Es kommt bei jeder abgeschlossenen Bestellung, auch bei kostenlosen, und bringt Namen und E-Mail-Adresse des Käufers mit. Ein eigenes Ereignis für Kunden gibt es nicht.

Warum kommt bei Vorkasse zuerst order.payment_pending und später order.paid?

Bei Vorkasse ist die Bestellung zuerst nur reserviert. order.paid kommt erst, wenn du den Zahlungseingang im Dashboard bestätigst. Kommt kein Geld, folgt nach Ablauf der Frist order.payment_expired.

Bekomme ich bei einer Teilerstattung order.refunded?

Ja. Storniert jemand einzelne Tickets, kommt zuerst order.updated. Sobald das Geld zurück ist, folgt order.refunded, bei jeder Erstattung einzeln. Was schon erstattet ist, steht in der Bestellung unter refunds und refunded.