Setting up Webhooks

Learn how to easily integrate and automate notifications by setting up webhooks for your website.

Webhooks are a powerful tool that allows you to send data to third-party systems whenever certain events occur within TripWorks. Once activated, these webhooks will automatically post data to the endpoint you've chosen, allowing you to integrate the TripWorks booking system seamlessly with other systems, platforms, and workflows. The destination for this data is entirely up to you, giving you the flexibility to connect with CRM systems, accounting tools, marketing platforms, and more.

Available Webhook Events

  • Trip Created — fires when a new trip is created (draft or reserved)
  • Trip Reserved — fires when a trip moves to reserved status (payment received)
  • Trip Updated — fires when trip details change (date, time, guest count, custom fields, notes)
  • Trip Cancelled — fires when a trip is cancelled
  • Booking Updated — fires when a booking within a trip is modified (guest added/removed, check-in, status change)
  • Addon Updated — fires when an add-on or product is added to or removed from a booking
  • Payment / Refund — fires on any payment or refund
  • Waiver Signed — fires when a customer signs a waiver
  • Payout — fires when a payout is sent to your bank account
  • Customer Add — fires when a new customer profile is created
  • Customer Update — fires when a customer profile is modified

Customer Portal URLs

Most trip-related webhook payloads include a customer_portal_url field — a direct, login-free link to the TripWorks customer portal for that reservation. These URLs are ready to embed in emails, SMS messages, or any downstream system that needs to give a customer access to their booking.

The portal URL appears at three levels within the payload, each linking to a different scope:

Level Where it appears in the payload What it links to
Trip customer_portal_url on the root trip object The full reservation overview — all activities, all guests, totals, and waiver status for the entire trip
Trip Order customer_portal_url on each item in tripOrders[] The portal filtered to a specific activity within the trip — most relevant when a reservation covers multiple activities booked together
Booking customer_portal_url on each item in tripOrders[].bookings[] The portal filtered to an individual guest's booking — useful for per-guest waiver follow-ups, check-in links, or post-trip communications

Portal URLs are included in: Trip Created, Trip Reserved, Trip Updated, Trip Cancelled, Booking Updated, Addon Updated, and Payment / Refund events. They are not included in Waiver Signed, Payout, Customer Add, or Customer Update events.

Getting Started with Webhooks

To begin setting up webhooks in TripWorks, follow these steps:

  1. Click the gear icon in the top menu.
  2. Under Integrations, select Webhooks.

On the Webhooks page, you can create a webhook destination for various types of events.

Types of Webhook Events

Trip Created Event

A webhook can be triggered whenever a new trip is created, regardless of whether it's in a draft or reserved status. This is useful for capturing data on new bookings, including abandoned carts. The webhook payload will include a variety of detailed information about the complete trip, including activity name, guest information, custom fields, session information (including marketing landing page, geo coordinates, IP address, browser time, viewport), check-in status, amounts paid and due, addons, and products.

Webhook Payload Example

