Webhooks and Integrations
Hi.Events webhooks notify your own systems the moment something happens in your account, like a new order, a check-in or a cancellation. They push changes to you. To pull data on your own schedule, or to make changes from another tool, use API keys instead. Most integrations use both.
How to Get There
Webhooks can be set up at two levels:
- Event level: open your event and click Webhooks in the left sidebar (under Integrations)
- Organizer level: from the organizer dashboard, click Webhooks in the left sidebar (under Integrations)
An organizer-level webhook fires for every event belonging to that organizer. Event-level webhooks fire only for that one event, and they can’t subscribe to Event Created, Event Updated or Event Archived. Those are only available on organizer-level webhooks.
The Webhooks page is only shown to team members who can see financials, because webhooks send order totals. If you can’t find it, ask an admin on your account. See Managing Your Team.
Creating a Webhook
- Click Add Webhook
- Enter the Webhook URL: the address on your server that will receive the webhook
- Choose the Event Types that should trigger it
- Set the Status: Enabled (sends notifications) or Paused (doesn’t)
- Click Create Webhook
Hi.Events then shows the Webhook Signing Secret. This is the only time you’ll see it, so copy it and store it somewhere safe.
Event Types
In Event Types you pick them by name. The event_type value is what arrives in the request.
| Name | event_type | Sent when |
|---|---|---|
| Order Created | order.created | A new order is placed |
| Order Updated | order.updated | An order is changed |
| Order Marked as Paid | order.marked_as_paid | An order is marked as paid |
| Order Refunded | order.refunded | An order is refunded |
| Order Cancelled | order.cancelled | An order is cancelled |
| Attendee Created | attendee.created | A new attendee is added |
| Attendee Updated | attendee.updated | An attendee is changed |
| Attendee Cancelled | attendee.cancelled | An attendee is cancelled |
| Product Created | product.created | A product is created |
| Product Updated | product.updated | A product is changed |
| Product Deleted | product.deleted | A product is deleted |
| Event Created | event.created | An event is created (organizer level only) |
| Event Updated | event.updated | An event is changed (organizer level only) |
| Event Archived | event.archived | An event is archived (organizer level only) |
| Check-in Created | checkin.created | An attendee is checked in |
| Check-in Deleted | checkin.deleted | A check-in is undone |
| Occurrence Cancelled | occurrence.cancelled | A date is cancelled on a recurring event |
When an order is created or cancelled, a webhook that’s also subscribed to Attendee Created or Attendee Cancelled gets an attendee.created or attendee.cancelled webhook for each attendee on it.
What Hi.Events Sends
When a matching event happens, Hi.Events sends a POST request to your URL with a JSON body:
{
"event_type": "order.created",
"event_sent_at": "2025-01-01T12:00:00+00:00",
"payload": { }
}payload holds a single resource for whatever triggered the webhook. It isn’t a bundle of everything related to the event: an order.* payload includes the order with its items and attendees, but checkin.created only carries the check-in and its attendee, and product.* only carries the product. The exact fields of each payload are listed in the API reference (My Profile → API keys → API reference).
Box office sales made without a buyer email have email set to null on the order.
Verifying Webhooks
Every request Hi.Events sends is signed with the webhook’s secret. The signature is in the Signature header: a hex-encoded HMAC-SHA256 hash of the raw request body, made with your secret. Requests also carry an X-Webhook-Source: Hi.Events header.
Recompute the signature from the raw request body and your secret, and compare it with the header before trusting a payload.
Delivery, Retries and Logs
- Hi.Events sends each webhook once, and the attempt times out after 3 seconds
- A delivery that fails or times out isn’t sent again, so check the logs if something seems to be missing
The webhooks table shows the Last Response code and Last Triggered time for each webhook. To see recent deliveries, open the ⋮ menu and choose View logs. The same menu has Edit webhook and Delete webhook.
Use Cases
- CRM integration: add new attendees to your CRM as they register
- Slack notifications: post a message when a ticket is sold
- Analytics: feed live sales data to your own dashboard
- Fulfilment: start shipping or preparation when merchandise is bought
- Zapier and Make: send webhooks to a Zapier or Make webhook trigger to start an automation, and use an API key in their HTTP step when the automation needs to read or change something in Hi.Events
Tips
- Test your webhook URL with a tool like webhook.site before going live
- Respond quickly. Your server has 3 seconds before the attempt counts as failed, so queue slow work instead of doing it while Hi.Events waits
- Always verify the
Signatureheader before acting on a payload - Use event-level webhooks for event-specific integrations and organizer-level webhooks for anything that spans events
- Webhooks can be missed if your server is down or slow to respond. Use the API to catch up, for example by fetching orders since the last one you saw
Last updated