New toolsNew endpointsFixes
MCP Server
Released the Lofty MCP server — connect Claude, or any other Model Context Protocol client, to the Lofty API with nothing to install and no generated SDK:search_apis to find the operation matching an intent, describe_api to get that operation’s parameter schema, invoke_api to call it, and list_custom_fields to look up your team’s custom lead fields (which aren’t in any static schema). The tool list stays the same size as the API grows.Authentication uses your existing credentials — an API key or an OAuth 2.0 access token, with nothing to register specifically for MCP. Note that the MCP transport requires Authorization: Bearer <token> for both kinds, including API keys, which use the token prefix on the direct REST API. Calls run as the authenticated caller under the same permissions, scopes, and rate limits as a direct REST request.See the MCP Server documentation to get connected.Leads — Saved searches
AddedGET /v1.0/leads/{leadId}/savedSearches — returns every saved property search of a lead, including its conditions and alert delivery settings.source— comma-separated origins to keep:AGENT_CREATED,LEAD_CREATED,SYSTEM_CREATED. Defaults to all. When migrating to another system, excludeSYSTEM_CREATED— the target usually generates its own, and importing ours duplicates the alerts.includeInactive(defaultfalse) — include searches whose alerts are switched off. AnINSTANTLYcadence counts as active, not off.
403 when the token’s user can’t access the lead.Fixes
- Tasks V2 / Calendar V2 —
startAt/endAtare now parsed correctly when the time zone is supplied separately astimeZoneCode. A bare ISO timestamp such as2026-03-01T15:00:00sent alongside atimeZoneCodepreviously failed to parse and returned HTTP500(20005); timestamps carrying their own offset were unaffected. An offset in the string still takes precedence overtimeZoneCode. - Time parameters — a timestamp that can’t be parsed now returns HTTP
400(20012 INVALID_PARAMETER), with a message naming the offending value and the expected format, instead of HTTP500(20005).
New endpointsField changes
Agents V2 — Deactivate / Reactivate
Added two endpoints for managing an agent’s lifecycle without losing their data:POST /v2.0/agents/{agentId}/deactivate— Releases the agent’s license seat and revokes all sessions and access tokens, while leaving their leads, deals, and data untouched. The caller needsMANAGE_TEAM_AGENT(orMANAGE_TEAM_AGENT_DEPARTMENT); the target can’t be the team owner, an office owner, or the caller.POST /v2.0/agents/{agentId}/reactivate— Restores a deactivated agent’s access and re-occupies a seat (fails withSEAT_INSUFFICIENTif none are free).
200 once authenticated — check the response body’s code field (absent or 0 means success) rather than the status. See Error Codes for the full list of failure codes.Agents — Multi-license support
Agents can now hold up to 5 real estate license entries instead of one:licenses(array of{label, value}) is now returned onGET /v1.0/me,GET /v1.0/users/{userId}, andGET /v1.0/members(both the paginated list and single-account lookup).licenseIdis now deprecated in favor oflicenses.
Transactions V2 — Pipeline discovery & type filtering
- Added
GET /v2.0/transactions/pipelines— Returns each transaction type’s (Purchase, Listing, Lease, Other) configured stages, so you can look up valid status values instead of hardcoding team-specific stage names. GET /v2.0/transactionsgains atransactionTypequery parameter to filter by type, orAllto return every type in one call. Defaults toPurchase; an unrecognized value now returns400(20012 INVALID_PARAMETER).
Field changes
Leads — remove tags on Update Lead
PUT /v1.0/leads/{leadId} gains two request fields for removing tags without resending the full list:tagsRemove(string array) — removes the named tags from the lead. Names are matched literally; a name not currently on the lead is ignored. Applied aftertags/tagsAdd.clearAllTags(boolean, defaultfalse) — set totrueto remove all tags from the lead. Takes precedence overtags/tagsAdd/tagsRemove.
tags.New endpointsWebhooksField changesFixes
Communications — Cursor-paged search
AddedGET /v2.0/communication/agent — cursor-paginated search of an agent’s communications. Supports type=ALL to merge calls, texts, and emails; a query window of up to 90 days; and search_after-based pagination via an opaque cursor (replacing offset paging). The response includes data, nextCursor, hasMore, limit, and totalCount.Webhooks — Ownership-based delivery
Added apermissionMode field on POST /v1.0/webhook:0(default) — assignment-based delivery; unchanged behavior.1— ownership-based delivery; the subscriber also receives callbacks for any lead within their ownership scope (team, office, or personally owned), not only assigned leads.
Field Changes
- System Logs (
GET /v1.0/systemLogs) — each entry now includestimelineTypeDesc, a human-readable event name paired with the integertimelineType, so you no longer need to map the integer yourself.
Fixes
- Leads (
GET /v1.0/leads) — theopportunityfield is now correctly populated (it previously always returned empty).
New endpoints
Communications — single-record lookups
Added v2 endpoints to fetch a single communication by ID:GET /v2.0/communication/call/{communicationId}GET /v2.0/communication/text/{communicationId}GET /v2.0/communication/email/{communicationId}
New endpointsField changesNew tools
Lofty CLI
Released@loftyai/lofty-cli — a command-line tool for the Lofty API. Manage leads, agents, listings, tasks, transactions, and more from your terminal.Transaction V2 Search
AddedGET /v2.0/transactions — paginated transaction search with keyword, lead, and date filters.Lead Query Enhancements
New parameters forGET /v1.0/leads:returnFields: Specify which fields to return (comma-separated), reducing payload size.otherFilters: Pass custom LeadFilter overrides for advanced filtering.key: Fuzzy search by name, phone, or email in a single parameter.
Field Changes
- Calendar V2 —
startTime/endTimenow accept millisecond timestamps in addition to ISO 8601. - Manual Log (
POST /v1.0/logType) — AddedemailSubject,toEmail,fromEmailfields for email log entries. - Manual Log (
POST /v1.0/logType) — The response now returns the created entry’sid. - Manual Log (
GET /v1.0/logType) — Addedsort/orderparameters to control result ordering, and the response now includes thecontentfield.
New endpointsNew featuresAuthentication
Sales Agents & AI
8 new endpoints for managing Sales Agent workflows:GET /v2.0/sales-agents/by-lead— Get Sales Agent by lead IDGET /v2.0/sales-agents/quota— Get current user’s quotaGET /PUT /v2.0/sales-agent/settings— Query and update settingsPUT /v2.0/sales-agents/working-lead/{leadId}/mute— Mute a working leadPOST /v2.0/working-leads/add— Batch add leads to working poolPOST /v2.0/plan-tasks/create— Batch create plan tasks
Intelligent Features (AI)
6 new AI-powered endpoints:POST /v2.0/ai/call-script— Generate call scriptGET /POST /v2.0/ai/call-summary— Get or trigger call summary generationPOST /v2.0/ai/prepare-insight— Generate prepare insightGET /POST /v2.0/ai/lead-analysis— List or create lead analysis tasks
Calendar V2
Full CRUD + lifecycle management for calendar events:GET /POST /v2.0/calendar— List and create eventsPUT /DELETE /v2.0/calendar/{calendarId}— Update and delete eventsPOST finish/unfinish— Mark events as completed or reopenGET /v2.0/calendar/meetings/available— List available meeting slots
Tasks V2 Enhancements
GET /v2.0/tasks/my-tasks— List tasks and appointments assigned to the current userPOST finish/unfinish— Mark tasks as completed or reopen
Lead Activity V2
GET /v2.0/leads/{leadId}/activities— Unified timeline with calls, texts, and emails in chronological order
Notifications
POST /v2.0/sales-agent/notification/app-push/send-task-reminder— Task reminder pushPOST send-to-agent— Send system SMS or email to agentPOST /v2.0/sales-agent/ai-number/send-sms-to-agent— Send SMS via AI number
Agent Tags
POST /v1.0/agent/{agentId}/tag/add— Batch add tags with autoCreate support
Field Changes
- Listing — Added
propertyTypePrimaryandpropertyTypeSecondaryto response - Note — Added
noteId,noteType,idOfTypefields - Calendar V2 — Added
taskIdfield to calendar items
Authentication
- Added OAuth 2.0 Client Credentials flow (
/oauth/token) for server-to-server integrations - Added per-app rate limiting and token scope enforcement