Subscribe
Manage subscriptions
Delivery timing
Events are typically delivered within 1 minute. During high traffic, delivery may be delayed but will always occur within 5 minutes.Notification recipients
Which subscribed users receive a callback depends on the subscription’s delivery mode (permissionMode). In both modes, only users in the lead’s team who have subscribed to the event type are considered.
Assignment-based delivery — permissionMode: 0 (default)
A subscriber receives the callback only for leads assigned to them or that they administer:
- Hidden leads — only the assigned agent receives the notification.
- Other leads — the subscriber receives it if they are the assigned agent, or a Company Owner / Company Admin. All other subscribers are excluded.
Ownership-based delivery — permissionMode: 1
A subscriber receives the callback for any lead they manage, regardless of who it is assigned to:
- Every assignment-based case above still applies (assigned agent, Company Owner / Company Admin).
- In addition, the subscriber receives the callback for any lead within their ownership scope — owned by their team or office, or personally owned by them — even if it is assigned to someone else.
- Hidden leads are still delivered only to users who manage them.
permissionMode when creating the subscription; it defaults to 0, so existing subscriptions are unaffected.
Common fields
All payloads include:Event types
Event payloads
1. Agent Info
Triggered when an agent is created or updated.2. Lead Info
Triggered when a lead is created, updated, or deleted. Only the relevant action fields are present.3. Lead Activity
Triggered when a lead performs site activity (SiteBrowse, SiteFavorite, SiteSearch, etc.).4. Listing Alert
Triggered when a listing alert changes.5. Transaction
Triggered when a transaction is created, updated, or deleted. Only the relevant action fields are present.6. Call
Triggered on a call event.7. Email
Triggered on an email event.8. Text
Triggered on a text/SMS event.communicationType values —
MANUAL: agent-initiated communication. LOGGED: communication recorded after the fact. AUTO events are excluded from webhooks.9. Note
Triggered when a note is created, updated, or deleted. Only the relevant action fields are present.10. Task
Triggered when a task is created, updated, finished, or deleted. Multiple action fields may appear in a single payload.11. Appointment
Triggered when an appointment is created, updated, finished, or deleted. Multiple action fields may appear in a single payload.12. Pipeline Change
Triggered when a lead’s pipeline stage changes.Best practices
Respond immediately. Return200 OK before processing. Move logic to a background job. Lofty may retry if no 200 is received.
Handle duplicates. The same event may be delivered more than once. Use event IDs and timestamps for idempotency.
Validate payloads. Check that listId matches your expected event type before processing.
Use HTTPS. Plain HTTP endpoints are rejected.
Example receiver
Resolving communication events to full records
After receiving a Call / Email / Text webhook, fetch the full record by passing the event’stimelineId as the communicationId path parameter of the v2 by-ID endpoint:
timelineId is the recommended round-trip key — it always points to the same lead_timeline row regardless of whether the event is MANUAL or LOGGED. The legacy callId / emailId / textId fields still ship for backward compatibility, but their underlying record changes between the two communicationType values, so they are not safe to pass to the v2 by-ID endpoints.
All IDs in webhook payloads are 64-bit integers. JavaScript clients must handle them carefully — see JS / TS Integration.