{"event":"trip_created","tripOrders":[{"created_at":"2026-02-26T00:05:34+00:00","experience_total":20000,"addons_total":3000,"products_total":0,"pickup_total":0,"promo_code_total":0,"voucher_code_discount":0,"total_sales":23000,"bookings":[{"booking_resources":[],"id":5201661,"created_at":"2026-02-26T00:05:34+00:00","status":{"id":15,"name":"Not Checked In"},"customer":{"full_name":"Jim Smith","phone_format_intl":"+1 201-555-1212","first_name":"Jim","last_name":"Smith","email":"test-q46ye@gmail.com","phone":"+12015551212","phone_format_164":"+12015551212"},"experience_customer_type":{"id":195,"name":"Adult","description":"price per person"},"custom_field_values":[],"addons":[{"id":371942,"experience_addon":{"id":31,"title":"Ultimate Hike"},"name":"La caminata definitiva","price":25000},{"id":371943,"experience_addon":{"id":6515,"title":"Lunch"},"name":"Lunch","price":1000}],"is_complimentary":false}],"experience":{"internal_name":"Hiking","id":105,"name":"Hiking","duration":480,"color":"#4e5dc1"},"experience_timeslot":{"label":"11:00 AM","start_time":"2026-02-28T11:00:00+00:00","end_time":"2026-02-28T19:00:00+00:00"},"addons":[],"status":{"id":1,"slug":"booked","name":"Booked"},"pax_count":1,"addons_cnt":2}],"custom_field_values":[{"custom_field":{"internal_name":"Team Color"}},{"custom_field":{"internal_name":"Shirts Needed"}},{"custom_field":{"internal_name":"Club Kay"},"bit_value":false},{"custom_field":{"internal_name":"Club Kay"},"bit_value":false}],"display_name":"Jim Smith","session_ip_address":"74.115.209.58","id":2088161,"confirmation_code":"ZHXZ-MTQA","created_at":"2026-02-26T00:05:34+00:00","reserved_at":"2026-02-26T00:05:57+00:00","sale_date":"2026-02-28T00:00:00+00:00","customer":{"full_name":"Jim Smith","phone_format_intl":"+1 201-555-1212","first_name":"Jim","last_name":"Smith","email":"test-q46ye@gmail.com","phone":"+12015551212","phone_format_164":"+12015551212"},"payments":[],"subtotal":23000,"total":24200,"paid":0,"due":24200,"created_by_user_avatar":{"full_name":"Jim Jones","abbrev_name":"Jim J.","photo_url_full_path":"https://cdn-images.tripworks.com/tenants/profiles/3279dbe7be00f496044307.jpg","id":58,"first_name":"Jim","last_name":"Jones","is_tripworks_managed":true},"trip_method":{"name":"Walkup","color":"#3498eb","slug":"walkup"},"reseller_commission":0,"session_browser_version":"145.0.0.0","session_browser_name":"Chrome","session_browser_user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36","session_browser_os":"Apple","session_latitude":"32.79670000","session_longitude":"-117.13670000","session_location_label":"San Diego, California US","total_sales":24200,"products_cnt":0,"addons_cnt":2,"trip_status":{"slug":"draft","name":"Draft"}}

Trip Reserved Event

Set up a webhook to send data when a trip moves to the reserved status, typically when a payment is made. This is great for tracking confirmed reservations and can help keep your reservation system up-to-date. The webhook payload will include a variety of detailed information about the complete trip, including activity name, guest information, custom fields, check-in status, amounts paid and due, addons, and products.

Webhook Payload Example

{"event":"trip_reserved","tripOrders":[{"created_at":"2026-02-26T00:05:34+00:00","experience_total":20000,"addons_total":3000,"products_total":0,"pickup_total":0,"promo_code_total":0,"voucher_code_discount":0,"total_sales":23000,"bookings":[{"booking_resources":[],"id":5201661,"created_at":"2026-02-26T00:05:34+00:00","status":{"id":15,"name":"Not Checked In"},"customer":{"full_name":"Jim Smith","phone_format_intl":"+1 201-555-1212","first_name":"Jim","last_name":"Smith","email":"test-q46ye@gmail.com","phone":"+12015551212","phone_format_164":"+12015551212"},"experience_customer_type":{"id":195,"name":"Adult","description":"price per person"},"custom_field_values":[],"addons":[{"id":371942,"experience_addon":{"id":31,"title":"Ultimate Hike"},"name":"La caminata definitiva","price":25000},{"id":371943,"experience_addon":{"id":6515,"title":"Lunch"},"name":"Lunch","price":1000}],"is_complimentary":false}],"experience":{"internal_name":"Hiking","id":105,"name":"Hiking","duration":480,"color":"#4e5dc1"},"experience_timeslot":{"label":"11:00 AM","start_time":"2026-02-28T11:00:00+00:00","end_time":"2026-02-28T19:00:00+00:00"},"addons":[],"status":{"id":1,"slug":"booked","name":"Booked"},"pax_count":1,"addons_cnt":2}],"custom_field_values":[{"custom_field":{"internal_name":"Team Color"}},{"custom_field":{"internal_name":"Shirts Needed"}},{"custom_field":{"internal_name":"Club Kay"},"bit_value":false},{"custom_field":{"internal_name":"Club Kay"},"bit_value":false}],"display_name":"Jim Smith","session_ip_address":"74.115.209.58","id":2088161,"confirmation_code":"ZHXZ-MTQA","created_at":"2026-02-26T00:05:34+00:00","reserved_at":"2026-02-26T00:05:57+00:00","sale_date":"2026-02-28T00:00:00+00:00","customer":{"full_name":"Jim Smith","phone_format_intl":"+1 201-555-1212","first_name":"Jim","last_name":"Smith","email":"test-q46ye@gmail.com","phone":"+12015551212","phone_format_164":"+12015551212"},"payments":[],"subtotal":23000,"total":24200,"paid":0,"due":24200,"created_by_user_avatar":{"full_name":"Jim Jones","abbrev_name":"Jim J.","photo_url_full_path":"https://cdn-images.tripworks.com/tenants/profiles/3279dbe7be00f496044307.jpg","id":58,"first_name":"Jim","last_name":"Jones","is_tripworks_managed":true},"trip_method":{"name":"Walkup","color":"#3498eb","slug":"walkup"},"reseller_commission":0,"session_browser_version":"145.0.0.0","session_browser_name":"Chrome","session_browser_user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36","session_browser_os":"Apple","session_latitude":"32.79670000","session_longitude":"-117.13670000","session_location_label":"San Diego, California US","total_sales":24200,"products_cnt":0,"addons_cnt":2,"trip_status":{"slug":"reserved","name":"Reserved"}}

