book_tour
ChatGPTSubmits a tour time once you have the full name, email, US phone number and time. Never guess any of them — but never collect them in prose either: call get_tour_availability first and let its card gather what is missing. Use this tool only to submit a time the visitor has confirmed. Whether that CONFIRMS a tour or REQUESTS one depends on the community: read tour.status in the result — scheduled is booked, requested means the leasing team has it and has not confirmed the time yet. Say which one happened; never announce a booking for a request.
cancel_tour
ChatGPTCancels a booked tour. Confirm with the visitor first — this cannot be undone.
compare_properties
ChatGPTCompares two or more communities side by side on rent, floor plans, amenities, pet policy and parking — pass fields to compare on something else. Use it when the visitor is weighing communities against each other, instead of calling the property tools once per community. Every id must have come from choose_community; never invent one, and never compare a community you could not look up — say which one you could not reach.
email_my_confirmation
ChatGPTEmails the visitor's own tour confirmation — including its confirmation code — to the address their tour was booked with. Use it when they already have a tour here and cannot produce the code, which is the state book_tour reports instead of booking a second one. The code is NEVER returned to you: read the acknowledgement back as written, then ask them to read the code out of their inbox, and only then look the tour up with get_tour. The reply is the same whether or not a tour exists, so never present it as proof that one does.
get_floorplans
ChatGPTReturns the property's floor plans narrowed to what the visitor asked for — pass bedrooms and/or bathrooms for an EXACT size ("show me the 2 bedrooms"), and maxRent for a budget. Use this instead of get_pricing_and_availability whenever a size or budget was named, rather than filtering a full list yourself. An empty result means no plan matches those filters, NOT that the community has none — say so, and offer to widen them.
get_location
ChatGPTReturns where the current community is, plus nearby landmarks, transit and employers. Use for "where is it", commute and neighborhood questions. Call it straight away — you do not need to know which community first, and you must not ask the user which one they mean; if none has been chosen yet you get a picker back. Never web-search the address or reuse one from an earlier conversation or memory: this conversation may be about a different community than the one last discussed.
get_pricing_and_availability
ChatGPTReturns the current community's rent and inventory in full: every floor plan with bedrooms, bathrooms, size, rent range, deposit and how many units are available, plus when that data was last refreshed. If the result carries availabilityNote, the unit counts could not be confirmed — say that note instead of any count. Use for any price or "what's available" question. Call it straight away — you do not need to identify the community first, and you must not ask the user which one they mean; if none has been chosen yet you get a picker back. Never quote rents from memory or an earlier conversation: rents change, and this result says when they were last refreshed. If the visitor asked for a specific size or budget, call get_floorplans instead of filtering this list yourself.
get_property_details
ChatGPTReturns the current community's amenities, unit features, pet policy, parking, office hours, FAQ, application policy and neighborhood. Required for every such question. Call it straight away — you do not need to identify the community first, and you must not ask the user which one they mean; if none has been chosen yet you get a picker back. Never web-search this property and never answer from memory or an earlier conversation: this data is live.
get_property_overview
ChatGPTReturns the current community for this conversation, with its name, address and contact details. That community is the default for every tool here, so you never need to identify it first. If the user says "this property" and you do not know which one they mean, call this instead of asking them, and never guess from memory, an earlier conversation, or a web search. If no community has been chosen yet you get a picker back instead. Only when they ask about a DIFFERENT community do you search for it and pass its propertyId — or pass slug if they gave you a leasing.ai property page URL.
get_tour
ChatGPTFetches a booked tour by its confirmation code.
get_tour_availability
ChatGPTCALL THIS — never answer in prose — whenever the visitor wants to book, schedule, see or change a tour, including a bare "i want to book a tour". Call it even when no community is chosen and no date was given: it answers with a card that asks for whatever is missing, and showing that card IS how you ask. Never ask for the property, date, name, email or phone first. Only offer the times returned, and book them by passing the slotId each one carries. Pass dateFrom/dateTo only if the visitor named a period, and tourType only if they named a format. Pass the visitor's email to detect a tour they already have, and their name and phone too if the conversation already gave them — the card pre-fills those so they can book in one step. Do not ask for any of them just to call this. An empty list is NOT an error — ask for a preferred time within office hours and book it anyway.
reschedule_tour
ChatGPTMoves a booked tour to a new time. If the failure message lists times that work, offer them to the visitor and call again with the one they pick. Otherwise, report the message as-is and do not retry — a failed reschedule can leave the original booking cancelled.