> ## Documentation Index
> Fetch the complete documentation index at: https://developer.lofty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Brokermint — Sync Transaction

> Callback endpoint for Brokermint integration to sync transaction updates into Lofty.

The transaction must be linked to Brokermint via the Lofty UI before this endpoint can update it. See the request body schema for supported fields.



## OpenAPI

````yaml openapi/openapi.json PUT /v1.0/brokermint/transaction
openapi: 3.0.1
info:
  title: Lofty Service Open APIs
  description: Lofty service API description
  version: '1.0'
servers:
  - url: https://api.lofty.com
security: []
tags:
  - name: Tasks & Appointments V2
    description: >-
      Unified V2 API for lead tasks and appointments: list, create, read,
      update, finish, unfinish and delete. Tasks and appointments share the same
      taskId namespace; each endpoint resolves the target by ID regardless of
      underlying type.
  - name: Opportunity
    description: Operations about opportunity
  - name: Communication V2
    description: >-
      Fetch a single communication record (text / email / call) by its
      communication ID. Closes the webhook follow-up gap where only list-by-lead
      endpoints existed for text and email.
  - name: Vendor
    description: >-
      Team vendor directory: team members, sub-accounts and associated agents
      within the caller's team.
  - name: Lead Routing
    description: >-
      Lead routing configuration: read and update routing rules and default
      (supplement) rules per business type, and list the members and roles
      available for assignment.
  - name: Lead Activity V2 API
    description: >-
      Unified lead activity timeline: returns call, text and email activities
      for a lead in chronological order, including both auto-captured and
      agent-logged entries.
  - name: Tasks & Appointments
    description: >-
      Agent tasks and lead appointments. Supports listing a lead's appointments,
      listing / reading / creating / updating / deleting tasks on a lead.
  - name: Transactions V2
    description: V2 transaction APIs.
  - name: Lead Manual Log
    description: >-
      Agent-recorded log of communications that happened outside the Lofty CRM
      (calls placed on a personal line, emails sent from another mailbox, SMS
      sent from another device). Three channels are supported: logCall,
      logEmail, logText. Direction fields are recorded from the agent's point of
      view: 'outbound' = agent -> lead, 'inbound' = lead -> agent. Persistence
      is asynchronous: a POST returns the new entry's ID once the write is
      enqueued, and the entry becomes readable after a short delay.
  - name: Calls
    description: >-
      Calls placed or received through the Lofty dialer. Supports fetching a
      recording URL, retrieving a single call record, and listing calls attached
      to a lead.
  - name: Listing V2
    description: Listing search V2
  - name: Agent User
    description: >-
      Agent onboarding and team directory operations. Create a new agent under
      the caller's team and attach tags to existing agents.
  - name: Sales Agents V2
    description: >-
      Sales Agent (AI Assistant) management: read the caller's assistant and
      quota, query leads followed by AI, mute leads, manage working-pool
      membership and plan tasks, and update Sales Agent settings.
  - name: Calendar V2 API
    description: >-
      Unified V2 API for tasks and appointments on a lead: create, update,
      delete, finish, unfinish, query a paginated list, and find available
      meeting slots. Calendar IDs returned by POST /v2.0/calendar are composite
      strings of the form '<numericId>-task' or '<numericId>-appointment' and
      must be sent back as-is to the per-entry endpoints.
  - name: Lead System Logs
    description: Query a lead's system log.
  - name: Lead Transaction
    description: Operations about leads
  - name: Notifications V2
    description: Operations for sending notifications to agents
  - name: Notes
    description: >-
      Free-text notes attached to a lead. Supports create, list, get-by-id,
      update and delete. Notes may be pinned to surface them at the top of the
      lead's timeline. System-generated notes (automated activity) are included
      on the list endpoint only when explicitly requested.
  - name: Listing
    description: >-
      Listing data access: retrieve published listings for a site feed (XML),
      and search active / sold listings by agent, office or MLS id.
  - name: Intelligent Features
    description: AI-powered features for lead analysis and communication
  - name: Leads
    description: >-
      Lead lifecycle operations: create / read / update / delete a lead, search
      leads by stage, source, tag, create time or update time, place an inquiry
      or property on a lead, list lead activities, resolve assignee by lead
      info, and handle Brokermint contact callbacks.
  - name: Members
    description: >-
      Team member directory: look up members by user ID, by account (email), or
      list all members of the caller's team. Also supports retrieving the
      current user's profile.
  - name: Team Features
    description: >-
      Team-scoped metadata: lead tags, custom fields, and lead ponds. Supports
      listing existing entries, adding a new custom field, and retrieving a
      specific lead pond.
  - name: Agent Organization
    description: >-
      Team organizational structure: read the caller's organization info, manage
      company and office records, and list permission profiles available to the
      team.
  - name: Communication
    description: >-
      Lead communication history and outbound messaging: list call / email /
      text history for a lead, search communications for an agent, and send SMS
      or email to a lead.
  - name: Webhooks
    description: >
      Use webhooks to be notified about events that happen in a lofty account.


      Supported webhook event types (listId):


      | listId | Event Type | Description |

      |--------|-----------|-------------|

      | 1 | Agent Info | Agent created or updated |

      | 2 | Lead Info | Lead created, updated, or deleted |

      | 3 | Lead Activity | Lead site activity (e.g. SiteBrowse, SiteFavorite,
      SiteSearch) |

      | 4 | Listing Alert | Listing alert changed |

      | 5 | Transaction | Transaction created, updated, or deleted |

      | 6 | Call | Call event (MANUAL and LOGGED only, excludes AUTO) |

      | 7 | Email | Email event (MANUAL and LOGGED only, excludes AUTO) |

      | 8 | Text | Text message event (MANUAL and LOGGED only, excludes AUTO) |

      | 9 | Note | Note created, updated, or deleted |

      | 10 | Task | Task created, updated, finished, or deleted |

      | 11 | Appointment | Appointment created, updated, finished, or deleted |

      | 12 | Pipeline Change | Lead pipeline stage changed |


      ### Notification Recipient Rules


      Here "team" means the entire Lofty client account (the organization), not
      the Lofty "Team add-on" product.


      Which subscribed users receive a callback depends on the subscription's
      delivery mode (`permissionMode`). In both modes, only users in the lead's
      account (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:

      - If the lead is a **hidden lead**, only the **assigned agent** receives
      the notification.

      - Otherwise, the subscriber receives it if they are the **assigned agent**
      of the lead, or a **Company Owner** or **Company Admin**.

      - All other subscribers do **not** receive the notification.


      **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** — a lead 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.


      Ownership-based mode is intended for team/account-level integrations that
      must cover every lead in their scope, not only assigned leads. Set
      `permissionMode` when creating the subscription (POST /v1.0/webhook); it
      defaults to `0`, so existing subscriptions are unaffected.


      ### Delivery Timing


      Webhooks are typically delivered within **1 minute** of the event being
      triggered. During periods of high traffic, delivery may be delayed, but
      will always be sent within **5 minutes**.


      For detailed callback payload structures, see [Webhook Event
      Payloads](/concepts/webhooks#event-payloads).
paths:
  /v1.0/brokermint/transaction:
    put:
      tags:
        - Lead Transaction
      summary: Brokermint — Sync Transaction
      description: >-
        Callback endpoint for Brokermint integration to sync transaction updates
        into Lofty.


        The transaction must be linked to Brokermint via the Lofty UI before
        this endpoint can update it. See the request body schema for supported
        fields.
      operationId: updateTransactionFromBrokermint
      parameters:
        - name: Authorization
          in: header
          description: Bearer [access_token]
          required: true
          schema:
            type: string
        - name: Content-Type
          in: header
          description: application/json
          required: true
          schema:
            type: string
          example: application/json
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/IncomingTransaction'
        required: true
      responses:
        '200':
          description: >-
            Envelope {code, message}. code=0 indicates applied; code=200060
            indicates the transaction was not found (either the Brokermint link
            is missing or the transaction was deleted). HTTP status is 200 in
            both cases.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TransactionCallbackResponse'
        '401':
          description: Missing or invalid authentication token.
          content:
            application/json:
              schema:
                type: string
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                type: string
components:
  schemas:
    IncomingTransaction:
      required:
        - id
      type: object
      properties:
        id:
          type: integer
          description: >-
            Lofty transaction ID to update. Required; used to look up the
            existing Lofty transaction and the Brokermint-link record in
            bm_task_item.
          format: int64
          example: 10001
        agentId:
          type: integer
          description: >-
            Lofty user ID of the agent who will own the transaction. Overwrites
            the existing ownerId.
          format: int64
          example: 100001
        agentName:
          type: string
          description: Agent's display name. Currently ignored by the handler.
          example: Jane Doe
        address:
          type: string
          description: >-
            Street address of the property. Overwrites the stored property
            address when provided.
          example: 123 Main St
        city:
          type: string
          description: City of the property. Overwrites the stored value when provided.
          example: Los Angeles
        state:
          type: string
          description: >-
            State or province of the property. Overwrites the stored value when
            provided.
          example: CA
        zip:
          type: string
          description: >-
            Postal / ZIP code of the property. Overwrites the stored value when
            provided.
          example: '90012'
        status:
          type: string
          description: >-
            Transaction status from Brokermint. Only the values "Closed" and
            "Cancelled" trigger a pipeline status change on the Lofty side; any
            other value is silently ignored.
          example: Closed
          enum:
            - Closed
            - Cancelled
        transactionType:
          type: string
          description: >-
            Transaction type. Case-sensitive. Only the four values below are
            recognized; any other value is silently ignored.
          example: Purchase
          enum:
            - Purchase
            - Listing
            - Lease
            - Other
        price:
          type: number
          description: Home price; mapped to Lofty's homePrice field.
          example: 1000000
        representing:
          type: string
          description: >-
            Side the agent represented in the deal. Currently ignored by the
            handler.
          example: Buyer
        acceptanceDate:
          type: string
          description: Offer acceptance date. Currently ignored by the handler.
          format: date-time
        expirationDate:
          type: string
          description: >-
            Listing / contract expiration date. Mapped to Lofty's expiration
            field.
          format: date-time
        closedAt:
          type: string
          description: Actual close date. Mapped to Lofty's closeTime field.
          format: date-time
        closingDate:
          type: string
          description: >-
            Scheduled closing date. Mapped to Lofty's expectedCloseTime field
            (note: the Brokermint term "closing date" is interpreted as
            "expected close" on the Lofty side).
          format: date-time
      description: Brokermint-sourced transaction payload.
    TransactionCallbackResponse:
      type: object
      properties:
        code:
          type: integer
          description: >-
            Business result code. 0 indicates success; non-zero values indicate
            a business failure (e.g. 200060 TRANSACTION_NOT_EXIST).
          format: int32
          example: 0
        message:
          type: string
          description: Human-readable message that accompanies the code.
          example: success
      description: >-
        Simple envelope response used by Brokermint webhook and property-address
        endpoints. Business failures surface as HTTP 200 with a non-zero code;
        integrators must inspect the code field.

````