Go to websiteGo to dashboard
Topics

Webhook events

Which events there are, when they're triggered and what every delivery contains.

For each endpoint you choose which events it hears about. Every event brings the object it's about, such as the order, the event or the voucher, exactly as the API returns it. So there's nothing left to look up afterwards.

Choose events

When you add or edit an endpoint, the events are grouped by area, each with its type underneath. With All events, the endpoint gets all of them, including ones we add later. Pick individual events if your system only handles some of them.

Event selection grouped by area: orders, tickets, events, vouchers, waitlist and guest list, each with its type

All events

EventTypeWhen
Order placed with bank transferorder.payment_pendingSomeone ordered with bank transfer. The order is waiting for the money and the tickets are reserved.
Order paidorder.paidAn order was paid or was free, and its tickets are issued. For bank transfer, it comes as soon as you confirm the payment.
Bank transfer deadline passedorder.payment_expiredA bank transfer order passed its deadline without payment. The tickets are back on sale.
Order changedorder.updatedAn order changed: some tickets cancelled, rebooked, buyer details or a name on a ticket edited, tickets offered for resale or withdrawn, or a chargeback.
Order cancelledorder.cancelledAn order was cancelled completely, including an unpaid bank transfer order that you ended.
Order refundedorder.refundedA refund is complete, partial ones too: at the payment provider or, for bank transfer, as soon as you tick it off in the order.
Ticket checked in or extra redeemedticket.checked_inA ticket was accepted at the entrance or an extra was redeemed. Rejected scans don't trigger anything.
Event publishedevent.publishedAn event was published and is on sale.
Event changedevent.updatedA published event changed, including when a date was rescheduled or cancelled.
Event cancelledevent.cancelledAn event was cancelled.
Voucher bought or issuedvoucher.createdA voucher was bought in the shop or issued in the dashboard.
Voucher redeemedvoucher.redeemedSomeone paid with a voucher.
Joined the waitlistwaitlist.joinedSomeone confirmed their spot on a waitlist.
Guest added to the guest listguest.addedSomeone was put on a guest list and their free tickets are issued.
Invoice or credit note issuedinvoice.issuedAn invoice or credit note to a business customer was issued (kind). PDF and XML are ready to download.
Invoice cancelledinvoice.cancelledAn invoice was cancelled by a credit note, which you find in correctedBy.

On top of these there's webhook.test, which you trigger with Send test event on the endpoint's page.

What a delivery contains

Every delivery is a POST request with JSON. The structure is always the same, shortened here:

{
  "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", … },
      …
    }
  }
}
FieldMeaning
idUnique ID of the event. It stays the same on a retry, which is how you spot duplicate deliveries.
typeThe event, e.g. order.paid
createdAtWhen the event happened
workspaceThe workspace it comes from. Handy if one endpoint receives events from several workspaces.
data.objectThe object as the API returns it, including buyers' names and email addresses

What's in data.object depends on the event:

EventsObject (data.object.object)
order.*order: the order with its lines, tickets, amounts and buyer
event.*event: the event with its dates and ticket types
ticket.checked_incheck_in: the scan with ticket, order number, area and device
voucher.*voucher: the voucher
waitlist.joinedwaitlist_entry: the waitlist entry
guest.addedguest: the guest on the guest list
invoice.*invoice: the invoice or credit note with recipient, lines and amounts

All fields and their types are in the API reference under "Webhooks".

Every request also carries these headers:

HeaderContent
TickySmart-SignatureThe signature to check, see Secure your webhooks
TickySmart-Event-IdSame as id in the body
TickySmart-Event-TypeSame as type in the body
TickySmart-Delivery-IdID of this delivery, as in the delivery log
User-AgentTickySmart-Webhooks/1.0

Good to know

  • Order: Events can arrive in a different order than they happened, especially after retries. Compare createdAt if you need to.
  • State of the object: data.object shows the state at the moment we sent the event, a few seconds after the change. A retry sends the same content again. If you need the latest state, fetch the object through the API.
  • New fields: We add fields and events without changing the version. Ignore anything your system doesn't recognise.

Common questions

Which event do I need for new buyers in my CRM?

order.paid. It arrives for every completed order, free ones included, and brings the buyer's name and email address. There's no separate event for customers.

Why does bank transfer send order.payment_pending first and order.paid later?

With bank transfer, the order is only reserved at first. order.paid comes once you confirm the payment in the dashboard. If no money arrives, order.payment_expired follows when the deadline passes.

Do I get order.refunded for a partial refund?

Yes. If someone cancels some of their tickets, order.updated comes first. As soon as the money is back, order.refunded follows, once per refund. What's already been refunded is in the order under refunds and refunded.