Skip to content
Start a Free 14-Day Trial

Set Up a Webhook Action

Set up a Webhook Action to respond to triggers from Apptoto. Transmit data from Apptoto to other third party tools you use

An Apptoto Webhook Action is simply a HTTP POST request made from Apptoto’s servers to an URL endpoint of your choosing. A Webhook Action can transmit data from Apptoto across the web to another system or third party product and is a powerful tool that can be used for reporting purposes or integrating services with Apptoto.

Open Settings > Integrations and click the Webhooks header, then click Add Webhook:

Click Add Webhook to create a new webhook

This opens the webhook form:

Choose the event and enter the URL for the webhook

Choose the event under When this happens, then select Send to a URL (webhook) under Do this. A URL field appears; enter the web address (e.g. an API endpoint or a Zapier URL) that Apptoto should send the details to each time the event happens. Click Create. There is no name to fill in — the webhook list shows each webhook by its event and URL.

When the event happens, Apptoto will make a HTTP POST request to the URL you entered. When this happens, the HTTP request is accompanied with information stored in a JSON format about the object the event is about, as well as an identifier that is unique to each delivery attempt.

The exact structure of this payload depends on the type of trigger that the Webhook Action corresponds to (e.g. a Webhook Action for an event-based trigger will contain information regarding an event, where a Webhook Action setup for a message-based trigger will send information relating to a message.) The exact structure of the payload for individual triggers are as follows:

Event-Based Triggers (“New event is created”, “Event is updated”, “Event is deleted”):

Section titled “Event-Based Triggers (“New event is created”, “Event is updated”, “Event is deleted”):”
JSON AttributeDescription
eventEvent object (object)
idEvent ID (integer)
calendar_idCalendar ID (integer)
calendar_nameCalendar name (string)
external_idExternal Event ID (string)
start_timeEvent start time (date)
end_timeEvent end time (date)
all_dayAll day (boolean)
titleEvent title (string)
locationEvent location (string)
contentEvent content (string)
participants(array of objects)
idParticipant ID (integer)
event_idEvent ID (integer)
display_nameParticipant display name (string)
nameParticipant name (string)
phoneParticipant phone (string)
normalized_phoneParticipant normalized phone number (string)
emailEmail for participant (string)
stateReminder state or booking state (string)
custom_dataCustom data properties for event (object)
is_deletedIndicates if event has been deleted (boolean)
apptoto_idUnique identifier for webhook (string)

Participant-Based Triggers (“Participant reminder state changed”, “Participant confirmed”, “Participant not coming”, et al.)

Section titled “Participant-Based Triggers (“Participant reminder state changed”, “Participant confirmed”, “Participant not coming”, et al.)”
JSON AttributeDescription
participantParticipant object (object)
idParticipant ID (integer)
event_idEvent ID (integer)
display_nameParticipant display name (string)
nameParticipant name (string)
phoneParticipant phone (string)
normalized_phoneParticipant normalized phone (string)
emailemail (string)
eventEvent object (object)
idEvent ID (integer)
calendar_idCalendar ID (integer)
calendar_nameCalendar name (string)
external_idEvent external ID (string)
start_timeEvent start time (date)
end_timeEvent end time (date)
all_dayEvent is all day (boolean)
titleEvent title (string)
locationEvent location (string)
contentEvent content (string)
custom_dataCustom field information (array of objects)
is_deletedEvent has been deleted (boolean)
apptoto_idUnique identifier for webhook (string)

Booking Page-Based Triggers (“Booking Page is viewed”)

Section titled “Booking Page-Based Triggers (“Booking Page is viewed”)”
JSON AttributeDescription
booking_pageBooking page object (object)
idBooking page ID (integer)
nameBooking page name (string)
urlBooking page URL (string)
apptoto_idUnique identifier for webhook (string)

Booking Request-Based Triggers (“Booking request is completed”)

Section titled “Booking Request-Based Triggers (“Booking request is completed”)”
JSON AttributeDescription
booking_requestBooking request object (object)
tokenBooking request token (string)
stateBooking request state (string)
appointment_type_tokenAppointment type token (string)
occurrence_selected_event_idEvent ID of occurrence selected (integer)
start_timeBooking start time (date)
end_timeBooking end time (date)
sign_up_pageBooking page is sign up page (boolean)
timezoneContact timezone (string)
field_dataCustom field data (object)
contact_infoContact info object (object)
nameContact name (string)
phoneContact phone (string)
emailContact email (string)
booking_page(object)
idBooking page ID (integer)
nameBooking page name (string)
urlBooking page URL (string)
apptoto_idUnique identifier for webhook (string)

Message-Based Triggers (“Message sent”, “Message received”)

Section titled “Message-Based Triggers (“Message sent”, “Message received”)”
JSON AttributeDescription
messageMessage object (object)
idMessage ID (integer)
participantParticipant object (object)
idParticipant ID (integer)
event_idEvent ID (integer)
display_nameParticipant display name (string)
nameParticipant name (string)
phoneParticipant phone (string)
normalized_phoneParticipant normalized phone (string)
emailParticipant email (string)
stateParticipant reminder/ booking state (string)
startedMessage started sending at (date)
comm_typeCommunication type (string)
last_outLast message out (date)
last_inLast message in (date)
apptoto_idUnique identifier for webhook (string)
JSON AttributeDescription
phonephone number (string)
apptoto_idUnique identifier for webhook (string)
JSON AttributeDescription
emailemail (string)
apptoto_idUnique identifier for webhook (string)

For each webhook, you can view everything it has sent by clicking the log button next to it in the webhook list:

Open a webhook's delivery log from the webhook list

The delivery log lists each delivery newest first, with its status, the number of attempts, and buttons to view the payload Apptoto sent and the response your server returned. You can filter the log by status, and retry a failed delivery with the Retry button.

See whether each delivery succeeded in the delivery log

Unlike email and text message webhooks, a webhook that sends to a URL will retry in certain circumstances.

In Apptoto, a Webhook Action is considered successful when a HTTP 200 response is returned from the server that Apptoto is doing a POST request against.

If the resource that Apptoto is posting against encounters a 500 series error (e.g. a 500 internal server error or a 502 bad gateway error), Apptoto assumes that the problem might be temporary and will retry the request again up to five attempts.

If a 400 series error is returned when the Webhook Action request is made (e.g. a 403 forbidden error or a 404 not found error), Apptoto will assume that a configuration error was made when setting up the webhook or that the webhook endpoint isn’t valid and thus the request instance should not be reattempted.

For developers, the webhook payload reference in the API documentation shows a full example payload for every event, and webhooks can also be created and managed through the Apptoto API.