Trip Updated Event

This webhook fires whenever a trip's details are changed after the initial booking. Changes that trigger this event include date or time modifications, guest count updates, custom field edits, and note changes. The payload contains the full updated trip object, so your connected systems always have the latest information without needing to poll the API.

Common use cases:

  • Keeping a CRM or customer communication tool in sync when a trip is rescheduled
  • Updating calendar or scheduling tools when guest counts change
  • Logging changes in an external audit system

Trip Cancelled Event

This webhook fires when a trip is cancelled. The payload includes the full trip object along with the cancellation status, so your external systems can immediately reflect the change. Without this webhook, cancellations are invisible to connected tools unless they actively poll for updates.

Common use cases:

  • Triggering a cancellation workflow in Zapier (e.g., send a follow-up survey or remove from a calendar)
  • Updating a CRM contact record to reflect that a booking was cancelled
  • Syncing with accounting or refund tracking systems

Booking Updated Event

This webhook fires when an individual booking within a trip is modified. A trip can contain multiple bookings (one per guest), and this event captures changes at that level — such as a guest being added or removed, a check-in status change, or a booking status update.

Common use cases:

  • Tracking check-in activity in real time for operations dashboards
  • Syncing guest-level changes with a CRM or marketing platform
  • Logging individual booking modifications for compliance or audit purposes

Addon Updated Event

This webhook fires when an add-on or product is added to or removed from a booking after the original reservation. The payload includes the full trip object so you can see exactly which add-ons are now attached. This is especially useful for photo partner integrations (like PicThrive or Souvenir Picks) that need to detect when a photo package is purchased post-booking.

Common use cases:

  • Detecting when a photo pack or merchandise add-on is purchased after the initial booking
  • Syncing add-on revenue with accounting tools
  • Triggering fulfillment workflows when a product is added to an existing reservation

Payment / Refund Event

Use this webhook to send data every time a payment is processed. This is especially helpful if you accept multiple partial payments for a single trip, allowing you to keep your accounting system in sync. The webhook payload will include a variety of detailed information about the payment, including payment type and amounts; notes, payment direction, fees, and tips.

Webhook Payload Example

