Appointments
Available Appointment Times
GET /api/v2/appointments/group/<group_id>/available-times/?from_date=<YYYY-MM-DD>&to_date=<YYYY-MM-DD>
Returns a list of available appointment names for the group specified by group_id
. The from_date
and to_date
parameters specify the dates that availability will be returned for. Note that this range can be a maximum of 7 days. If you only provide a from_date
parameter, it will return availability for that date only.
Required URI Parameters
group_id
- Integer. Required. Must be the id of the group you are requesting the configuration for.
from_date
- String. Required. Date in ISO format (YYYY-MM-DD) e.g. 2019-06-11. The start of the date range to return availability for. If no
to_date
parameter is provided, availability for the date provided will be returned.
- String. Required. Date in ISO format (YYYY-MM-DD) e.g. 2019-06-11. The start of the date range to return availability for. If no
to_date
- String. Optional. Date in ISO format (YYYY-MM-DD) e.g. 2019-06-11. The end of the date range to return availability for. The range specified by
from_date
andto_date
can span a maximum of 7 days.
- String. Optional. Date in ISO format (YYYY-MM-DD) e.g. 2019-06-11. The end of the date range to return availability for. The range specified by
tour_type
- String. Optional. Either
guided
orself-guided
– specifies which tour type to get availability. Note for virtual/video tours, useguided
. If not specified, defaults to returning guided tour availability.
- String. Optional. Either
Available Appointment Times: GET response 200
success example payload
{ "available_times": [ "2019-06-19T08:00:00", "2019-06-19T08:15:00", "2019-06-19T08:30:00", "2019-06-19T08:45:00", "2019-06-19T17:45:00", "2019-06-19T18:00:00", "2019-06-19T18:15:00", "2019-06-19T18:30:00", "2019-06-19T18:45:00", "2019-06-19T19:00:00", "2019-06-19T19:15:00", "2019-06-19T19:30:00" ]}
Available Appointment Times: GET error response examples
If the provided tour type is not enabled, a 400
error response will be returned. These errors will be in an array of strings.
{ "error_type": "NotAvailable", "errors": { "tour_type": ["Tours are disabled."] }}
If the provided tour type is invalid, a 400
error response will be returned. These errors will be in an array of strings.
{ "error_type": "ValidationError", "errors": { "tour_type": ["Select a valid choice. onlineTour is not one of the available choices."] }}
If the provided end date is too far in the future, a 400
error response will be returned.
{ "error_type": "ValidationError", "errors": { "to_date": ["Date range can not exceed 7 days."] }}
If the provided to_date
is before the from_date
, a 400
error response will be returned. These errors will be in an array of strings.
{ "error_type": "ValidationError", "errors": { "to_date": ["to_date must be after from_date"] }}
If a required field such as from_date
is missing in the request, a 400
error response will be returned.
{ "error_type": "ValidationError", "errors": { "from_date": ["This field is required."] }}
If the provided data type is not valid, a 400
error response will be returned. These errors will be in an array of strings.
{ "error_type": "ValidationError", "errors": { "to_date": ["Enter a valid date."] }}
Appointment Booking
POST /api/v2/appointments/group/<group_id>/book/
This endpoint is where you will POST the actual appointment information to the server to create an appointment and either create a new prospect or modify an existing one.
Required URI Parameters
group_id
- Integer. Required. Must be the id of the group you are booking for.
Appointment Booking: POST request example payload
{ "appointment":{ "start":"2019-06-21T08:15:00", "location":"", "broker_booked":false, "is_video_tour": false, "tour_type": "guided", "platform_of_choice": "", "platform_of_choice_details": "" }, "client":{ "broker_first_name":"Jeff", "broker_last_name":"Brokerman", "broker_company":"Jeff Brokerman Brokerage", "broker_phone":"18222120422", "broker_email":"jeff@brokermanbrokerage.com", "people":[ { "first_name":"John", "last_name":"Doe", "email":"johndoe@name.com", "phone_1":"18582007006" } ], "community": 215, "building": 9685, "unit": 5689, "sms_opted_in": "marketing-enabled", "move_in_date":"2019-07-01T00:00:00", "layout":null, "price_floor":"3000", "price_ceiling":"4500", "pets":[ "20", "10" ], "discovery_source":270, "notes": "Looking for an apartment for a great prospect of mine", "neighborhoods":[ 133, 116, 1732, 108, 375, 126 ], "elevator":true, "laundry":[ 20, 10 ], "outdoor_space":[ 10 ] }}
Appointment Booking: POST request payload glossary
The payload is separated into two parts: appointment data and prospect data (client).
Please note that while many of these fields are optional, prospect data is much more useful the more you collect. Consider performing client-side validation and requiring at minimum the people
fields (first name, last name, email, phone).
In addition, the employee group decides which appointment tour types are enabled and which ones are not and what platform of choices are available. See employee group documentation.
-
appointment
start
- String. Required. Should be an ISO formatted datetime. Use times returned from the appointment times endpoint. Setting an appointment to an unavailable timeslot will return an error (see POST response errors below)
location
- String. Optional. More specific instructions for appointment location (e.g. “Entrance is on W 22nd St side”)
broker_booked
- Boolean. Optional. Setting
broker_booked
totrue
will validate makebroker_email
a required field in the prospect data.
- Boolean. Optional. Setting
tour_type
- String. Required. Possible types: “guided” and “self-guided”.
is_video_tour
- Boolean. Optional. Setting
is_video_tour
totrue
will validate makeplatform_of_choice
andplatform_of_choice_details
required fields in the appointment data.
- Boolean. Optional. Setting
platform_of_choice
- String. Conditionally required. If
is_video_tour
is set totrue
. This can be any string. It tells an agent what platform should be used during a video tour (e.g. “Google Hangouts” or “Apple Facetime”).
- String. Conditionally required. If
platform_of_choice_details
- String. Conditionally required. If
is_video_tour
is set totrue
. This can be any string. It tells an agent how a prospect can be reached during a video tour (e.g. “johndo@gmail.com” or “johndo@icloud.com”).
- String. Conditionally required. If
-
client
people
- Array of object in the shape below. A prospect can consist of one or more people. If multiple people are POSTed to the endpoint, both people will be tied to a single prospect.
first_name
- String. Optional. Prospect’s first name.
last_name
- String. Optional. Prospect’s last name
phone_1
- String. Optional. Prospect’s primary phone number
email
- String. Optional. Prospect’s email. Must be a validly formatted email address.
- Array of object in the shape below. A prospect can consist of one or more people. If multiple people are POSTed to the endpoint, both people will be tied to a single prospect.
sms_opted_in
- String. Optional. String value indicating whether the recorded lead has opted in to receiving SMS communication. Only include when sending a lead that has a phone number. When sending a lead with no phone number,
sms_opted_in
should NOT be sent. The available choices are:'marketing-enabled'
: This prospect has opted into receiving all communication including automated marketing messages.'marketing-disabled'
: This prospect has opted into receiving communications, but not opted into receiving automated marketing messages. This is the default setting.'all-sms-disabled'
: This will disable the prospect from receiving any SMS communications. This setting can be updated via the Funnel app. Use this if you want to temporarily disable SMS communication with the prospect.'client-opted-out'
: The prospect has explicitly opted out of communication. This setting cannot be updated unless the prospect submits their information again. Use this if you want to permanently disable all SMS communication with the prospect.
- String. Optional. String value indicating whether the recorded lead has opted in to receiving SMS communication. Only include when sending a lead that has a phone number. When sending a lead with no phone number,
move_in_date
- String. Optional. String must be a valid ISO 8601 date e.g. (2019-07-01). A valid ISO datetime can also be accepted but only the date portion will be used
layout
- Array of strings. Up to six choices (listed below). Groups can remove options from the default six (e.g. you do not have any lofts or 4 bedrooms in your community).
loft
studio
1br
2br
3br
4+br
- Array of strings. Up to six choices (listed below). Groups can remove options from the default six (e.g. you do not have any lofts or 4 bedrooms in your community).
price_floor
- Decimal. Optional. Bottom range of prospect’s budget
price_ceiling
- Decimal. Optional. Top range of prospect’s budget
pets
- Array of integers. Optional. Choices are as follows:
10
- Cats20
- Small Dogs30
- Large Dogs
- Array of integers. Optional. Choices are as follows:
discovery_source
- Integer. Optional. Same choices as the
discovery_source_choices
in the Appointment Configuration payload above
- Integer. Optional. Same choices as the
lead_source
- Integer or String value representing the way the prospect became a lead for your property (defaults to null if choice does not match)
- To retrieve the list of available sources, see Discovery Sources.
- To send an integer value, it will need to match an ID on your list of available discovery sources.
- To send a string value, it will need to match a name on your list of available discovery sources.
neighborhoods
- Array of integers. Optional. Neighborhood names and their respective ids can be found in the neighborhoods documentation
notes
- String. Optional. Any notes the prospect wants to add not captured in any other form field.
elevator
- Boolean. Optional. If the prospect prefers a property with elevator access.
laundry
- Array of integers. Optional. The choices are:
10
- Laundry In Unit20
- Laundry In Building30
- Laundry In Unit Connection
- Array of integers. Optional. The choices are:
parking
- Integer. Optional. Only one possible value:
10
- Has Parking
- Integer. Optional. Only one possible value:
outdoor_space
- Array of integers. Optional. Choices are as follows:
10
- Private Outdoor Space20
- Public Outdoor Space
- Array of integers. Optional. Choices are as follows:
broker_first_name
- String. Optional. If appointment booked by a broker, the broker’s first name.
broker_last_name
- String. Optional. If appointment booked by a broker, the broker’s last name
broker_company
- String. Optional. If appointment booked by a broker, the name of broker’s company.
broker_phone
- String. Optional. If appointment booked by a broker, the broker’s phone number.
broker_email
- String. Conditionally required. If
broker_booked
is set totrue
, a valid email is required.
- String. Conditionally required. If
community
- Integer. Optional. The Funnel Community ID that you want the prospect/tour to be associated with.
building
- Integer. Optional. The Funnel Building ID of the building the prospect is inquiring about.
unit
- Integer. Optional. The Funnel Unit ID of a unit the prospect is inquiring about. If a unit is specified, the unit must be available. When booking an appointment, if the unit is not available, Funnel will return an error. See the listings search documentation for more information.
NOTE: You should only pass one of three community
/building
/unit
, otherwise you will get a validation error.
Appointment Booking: POST response success example payload
After the data is successfully submitted, you will receive a 200
success response with data similar to the following.
{ "data":{ "appointment":{ "id": 952, "confirmation_enabled":true, "start":"2019-06-21T09:00:00+00:00", "location":"", "expiration_date":"2019-06-17T12:53:05.799365" } }}
Appointment Booking: POST response error payload examples
If an appointment time is no longer available, a 400
error response will be returned. These errors will be in an array of strings.
{ "errors":{ "appointment":{ "start": ["No Employees free at Scheduled Appointment time"] } }}
If any required fields are missing in the request, a 400
error response will be returned. These errors will be in an array of strings.
{ "errors": { "appointment": { "start": ["Missing data for required field."] } }}
If invalid data types are passed in the request, a 400
error response will be returned. These errors will be in an array of strings, each string indicating an invalid error type.
{ "client": { "people": [ { "email": "anna.smith@outlook.com", "date_of_birth": "1988-04-10", "first_name": "Anna", "last_name": "Smith" } ] }, "appointment": { "start": "2016-06-02T04:00:00", "is_video_tour": "no", "tour_type": "invalid type" }}
Error response:
{ "errors": { "appointment": { "tour_type": ["Not a valid choice."], "is_video_tour": ["Not a valid boolean."] } }}
If any of the prospect fields fail validation, a 400
error response will be returned. These errors will be in an array of strings.
{ "errors":{ "client":{ "pets": ["'dogs' is not a number"], "laundry": ["'in unit' is not a number"] } }}
If a person associated with the appointment does not have a phone number or email, a 400
error response will be returned. This response will include an array of strings detailing the errors, along with the index of the person missing the required data.
{ "client": { "people": [ { "email": "anna.smith@outlook.com", "date_of_birth": "1988-04-10", "first_name": "Anna", "last_name": "Smith" }, { "first_name": "Jordan", "last_name": "Smith" } ] }, "appointment": { "start": "2016-06-02T04:00:00" }}
Error response:
{ "errors": { "client": { "people": { "1": { "_schema": [ "Person requires either an email or a phone number." ] } } } }}
If the data type provided for a person is invalid, a 400
error response will be returned. This response will include an array of strings detailing the errors, along with the index of the person with the invalid data.
{ "client": { "people": [ { "email": 12345, "date_of_birth": "1988-04-10", "first_name": "Anna", "last_name": "Smith" } ] }, "appointment": { "start": "2016-06-02T04:00:00" }}
Error response:
{ "errors": { "client": { "people": { "0": { "email": ["Not a valid email address."] } } } }}
Appointment Booking: POST response payload glossary
- appointment
- confirmation_enabled
- Boolean. Whether or not appointments need confirmation from the prospect via an email link. If prospects do not need to confirm then
confirmation_enabled
isfalse
. If they must confirm, the value istrue
.
- Boolean. Whether or not appointments need confirmation from the prospect via an email link. If prospects do not need to confirm then
- start
- String in datetime ISO 8601 format.
- location
- If there is a specific location note for the appointment.
- expiration_date
- String in datetime ISO 8601 format. This
expiration_date
is exactly 1 hour after the booking has occurred. Represents how long the prospect has to confirm an appointment.expiration_date
is irrelevant ifconfirmation_enabled
isfalse
.
- String in datetime ISO 8601 format. This
- confirmation_enabled
Example Appointment Booking Flow
Screen 1: User selects a preferred tour type, available date, and time
In order for the user to select a preferred tour type, you’ll first need to retrieve the available tour types. Keep in mind there are a few conditions that determine when what tour type is available. See our end-point for available tour types for more info.
/api/v2/group/123
- Available tour types
Allow the user to choose a date, and then retrieve the available appointment times for that date and allow them to choose one.
/api/v2/appointments/group/123/available-times/?from=2019-06-18
- Available Appointment Times
Screen 2: Appointment Form
After user chooses a specific timeslot, the form is assembled using the configuration.
Screen 3 Success: Optional Confirmation Screen
User fills out the form and submits.
/api/v2/appointments/group/123/book/
- Appointment Booking
After booking is confirmed, a 200
response is returned. Since this group in particular has appointment confirmations turned on, show the confirmation screen.
Screen 3 Error: Timeslot Not Available
It is possible that in the time between when the user selects an available time and they complete the booking form, the time they selected has gotten booked. Please account for this error, and give them the ability to select a new time.
/api/v2/appointments/group/123/book/
- Appointment Booking
Prospect Appointments
GET /api/v2/clients/<client_id>/appointments/
This endpoint returns all of a prospect’s appointments, ordered by appointment start time, which are either status=CONFIRMED or status=null (e.g. appointments that are created directly within the Funnel web application)
Required URI Parameters
- client_id
- Integer. Required. Must be the ID of the client/prospect you wish to get the active appointments of.
Prospect Appointments: GET response 200
success example
{ "data": { "appointments": [ { "status": 30, "id": 509, "start": "2019-06-24T08:00:00+00:00", "end": "2019-06-24T08:30:00+00:00", "notes": "", "location": "", "employee": { "id": 596, "photo": null, "name": "Travis Smiley" }, "client": { "id": 890, "name": "John Doe, Jane Fonda", "group": null, "person": { "id": 740, "first_name": "John", "last_name": "Doe", "is_primary": true, "email": "johndoe@name.com", "phone_1": "555-555-5555", "phone_2": "" }, "agents": [], "broker_first_name": "", "broker_last_name": "", "lead_source": "StreetEasy" }, "appointment_showings": [] } ] }}
Prospect Appointments: GET response payload glossary
An array of appointment objects are keyed in the payload under data
and appointments
. The glossary below describes data in each appointment object. Please note that in the appointment payload is an appointment_showings
array. This data is used internally and you can safely disregard for purposes of this.
status
- Integer. Represents an appointment status.
null
- Appointment was created by a user within the app and has not been toggled to any other status10
- Tentative (ie, appointment is scheduled but requires confirmation (if appointment confirmation is required by group))20
- Not Confirmed (ie, appointment was scheduled but not confirmed within the hour (if appointment confirmation is required by group))30
- Confirmed (ie, appointment is scheduled and either confirmed by prospect or confirmation is not required by group)40
- Cancelled50
- Completed60
- No Show
- Integer. Represents an appointment status.
id
- Integer. The appointment’s unique ID.
start
- String. Datetime in ISO format. The time an appointment will start.
end
- String. Datetime in ISO format. The time an appointment will end.
notes
- String. Any notes which were added when creating the appointment.
location
- String. If extra location information was added when creating the appointment.
employee
- Object. The employee to whom the appointment is assigned to.
id
- Integer. The employee’s unique ID
photo
- String. A URL to the employee’s headshot
name
- String. Full name of employee. If employee’s name is empty, falls back to username or user’s email without the domain portion.
- Object. The employee to whom the appointment is assigned to.
client
- Object. The prospect this appointment is for.
id
- Integer. The employee’s unique ID
name
- String. Name associated with prospect. If the prospect is associated with multiple people, it will be a comma delimited string of each person’s name.
person
- Object. Primary contact of prospect object.
id
- The primary person’s Unique ID of primary contact
first_name
- First name of the primary person
last_name
- First name of the primary person
is_primary
- If this is the primary person (by definition is always true)
email
- Email of primary person
phone_1
- Preferred phone number of primary person
phone_2
- Secondary phone number of primary person
- Object. Primary contact of prospect object.
agents
- Array of objects. Agents assigned to prospect. Disregard for appointment purposes.
broker_first_name
- String. First name of broker (if there was one involved)
broker_last_name
- String. Last name of broker (if there was one involved)
lead_source
- Integer or String value representing the way the prospect became a lead for your property (defaults to null if choice does not match)
- To retrieve the list of available sources, see Discovery Sources.
- To send an integer value, it will need to match an ID on your list of available discovery sources.
- To send a string value, it will need to match a name on your list of available discovery sources.
- Object. The prospect this appointment is for.
Prospect Appointments: GET error response
Below is an example error response. In this example, attempting to get appointments for a prospect who does not exist.
"errors": { "client": {"id": "client id=890 does not exist"} }}
Appointment Deletion
DELETE /api/v2/appointments/<appointment_id>
This endpoint allows you to delete an appointment. While this is a delete endpoint, the appointment will actually be set to status=CANCELLED. If the appointment was previously confirmed, this will send an email to the employee assigned to the appointment notifying them of the appointment cancellation.
Required URI Parameters
appointment_id
- Integer. Required. Must be the id of the appointment you wish to cancel.
Appointment Deletion: DELETE response 200
success example
"data": { "message": "success", "notification_sent": true }}
Appointment Deletion: DELETE response payload glossary
message
- String. Defaults to “success”.
notification_sent
- Boolean. Whether an internal notification email was sent to the employee assigned to the appointment.
Appointment Deletion: DELETE error response
Below is an example error response. In this example, attempting to delete an appointment which does not exist.
"errors": { "appointment": {"id": "Appointment id=890 does not exist"} }}
Appointment Reschedule
PUT /api/v2/appointments/<appointment_id>/group/<group_id>/book/
This endpoint allows you to reschedule an appointment to a new time. If the time is valid, we will attempt to reschedule the appointment with the same employee. If that employee is not available, another employee belonging to the specified employee group will be selected randomly.
Required URI Parameters
appointment_id
- Integer. Required. Must be the id of the appointment you wish to reschedule.
group_id
- Integer. Required. Must be the id of the group the employee tied to the appointment is a part of.
Appointment Reschedule: PUT request example
"appointment": {"start": "2019-07-20T14:00:00"}}
Appointment Reschedule: PUT response 200
success example
"data": { "appointment": { "id": 952, "status": 30, "start": "2019-07-20T05:00:00+00:00", "end": "2019-07-20T05:30:00+00:00", "notes": "Please mind the gap", "location": "Near the fountain of the building's main entrance" } }}
Appointment Reschedule: PUT response payload glossary
appointment
- Object. Consists of various appointment field data.
status
- Integer. Represents an appointment status.
null
- Appointment was created by a user within the app and has not been toggled to any other status10
- Tentative (ie, appointment is scheduled but requires confirmation (if appointment confirmation is required by group))20
- Not Confirmed (ie, appointment was scheduled but not confirmed within the hour (if appointment confirmation is required by group))30
- Confirmed (ie, appointment is scheduled and either confirmed by prospect or confirmation is not required by group)40
- Cancelled50
- Completed60
- No Show
- Integer. Represents an appointment status.
start
- String. Datetime in ISO format. The time an appointment will start.
end
- String. Datetime in ISO format. The time an appointment will end.
notes
- String. Any notes which were added when creating the appointment.
location
- String. If extra location information was added when creating the appointment.
Appointment Reschedule: PUT error response
Below is an example error response. In this example, attempting to reschedule an appointment in the past.
"errors": { "appointment": {"start": ["The date and time you selected is in the past"]} }}
Appointment Times - Deprecated
DEPRECATED This end-point is no longer supported, it has been replaced by the availability times end point above, which provides a more flexible way to retrieve times available for appointments.
GET /api/v2/appointments/group/<group_id>/times
This endpoint returns two different payloads depending on the presence of the time
query parameter.
Without time
, this endpoint returns all possible appointment times today regardless of actual agent availability (see example payload below). In other words, this array of times represents the group’s office hours. Please note that the array is an array of times not datetimes (since these times represent the present day)
If time
is passed in (an ISO format datetime such as 2019-06-13T08:00
), this endpoint returns only timeslots where at least one agent is available to give a tour. Please note that the array is an array of datetimes in ISO format (since the request could be for a day other than the present day)
Required URI Parameters
group_id
- Integer. Required. Must be the id of the group you are requesting the configuration for.
Optional Query Parameters
time
- String. Optional. Datetime in ISO format (YYYY-MM-DDTHH:MM:SS) e.g. 2019-06-11T13:15. If
time
is included, endpoint returns employee group’s office hours
- String. Optional. Datetime in ISO format (YYYY-MM-DDTHH:MM:SS) e.g. 2019-06-11T13:15. If
Note that in addition to the 200
status code, the success responses also have a valid: true
item in the payload.
Appointment Times: GET response 200
success example payload without time
query parameter (returns group office hours)
"available_times": [ "08:00:00", "08:15:00", "08:30:00", "08:45:00", "09:00:00", "09:15:00", "09:30:00", "09:45:00", "10:00:00", "10:15:00", "10:30:00", "10:45:00", "11:00:00", "11:15:00", "11:30:00", "11:45:00", "12:00:00", "12:15:00", "12:30:00", "12:45:00", "13:00:00", "13:15:00", "13:30:00", "13:45:00", "14:00:00", "14:15:00", "14:30:00", "14:45:00", "15:00:00", "15:15:00", "15:30:00", "15:45:00", "16:00:00", "16:15:00", "16:30:00", "16:45:00", "17:00:00", "17:15:00", "17:30:00", "17:45:00", "18:00:00", "18:15:00", "18:30:00", "18:45:00", "19:00:00", "19:15:00", "19:30:00" ], "valid": true, "errors": {}, "appointment_sms_opt_in": true}
Appointment Times: GET response 200
success example payload with time
query parameter (returns appointment availability)
"available_times": [ "2019-06-13T10:00:00", "2019-06-13T10:15:00", "2019-06-13T10:30:00", "2019-06-13T10:45:00", "2019-06-13T15:00:00", "2019-06-13T15:15:00", "2019-06-13T15:30:00", "2019-06-13T15:45:00", "2019-06-13T17:00:00", "2019-06-13T17:15:00", "2019-06-13T17:30:00", "2019-06-13T17:45:00", "2019-06-13T18:00:00", "2019-06-13T18:15:00" ], "valid": true, "errors": {}, "appointment_sms_opt_in": true}
Appointment Times: GET response 400
error payload example
If you include a time query parameter and that time is not available, a 400
error will be returned with some available_times
that are available for that day. Note that in addition to the 400
status code, the error response also has a valid: false
item in the payload.
"available_times":[ "2019-06-19T08:00:00", "2019-06-19T08:15:00", "2019-06-19T08:30:00", "2019-06-19T08:45:00", "2019-06-19T17:45:00", "2019-06-19T18:00:00", "2019-06-19T18:15:00", "2019-06-19T18:30:00", "2019-06-19T18:45:00", "2019-06-19T19:00:00", "2019-06-19T19:15:00", "2019-06-19T19:30:00" ], "valid":false, "errors":{ "start":["No Employees free at Scheduled Appointment time"] }, "appointment_sms_opt_in":true}
Appointment Times: GET response payload glossary
available_times
- Array of either ISO formatted datetimes (when a valid
time
query param is added to the request) or times in 24-hour format.
- Array of either ISO formatted datetimes (when a valid
valid
- Boolean. Indicated whether the request was formatted correctly and passed validation
errors
- Object. If there are any errors, it will likely be under the name
start
since that’s the bulk of the validation occurring in this request. See above example.
- Object. If there are any errors, it will likely be under the name
appointment_sms_opt_in
- Boolean. Whether the employee group has SMS alerts set up. This value can be used to determine whether or not to give the prospect the option to opt into SMS marketing when booking the actual appointment.
Appointment Configuration - Deprecated
DEPRECATED This end-point is no longer supported. You can retrieve discovery source IDs using the discovery source end-point. If you need other functionallity offered by this end-point, please reach out to your Funnel contact person.
GET /api/v2/group/<group_id>/verify-widget/?widget=lead_capture_appointment
This endpoint allows you to get your group’s specific appointment widget configuration.
Required URI Parameters
group_id
- Integer. Required. Must be the id of the group you are requesting the configuration for.
Required Query Parameters
widget
- String. Required. Must be
lead_capture_appointment
- String. Required. Must be
Appointment Configuration: GET response 200
success payload example
"data": { "layout_options": [ "loft", "studio", "1br", "2br", "3br", "4+br" ], "referral_sources": [ [10, "Manual"], [20, "Website"], [30, "StreetEasy"], [40, "Zillow"], [50, "Apartments.com"], [60, "Zumper"], [70, "Walk In"], [80, "RentHop"], [90, "Realtor.com"], [110, "Agorafy"], [120, "Apartable"], [130, "Apartmentguide.com"], [140, "Apartmentlist"], [150, "Brownstoner"], [160, "Building/Property Website"], [170, "City Realty"], [180, "Company/Portfolio Website"], [190, "Craigslist"], [200, "Facebook"], [210, "ForRent.com"], [220, "Google"], [230, "Hotpads"], [240, "Instagram"], [250, "LeaseBreak"], [260, "Naked Apartments"], [270, "NY Bits"], [280, "NYTimes"], [290, "Observer"], [300, "Other"], [310, "Placebee"], [320, "Flyer, postcard or brochure"], [330, "Rentpath"], [340, "Sister property"], [350, "Building sign"], [360, "Current Resident"], [370, "The Real Deal"], [380, "Trulia"], [390, "Word of Mouth"], [400, "Yelp"], [410, "Rent.com"], [420, "Broker"], [425, "NYC Ferry"], [430, "MTA Subway"], [445, "Marketproof"], [450, "Friend or Family"] ], "discovery_source_choices": [ {"value": 10, "label": "Manual"}, {"value": 20, "label": "Website"}, {"value": 30, "label": "StreetEasy"} ], "field_config": { "client.price_ceiling": 20, "client.other_occupants": 20, "client.reason_for_move": 30, "client.pets": 30, "client.notes": 20, "client.move_in_date": 20, "client.current_postal_code": 20, "client.sms_opted_in": 20, "client.lease_term": 10, "client.price_floor": 20, "client.discovery_source": 30, "client.agents": 30, "client.broker_toggle": 20, "client.client_location": 30, "client.amenities": 30, "client.broker_company": 20, "client.neighborhoods": 30, "client.layout": 20 } }}
Appointment Configuration: GET response 400
error payload example
If your request is unsuccessful for whatever reason, a 400
error response will be returned with a single key ‘widget’. These errors will be in an array of strings (however, only one item will be in the array)
"errors":{ "widget": ["Widget is inactive"] }}
Appointment Configuration: GET response payload glossary
layout_options
- Array of strings. Up to six choices (listed below). Groups can remove options from the default six (e.g. you do not have any lofts or 4 bedrooms in your community).
loft
studio
1br
2br
3br
4+br
- Array of strings. Up to six choices (listed below). Groups can remove options from the default six (e.g. you do not have any lofts or 4 bedrooms in your community).
referral_sources
- Deprecated Use the values from
discovery_source_choices
instead - Array of two item arrays. First item is an integer value which represents the source, second item is the string representation of the source. These sources represent some of the available options, but you should instead use the values from
discovery_source_choices
. Please note that the appointment booking endpoint expects the integer value to be submitted; the string is merely for readability purposes.
- Deprecated Use the values from
discovery_source_choices
- Array of Discovery Sources for your company.
- NOTE The appointment booking endpoint expects the source’s
id
value to be submitted; the name is merely for readability purposes.
field_config
- Object. Each key (e.g.
client.price_ceiling
/client.current_postal_code
) represents a field that is validated during appointment booking. The value for each field key represents whether or not the field isREQUIRED
(10),Optional
(20), orHIDDEN
(30). - NOTE:
field_config
Is not relevant for developers creating their own appointment widget. It’s primary purpose is to configure the Funnel-powered appointment widget by allowing groups to control which fields to display, which fields not to display, and which fields to perform client side validation on. However, if you are building your own appointment widget, you can choose freely to display whichever fields you wish. Server side validation remains the same no matter which fields are displayed on the frontend.
- Object. Each key (e.g.