Webhook Events

See what events are supported through webhooks integration

Currently, we only support leads related events through webhooks.

Webhook Events Reference Table

Event TypeDescription
leadsA 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 TypeCategoryDescriptionTypical Use Case
SIGNUPAccount ManagementUser creates a new account or registersInitial lead capture when someone signs up for MLS access or creates an account
LOGINAccount ManagementUser logs into their existing accountTracking user engagement and return visits
ADD_FAVORITEProperty InteractionUser adds a property to their favorites listBuyer interest tracking - indicates strong interest in specific properties
REMOVE_FAVORITEProperty InteractionUser removes a property from their favorites listInterest change tracking - property no longer of interest
ADD_SEARCHSearch BehaviorUser saves a property search with specific criteriaLead qualification - understanding buyer preferences and search patterns
REMOVE_SEARCHSearch BehaviorUser deletes a saved property searchSearch refinement - changing or narrowing search criteria
VIEW_LISTINGProperty InteractionUser views a property listing pageBasic engagement tracking - property browsing behavior
SHARE_LISTINGSocial EngagementUser shares a property listing with othersViral marketing tracking - lead sharing properties with potential co-buyers
SHARE_PRIVATE_LISTINGSocial EngagementUser shares a password-protected or private listingExclusive property sharing - typically for high-value or pre-market properties
CONTACT_INQUIRYCommunicationUser submits a contact form or inquiryDirect lead generation - ready to communicate with agents
NEWSLETTER_SIGNUPMarketingUser subscribes to newsletter or email updatesLead nurturing - building email marketing lists
HOME_SEARCHSearch BehaviorUser performs a property searchActive buyer behavior - searching for properties to purchase
HOME_VALUEValuationUser requests a home valuation or CMASeller lead generation - potential listing opportunities
EBOOKContent MarketingUser downloads an e-book or content resourceLead magnet conversion - educational content engagement
REFERRALLead SharingLead was referred by another agent or contactAgent-to-agent lead sharing and referral tracking
GOOGLE_SIGN_ONAuthenticationUser signs in using Google OAuthSocial login tracking - streamlined authentication
FORCED_LEAD_CAPTURELead GenerationUser completes required form to access contentGated content conversion - capturing leads before content access
PROPERTY_ACCESSAccess ControlUser requests access to password-protected propertyExclusive property interest - high-intent buyer behavior
COMM_OPT_INCommunication PreferencesUser opts into communicationsPermission-based marketing - explicit consent for contact
COMM_OPT_OUTCommunication PreferencesUser opts out of communicationsUnsubscribe tracking - respecting communication preferences
COMM_BROKERAGE_OPT_INCommunication PreferencesUser opts into brokerage-specific communicationsBrokerage marketing consent - targeted brokerage communications
COMM_BROKERAGE_OPT_OUTCommunication PreferencesUser opts out of brokerage-specific communicationsBrokerage unsubscribe - opting out of brokerage marketing only
PROFILE_UPDATEAccount ManagementUser updates their profile detailsLead data enrichment - keeping contact records current
DISLIKE_LISTINGProperty InteractionUser marks a property as dislikedNegative preference signal - refines what to surface next
REMOVE_DISLIKEProperty InteractionUser removes a previous dislikePreference change tracking
COMMENT_LISTINGProperty InteractionUser comments on a property listingBuyer and agent dialogue on a specific property
UPDATE_SEARCHSearch BehaviorUser edits the criteria of an existing saved searchEvolving buyer criteria - refined qualification
ADD_NOTECommunicationA note was added to the lead recordAgent context captured against a contact
APP_OPENEDApp EngagementUser opened the Luxury Presence mobile appMobile 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": { ... }
}
FieldTypeDescription
eventNamestringAlways leads. The only event family delivered today.
companyIdstringThe Luxury Presence company the activity belongs to.
dataobjectThe 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

FieldTypeNotes
activityTypeenumAlways sent. What happened — see the activity type reference.
activityActionenumSame vocabulary as activityType. Sent for compatibility with older integrations.
activitySourceUrlstringAlways 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.
activityAtISO-8601When the activity occurred. This is the timestamp to order on.
occurredAtISO-8601When Luxury Presence recorded the activity. Not the same as activityAt.
eventIdstringStable id for the activity, usable as a deduplication key. Not sent on every delivery — see x-lp-delivery-id for the guaranteed idempotency key.
activityMessagestringFree-text message the visitor submitted, when the activity carried one.
platformenummobile, web or unknown. See Platform below.
collaborationIdstringThe collaboration this activity belongs to. Sent only for COLLABORATION_MEMBER_JOINED / _LEFT / _REMOVED.

The lead

FieldTypeNotes
leadIdstringAbsent for anonymous activity — see Anonymous activity below.
leadEmailstringAbsent for anonymous activity.
leadFirstNamestring
leadLastNamestring
leadPhoneNumberstringFormatted for display, e.g. (718) 555-5555.
leadSourceenumWhere the lead originally came from.
leadOriginenumThe origin recorded against this activity.
leadTypestringWhat kind of interaction created the lead, e.g. MESSAGE for a contact-form enquiry. Distinct from activityType.
statusTypestringCRM status. One of Active Client, Agent, Lead, Other, Past Client, Sphere, Vendor.
leadStatestring | nullUS state abbreviation geolocated from the visitor's IP at signup. null when the IP is missing, unresolvable or non-US.
isNewLeadbooleanWhether this activity created the lead.
newPhoneNumberbooleanWhether this activity supplied a phone number not previously on record.
companyNamestring
leadTagsarrayTags on the lead's record — { tagId, value }.
formCustomFieldsarrayCustom form fields beyond the standard set — { label, value }. value may be a string, number, or array of strings.
assignedAgentobjectSingle assigned agent — { firstName, lastName, email, mlsAgentId }.
assignedAgentsarrayAll assigned agents, same shape.
activityUtmSourcestringUTM source on the originating visit, when present.
activityUtmCampaignstringUTM 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.

FieldTypeNotes
activityListingIdstringThe listing the activity refers to.
activityListingAddressstring
activityListingCitystring
activityListingStatestring
activityListingZipstring
activityListingMlsIdstringNot currently populated. Reserved; do not depend on it.
meta.propertyobjectThe same listing detail as a nested object, when available.
meta.developmentobjectDevelopment 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.

ValueMeaning
mobileThe activity came from the Luxury Presence mobile app.
webDefault for activity reaching us through a service that serves both surfaces.
unknownThe 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"
      }
    ]
  }
}

Did this page help you?