By setting up a web hook, TimeTap can send you notifications anytime your clients or staff members book an appointment for your business.
Our Notification service consists of a 3-step process:
- A client or staff member books an appointment
- TimeTap posts the notification with the appointment information as a JSON object to your webserver endpoint
- Your webserver application processes the JSON object
Requirements:
- A webserver running an endpoint application capable of receiving a POST request
In this guide, we'll cover:
Example Appointment Object
When you're endpoint is setup, simply contact us to provide the URL, and we'll set up the POST.
Here's an abbreviated example of what the Appointment JSON object looks like:
Appointment JSON Object
{ "calendarid":10390617, "businessId":20398, "startTime":800, "endTime":845, "clientStartTime":800, "clientEndTime":845, "reason":{ "reasonId":96439, "businessId":20398, "visitMinutes":45, "reasonDesc":"Service3" }, "client":{ "clientId":2530974, "firstName":"Jon", "lastName":"Snow", "emailAddress":"jsnow@castleblack.mil", "city":"Victoria", "notes":"Jon would like a notification before his appointment.", }, "staff":{ "professionalId" : 42441, "businessId":20398, "userName":"DrJones2", "email": "djones2@marshallcollege.edu" "timeZoneCode":{ "timeZoneId":78, "timeZoneCode":"America/New_York", "timeZoneDesc":"America/New_York", }, "location":{ "locationId":29945, "locationName":"MyOffice", "businessId":20398, "locationType":"Office" }, "fields": [ { "required" : false, "serviceIds" : [ 107292 ], "userDefinedField" : false, "dataType" : "AREA", "active" : true, "code" : "UDF", "visibleOnScheduler" : true, "validationRegex" : null, "sortOrder" : 21, "businessId" : 23144, "hint" : null, "filterByService" : true, "oldFieldIds" : null, "createdUser" : "mpbtest138", "labelTag" : "%CUSTOM_FIELD_107740_LABEL%", "modifiedDate" : 1488575155000, "tagName" : null, "modifiedUser" : "MPBTEST138", "label" : "Comments", "createdDate" : 1488394066000, "value" : "These are comments ", "extendedValue" : "These are comments ", "validationError" : null, "fieldValues" : null, "visible" : true, "schedulerPreferenceFieldDefnId" : 107740, "mode" : "APPT", "valueTag" : "%CUSTOM_FIELD_107740%" }, { "required" : null, "serviceIds" : null, "userDefinedField" : true, "dataType" : "TXT", "active" : true, "code" : "UDF", "visibleOnScheduler" : true, "validationRegex" : null, "sortOrder" : 22, "businessId" : 23144, "hint" : null, "filterByService" : false, "oldFieldIds" : null, "createdUser" : "MPBTEST138", "labelTag" : "%CUSTOM_FIELD_108594_LABEL%", "modifiedDate" : 1488575322000, "tagName" : null, "modifiedUser" : "MPBTEST138", "label" : "My Custom Field", "createdDate" : 1488575322000, "value" : "Custom field value", "extendedValue" : "Custom field value", "validationError" : null, "fieldValues" : null, "visible" : true, "schedulerPreferenceFieldDefnId" : 108594, "mode" : "APPT", "valueTag" : "%CUSTOM_FIELD_108594%" } ], }
Object Values
Appointment objects have several top-level properties, whose types can be viewed here: Appointment Object Values
In addition, appointment objects also have nested child objects for Reasons (Service or Class), Client, Staff, Location, and Custom Fields.
Reason Object
Reason object value types can be found here: Reason Object Value Types
"reason" : { "modifiedUser" : "MPBTEST138", "internalDisplayName" : "Service 1", "serviceLocations" : null, "reasonId" : 107292, "apptHrMin" : null, "emailInstructions2" : null, "taxable" : false, "professionalServiceList" : null, "businessId" : 23144, "rescheduleType" : null, "maxWaitListPerClass" : null, "visitMinutes" : 60, "customWorkSchedule" : 0, "reasonType" : "SERVICE", "numberSessions" : null, "bufferBefore" : null, "personal" : false, "privateUrl" : null, "embedCode" : null, "screeningQuestion" : null, "emailInstructions" : null, "currencySymbol" : null, "apptDayMax" : null, "professionalId" : null, "durationList" : null, "quotaType" : null, "allowOnline" : true, "allowWaitList" : false, "active" : true, "price" : null, "color" : null, "discountedPrice" : null, "sortWeight" : 0, "customFieldForm" : null, "bufferAfter" : null, "internalName" : null, "quotaFilled" : null, "depositAmount" : null, "allowPrePay" : false, "reasonDetail" : null, "quota" : null, "reasonDesc" : "Service 1" }