{"event":"payment_created","id":1277113,"created_at":"2026-02-26T00:20:05+00:00","amount":5000,"status":{"id":6,"name":"Successful"},"type":{"id":1,"name":"Cash"},"is_card_present":false,"direction":{"id":1,"name":"Payment"},"net_amount":5000,"trip":{"tripOrders":[{"created_at":"2026-02-11T19:10:21+00:00","experience_total":35000,"addons_total":61000,"products_total":0,"pickup_total":0,"promo_code_total":0,"voucher_code_discount":0,"total_sales":96000,"bookings":[{"booking_resources":[],"id":5197287,"created_at":"2026-02-11T19:10:21+00:00","status":{"id":15,"name":"Not Checked In"},"customer":{"full_name":"James Smith","phone_format_intl":"+1 321-321-1231","first_name":"James","last_name":"Smith","email":"jamessmithy123@yahoo.com","phone":"3213211231                         ","phone_format_164":"+13213211231123131"},"experience_customer_type":{"id":194,"name":"Adult","description":"Ages 18-99"},"custom_field_values":[{"custom_field":{"internal_name":"Shirt Size"}},{"custom_field":{"internal_name":"Fishing License"}}],"addons":[{"id":371935,"experience_addon":{"id":1066,"title":"Charcuterie Board"},"name":"Charcuterie Board","price":60000}],"is_complimentary":false}],"experience":{"internal_name":"Swimming","id":104,"name":"Swimming","duration":240,"color":"#0081a8"},"experience_timeslot":{"label":"10:00 AM","start_time":"2026-02-20T10:00:00+00:00","end_time":"2026-02-20T14:00:00+00:00"},"addons":[],"status":{"id":1,"slug":"booked","name":"Booked"},"pax_count":7,"addons_cnt":1}],"custom_field_values":[{"custom_field":{"internal_name":"Team Color"}},{"custom_field":{"internal_name":"Shirts Needed"}}],"display_name":"James Smith","session_ip_address":"151.204.156.173","id":2086899,"confirmation_code":"WRYW-DHHJ","created_at":"2026-02-11T19:10:21+00:00","reserved_at":"2026-02-26T00:20:05+00:00","sale_date":"2026-02-20T00:00:00+00:00","customer":{"full_name":"James Smith","phone_format_intl":"+1 321-321-1231","first_name":"James","last_name":"Smith","email":"jamessmithy123@yahoo.com","phone":"3213211231                         ","phone_format_164":"+13213211231123131"},"subtotal":96000,"total":106377,"paid":5000,"due":101377,"created_by_user_avatar":{"full_name":"Ben Kreisberg","abbrev_name":"Ben K.","photo_url_full_path":"https://cdn-images.tripworks.com/tenants/profiles/655d223ce3419834933292.jpeg","id":29069,"first_name":"Ben","last_name":"Kreisberg","is_tripworks_managed":true},"trip_method":{"name":"Walkup","color":"#3498eb","slug":"walkup"},"reseller_commission":0,"session_browser_version":"144.0.0.0","session_browser_name":"Chrome","session_browser_user_agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36","session_browser_os":"Apple","session_latitude":"40.87770000","session_longitude":"-73.90800000","session_location_label":"The Bronx, New York US","total_sales":105360,"products_cnt":0,"addons_cnt":1,"trip_status":{"slug":"reserved","name":"Reserved"}},"owner":{"full_name":"Aaron Fessler","abbrev_name":"Aaron F.","photo_url_full_path":"https://cdn-images.tripworks.com/tenants/profiles/6079dbe7be00f496044307.jpg","id":58,"first_name":"Aaron","last_name":"Fessler","is_tripworks_managed":true},"currency":"USD","tip":0}

Waiver Event

Trigger a webhook whenever a customer signs a waiver. This can include the customer's details, their signature, and a PDF of the signed waiver, making it ideal for compliance and record-keeping.

Webhook Payload Example

{"event":"waiver_signed","full_name":"Another One","experience_name":"Swimming","id":1081786,"bookings":[{"booking_resources":[],"id":5197289,"created_at":"2026-02-11T19:10:21+00:00","status":{"id":15,"name":"Not Checked In"},"customer":{"full_name":"Another One","first_name":"Another","last_name":"One","email":"another@one.com","phone":"+12015551212","bookings":[],"phone_format_164":"+12015551212"},"experience_customer_type":{"id":194,"name":"Adult","description":"Ages 18-99"},"custom_field_values":[[],[]],"addons":[],"is_complimentary":false}],"created_at":"2026-02-26T00:27:50+00:00","waiver_url":"v7ucqz88rvgd","customer":{"full_name":"Another One","first_name":"Another","last_name":"One","email":"another@one.com","phone":"+12015551212","bookings":[{"booking_resources":[],"id":5197289,"created_at":"2026-02-11T19:10:21+00:00","status":{"id":15,"name":"Not Checked In"},"experience_customer_type":{"id":194,"name":"Adult","description":"Ages 18-99"},"custom_field_values":[[],[]],"addons":[],"is_complimentary":false}],"phone_format_164":"+12015551212"},"waiver_type":{"id":2,"name":"Liability Waiver"},"first_name":"Another","last_name":"One","is_waiver_adult":true,"email":"another@one.com","dob":"2006-04-14T00:00:00+00:00","phone":"+12015551212","signed_pdf":"https://cdn-images.tripworks.com/tenants/profiles/demo/waivers/v7ucqz88rvgd.pdf"}

