Webhook Events
See what events are supported through webhooks integration
Currently, we only support leads related events through webhooks.
Webhook Events Reference Table
| Event Type | Description |
|---|---|
leads | A new lead was registered into Luxury Presence, or an existing lead or performed an action that triggered an event with an activity type. |
See Payload format for an example of what data structure will be sent to the webhook.
Activity Types Reference Table
| Activity Type | Category | Description | Typical Use Case |
|---|---|---|---|
SIGNUP | Account Management | User creates a new account or registers | Initial lead capture when someone signs up for MLS access or creates an account |
LOGIN | Account Management | User logs into their existing account | Tracking user engagement and return visits |
ADD_FAVORITE | Property Interaction | User adds a property to their favorites list | Buyer interest tracking - indicates strong interest in specific properties |
REMOVE_FAVORITE | Property Interaction | User removes a property from their favorites list | Interest change tracking - property no longer of interest |
ADD_SEARCH | Search Behavior | User saves a property search with specific criteria | Lead qualification - understanding buyer preferences and search patterns |
REMOVE_SEARCH | Search Behavior | User deletes a saved property search | Search refinement - changing or narrowing search criteria |
VIEW_LISTING | Property Interaction | User views a property listing page | Basic engagement tracking - property browsing behavior |
SHARE_LISTING | Social Engagement | User shares a property listing with others | Viral marketing tracking - lead sharing properties with potential co-buyers |
SHARE_PRIVATE_LISTING | Social Engagement | User shares a password-protected or private listing | Exclusive property sharing - typically for high-value or pre-market properties |
CONTACT_INQUIRY | Communication | User submits a contact form or inquiry | Direct lead generation - ready to communicate with agents |
NEWSLETTER_SIGNUP | Marketing | User subscribes to newsletter or email updates | Lead nurturing - building email marketing lists |
| HOME_SEARCH | Search Behavior | User performs a property search | Active buyer behavior - searching for properties to purchase |
HOME_VALUE | Valuation | User requests a home valuation or CMA | Seller lead generation - potential listing opportunities |
EBOOK | Content Marketing | User downloads an e-book or content resource | Lead magnet conversion - educational content engagement |
REFERRAL | Lead Sharing | Lead was referred by another agent or contact | Agent-to-agent lead sharing and referral tracking |
GOOGLE_SIGN_ON | Authentication | User signs in using Google OAuth | Social login tracking - streamlined authentication |
FORCED_LEAD_CAPTURE | Lead Generation | User completes required form to access content | Gated content conversion - capturing leads before content access |
PROPERTY_ACCESS | Access Control | User requests access to password-protected property | Exclusive property interest - high-intent buyer behavior |
COMM_OPT_IN | Communication Preferences | User opts into communications | Permission-based marketing - explicit consent for contact |
COMM_OPT_OUT | Communication Preferences | User opts out of communications | Unsubscribe tracking - respecting communication preferences |
COMM_BROKERAGE_OPT_IN | Communication Preferences | User opts into brokerage-specific communications | Brokerage marketing consent - targeted brokerage communications |
COMM_BROKERAGE_OPT_OUT | Communication Preferences | User opts out of brokerage-specific communications | Brokerage unsubscribe - opting out of brokerage marketing only |
PROFILE_UPDATE | Account Management | User updates their profile details | Lead data enrichment - keeping contact records current |
DISLIKE_LISTING | Property Interaction | User marks a property as disliked | Negative preference signal - refines what to surface next |
REMOVE_DISLIKE | Property Interaction | User removes a previous dislike | Preference change tracking |
COMMENT_LISTING | Property Interaction | User comments on a property listing | Buyer and agent dialogue on a specific property |
UPDATE_SEARCH | Search Behavior | User edits the criteria of an existing saved search | Evolving buyer criteria - refined qualification |
ADD_NOTE | Communication | A note was added to the lead record | Agent context captured against a contact |
APP_OPENED | App Engagement | User opened the Luxury Presence mobile app | Mobile engagement tracking |
Activity Categories
🏠 Property Interaction
Activities related to viewing, favoriting, and interacting with property listings:
VIEW_LISTING,ADD_FAVORITE,REMOVE_FAVORITE,SHARE_LISTING,SHARE_PRIVATE_LISTING,DISLIKE_LISTING,REMOVE_DISLIKE,COMMENT_LISTING
🔍 Search Behavior
Activities related to property searching and saved searches:
HOME_SEARCH,ADD_SEARCH,REMOVE_SEARCH,UPDATE_SEARCH
👤 Account Management
Activities related to user accounts and authentication:
SIGNUP,LOGIN,GOOGLE_SIGN_ON, PROFILE_UPDATE
📞 Communication
Activities related to contacting agents and communication preferences:
CONTACT_INQUIRY,COMM_OPT_IN,COMM_OPT_OUT,COMM_BROKERAGE_OPT_IN,COMM_BROKERAGE_OPT_OUT,ADD_NOTE
📈 Marketing & Lead Generation
Activities related to marketing campaigns and lead capture:
NEWSLETTER_SIGNUP,EBOOK,FORCED_LEAD_CAPTURE,REFERRAL
🏡 Valuation & Services
Activities related to property valuation and special services:
HOME_VALUE,PROPERTY_ACCESS
📱 App Engagement
Activities from the Luxury Presence mobile app:
APP_OPENED
Webhook Payload Contract
Every webhook delivery carries the same envelope. data holds the lead and the
activity that triggered the delivery.
{
"eventName": "leads",
"companyId": "17g498eh-5b11-4d1c-8448-cb06ef213730",
"data": { ... }
}| Field | Type | Description |
|---|---|---|
eventName | string | Always leads. The only event family delivered today. |
companyId | string | The Luxury Presence company the activity belongs to. |
data | object | The lead + activity payload, described below. |
Field presence
Only activityType and activitySourceUrl are guaranteed. Every other
field is optional and may be absent on any given delivery.
Fields are omitted, never sent empty. Treat absent and empty as different,
and do not key your handler on a field always being present.
The activity
| Field | Type | Notes |
|---|---|---|
activityType | enum | Always sent. What happened — see the activity type reference. |
activityAction | enum | Same vocabulary as activityType. Sent for compatibility with older integrations. |
activitySourceUrl | string | Always sent. Where the activity happened, usually a page on your website. Where no real URL exists, a synthetic lp://activity/<type> value is sent instead so the field is never empty. |
activityAt | ISO-8601 | When the activity occurred. This is the timestamp to order on. |
occurredAt | ISO-8601 | When Luxury Presence recorded the activity. Not the same as activityAt. |
eventId | string | Stable id for the activity, usable as a deduplication key. Not sent on every delivery — see x-lp-delivery-id for the guaranteed idempotency key. |
activityMessage | string | Free-text message the visitor submitted, when the activity carried one. |
platform | enum | mobile, web or unknown. See Platform below. |
collaborationId | string | The collaboration this activity belongs to. Sent only for COLLABORATION_MEMBER_JOINED / _LEFT / _REMOVED. |
The lead
| Field | Type | Notes |
|---|---|---|
leadId | string | Absent for anonymous activity — see Anonymous activity below. |
leadEmail | string | Absent for anonymous activity. |
leadFirstName | string | |
leadLastName | string | |
leadPhoneNumber | string | Formatted for display, e.g. (718) 555-5555. |
leadSource | enum | Where the lead originally came from. |
leadOrigin | enum | The origin recorded against this activity. |
leadType | string | What kind of interaction created the lead, e.g. MESSAGE for a contact-form enquiry. Distinct from activityType. |
statusType | string | CRM status. One of Active Client, Agent, Lead, Other, Past Client, Sphere, Vendor. |
leadState | string | null | US state abbreviation geolocated from the visitor's IP at signup. null when the IP is missing, unresolvable or non-US. |
isNewLead | boolean | Whether this activity created the lead. |
newPhoneNumber | boolean | Whether this activity supplied a phone number not previously on record. |
companyName | string | |
leadTags | array | Tags on the lead's record — { tagId, value }. |
formCustomFields | array | Custom form fields beyond the standard set — { label, value }. value may be a string, number, or array of strings. |
assignedAgent | object | Single assigned agent — { firstName, lastName, email, mlsAgentId }. |
assignedAgents | array | All assigned agents, same shape. |
activityUtmSource | string | UTM source on the originating visit, when present. |
activityUtmCampaign | string | UTM campaign on the originating visit, when present. |
Lead fields are current at delivery time
leadFirstName, leadLastName, leadPhoneNumber, leadSource, statusType,
companyName, leadTags, assignedAgent and assignedAgents reflect the lead
record at the time of delivery, not as of the activity.
If a lead's status or assigned agents changed between the activity and the
delivery, you will receive the newer values. Do not use them to reconstruct what the
lead looked like when the activity happened.
The listing
Sent for listing-scoped activity.
| Field | Type | Notes |
|---|---|---|
activityListingId | string | The listing the activity refers to. |
activityListingAddress | string | |
activityListingCity | string | |
activityListingState | string | |
activityListingZip | string | |
activityListingMlsId | string | Not currently populated. Reserved; do not depend on it. |
meta.property | object | The same listing detail as a nested object, when available. |
meta.development | object | Development detail, when available. |
Address enrichment is not available on every listing-scoped activity. Where it
is missing, activityListingId is sent on its own.
Platform
platform tells you which surface the activity came from.
| Value | Meaning |
|---|---|
mobile | The activity came from the Luxury Presence mobile app. |
web | Default for activity reaching us through a service that serves both surfaces. |
unknown | The surface could not be determined. |
Anonymous activity
leadId and leadEmail are present only for activity that identifies a lead.
Anonymous browsing — VIEW_LISTING above all — arrives with neither, and
without them the lead fields above are also absent.
Example
This example shows a rich delivery. A real payload carries only the fields
available for that activity.
{
"eventName": "leads",
"companyId": "17g498eh-5b11-4d1c-8448-cb06ef213730",
"data": {
"activityType": "ADD_FAVORITE",
"activityAction": "ADD_FAVORITE",
"activitySourceUrl": "https://www.example.com/home-search/listings/b8fb82d6-03f4-42f3-ab57-526493b60949",
"activityAt": "2026-07-24T16:54:24.913Z",
"occurredAt": "2026-07-24T16:54:27.001Z",
"eventId": "0b9c1e4a-2f3d-4c8e-9a71-5d6e7f801234",
"platform": "web",
"activityListingId": "b8fb82d6-03f4-42f3-ab57-526493b60949",
"activityListingAddress": "52 JANE Street 20",
"activityListingCity": "New York City",
"activityListingState": "NY",
"activityListingZip": "10014",
"leadId": "1d53e414-c8ad-49b8-9e23-2046f846d3d9",
"leadEmail": "[email protected]",
"leadFirstName": "Fluffy",
"leadLastName": "Trang",
"leadPhoneNumber": "(718) 555-5555",
"leadSource": "HOME_SEARCH",
"leadType": "MESSAGE",
"statusType": "Lead",
"leadState": "NY",
"isNewLead": false,
"newPhoneNumber": false,
"companyName": "The Aster Group",
"leadTags": [{ "tagId": "a3f1c2d4-5e6b-4a7c-8d9e-0f1a2b3c4d5e", "value": "Hot Lead" }],
"assignedAgent": {
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"mlsAgentId": "MLS123456"
},
"assignedAgents": [
{
"firstName": "John",
"lastName": "Doe",
"email": "[email protected]",
"mlsAgentId": "MLS123456"
}
]
}
}Updated 9 days ago