Payout Event

This webhook posts data every time a payout is sent to your connected bank account. It includes details like the payout amount, fees, and net totals, which can be very helpful for financial reconciliation.

Customer Add Event

When a new customer profile is created, this webhook can send their details to a CRM like HubSpot or Salesforce, helping you keep your marketing tools updated.

Webhook Payload Example

{"event":"customer_create","full_name":"Jim Smith","phone_format_intl":"+1 201-555-1212","phone_country_code":"US","mappable_position":"New Jersey United States","location_description":"New Jersey, USA","id":5567611,"created_at":"2026-02-26T00:20:59+00:00","code":"EQR-GCAN","first_name":"Jim","last_name":"Smith","email":"test-xaj1s@gmail.com","phone":"+12015551212","country":{},"is_vip":false,"is_opt_in":true,"timezone":"America/New_York","phone_format_164":"+12015551212"}

Customer Update Event

This webhook triggers whenever a customer's profile is modified, ensuring that any changes—like a new email address or updated name—are reflected in your connected systems.

Webhook Payload Example

{"event":"customer_update","full_name":"Jim Smith","phone_format_intl":"+1 201-555-1212","phone_country_code":"US","mappable_position":"New Jersey United States","location_description":"New Jersey, USA","id":5567611,"created_at":"2026-02-26T00:20:59+00:00","code":"EQR-GCAN","first_name":"Jim","last_name":"Smith","email":"test-xaj1s@gmail.com","phone":"+12015551212","country":{},"is_vip":false,"is_opt_in":true,"timezone":"America/New_York","phone_format_164":"+12015551212"}

Previewing Webhooks

Many free services exist which allow you to see your TripWorks post data in real time. Our favorite?

https://webhook.site

Troubleshooting Webhooks

Once you've set up your webhooks, they will take effect immediately. You can manage all webhooks easily from the same page, and there's a convenient checkbox at the bottom of the screen to turn all webhooks on or off at once.

Final Steps

Once you've set up your webhooks, they will take effect immediately. You can manage all webhooks easily from the same page, and there's a convenient checkbox at the bottom of the screen to turn all webhooks on or off at once.

If you need any help or have questions about setting up webhooks, don't hesitate to contact our support team!

Complete Event Reference

A full breakdown of every webhook event, when it fires, and what's included in the payload:

Event Fires When Payload Includes
Trip Created A new trip is created (draft or reserved) Full trip object: activity, guests, custom fields, session info, addons, products, amounts; customer_portal_url at trip / trip order / booking level
Trip Reserved A trip moves to reserved status (payment received) Full trip object: activity, guests, custom fields, check-in status, amounts paid and due; customer_portal_url at trip / trip order / booking level
Trip Updated Trip details change (date, time, guest count, custom fields, notes) Full updated trip object with all current values; customer_portal_url at trip / trip order / booking level
Trip Cancelled A trip is cancelled Full trip object including cancellation status; customer_portal_url at trip / trip order / booking level
Booking Updated A booking within a trip is modified (guest added/removed, check-in, status change) Full trip object with updated booking details; customer_portal_url at booking level
Addon Updated An add-on or product is added to or removed from a booking Full trip object with current add-on/product list; customer_portal_url at booking level
Payment / Refund Any payment or refund is processed Payment details: type, amount, direction, fees, tips; full trip object with customer_portal_url at trip / trip order / booking level
Waiver Signed A customer signs a waiver Customer details, signature, waiver type, signed PDF link
Payout A payout is sent to your bank account Payout amount, fees, net totals
Customer Add A new customer profile is created Full customer profile: name, email, phone, location, opt-in status
Customer Update A customer profile is modified Full updated customer profile