> ## 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.

# List manual logs of a lead

> Returns the lead's manual-log entries for a single channel (logCall, logEmail or logText), paginated via offset+limit or cursor (currentId).

Notes:
- Only entries whose logType equals logCall, logEmail or logText are returned. Auto-captured communications are not included.
- Caller must have access to the lead; otherwise 404 LEAD_NOT_EXIST.
- Default mode (currentId=0): offset + limit pagination, ordered by sort and order.
- Cursor mode (currentId > 0): the sort parameter is ignored; entries are ordered by id, with timelineTime as secondary key, matching the direction in order.
- limit outside [1, 1000] is silently reset to 10; offset < 0 is silently reset to 0; offset + limit > 20000 returns 400 OFFSET_EXCEED_LIMIT.
- sort=createTime (default) orders by the entry time as logged by the agent (usually equal to the record's creation time). sort=id orders by the entry's ID.
- order=asc (default) returns oldest first; pass order=desc for newest first.



## OpenAPI

````yaml openapi/openapi.json GET /v1.0/logType
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/logType:
    get:
      tags:
        - Lead Manual Log
      summary: List manual logs of a lead
      description: >-
        Returns the lead's manual-log entries for a single channel (logCall,
        logEmail or logText), paginated via offset+limit or cursor (currentId).


        Notes:

        - Only entries whose logType equals logCall, logEmail or logText are
        returned. Auto-captured communications are not included.

        - Caller must have access to the lead; otherwise 404 LEAD_NOT_EXIST.

        - Default mode (currentId=0): offset + limit pagination, ordered by sort
        and order.

        - Cursor mode (currentId > 0): the sort parameter is ignored; entries
        are ordered by id, with timelineTime as secondary key, matching the
        direction in order.

        - limit outside [1, 1000] is silently reset to 10; offset < 0 is
        silently reset to 0; offset + limit > 20000 returns 400
        OFFSET_EXCEED_LIMIT.

        - sort=createTime (default) orders by the entry time as logged by the
        agent (usually equal to the record's creation time). sort=id orders by
        the entry's ID.

        - order=asc (default) returns oldest first; pass order=desc for newest
        first.
      operationId: list_3
      parameters:
        - name: leadId
          in: query
          description: ID of the lead whose manual logs to return.
          required: true
          schema:
            minimum: 1
            type: integer
            format: int64
          example: 100001
        - name: logType
          in: query
          description: Channel filter. Case-sensitive.
          required: true
          schema:
            type: string
            enum:
              - logCall
              - logEmail
              - logText
          example: logCall
        - name: offset
          in: query
          description: >-
            Zero-based index of the first entry to return. Values < 0 are
            silently reset to 0. Ignored when currentId > 0.
          required: false
          schema:
            minimum: 0
            type: integer
            format: int32
            default: 0
          example: 0
        - name: limit
          in: query
          description: >-
            Number of entries to return per page. Values outside [1, 1000] are
            silently reset to 10. offset + limit must not exceed 20000.
          required: false
          schema:
            maximum: 1000
            minimum: 1
            type: integer
            format: int32
            default: 10
          example: 10
        - name: currentId
          in: query
          description: >-
            This parameter is used for page turning. When searching by ID is
            invoked, the interface would starts from this ID, and retrieve data
            sequentially. It is recommended to use this parameter as a
            replacement for offset to turn the page within the limit.
          required: false
          schema:
            type: integer
            format: int64
        - name: sort
          in: query
          description: >-
            Sort field. 'createTime' orders by the entry's logged time; 'id'
            orders by the entry's ID. Ignored in cursor mode.
          required: false
          schema:
            type: string
            default: createTime
            enum:
              - createTime
              - id
        - name: order
          in: query
          description: >-
            Sort direction. 'asc' returns oldest first; 'desc' returns newest
            first.
          required: false
          schema:
            type: string
            default: asc
            enum:
              - asc
              - desc
        - name: Authorization
          in: header
          description: Bearer [access_token]
          required: true
          schema:
            type: string
      responses:
        '200':
          description: Page of manual log entries for the requested channel.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LogTypeListResponse'
        '400':
          description: >-
            Invalid logType (not one of logCall/logEmail/logText — business code
            20012), or offset+limit exceeds 20000 (business code 200104).
          content:
            application/json:
              schema:
                type: string
        '401':
          description: Missing or invalid authentication token.
          content:
            application/json:
              schema:
                type: string
        '404':
          description: >-
            Lead does not exist, is trashed, or is not accessible to the caller
            (business code 20006 LEAD_NOT_EXIST).
          content:
            application/json:
              schema:
                type: string
        '500':
          description: Internal server error.
          content:
            application/json:
              schema:
                type: string
components:
  schemas:
    LogTypeListResponse:
      type: object
      properties:
        logType:
          type: array
          description: >-
            Manual log entries on this page, ordered by the request's sort and
            order parameters.
          items:
            $ref: '#/components/schemas/LogTypeResponse'
      description: >-
        Wrapped response for GET /v1.0/logType. The manual log entries are
        returned under the 'logType' key.
    LogTypeResponse:
      type: object
      properties:
        id:
          type: integer
          description: ID of the manual log entry.
          format: int64
          example: 563172647619608
        leadId:
          type: integer
          description: ID of the lead this entry belongs to.
          format: int64
          example: 100001
        leadPhoneNumber:
          type: string
          description: >-
            Phone number associated with the call. Only populated for logCall
            entries.
          example: '5865865860'
        callingOutcome:
          type: string
          description: Outcome of the call. Only populated for logCall entries.
          example: VoiceMessage
          enum:
            - Talked
            - VoiceMessage
            - NoAnswer
            - BadNumber
            - DNCNumber
            - DNCContact
        content:
          type: string
          description: 'Body of the log entry: call notes, email body, or SMS content.'
          example: Discussed Austin inventory, will send pre-approval doc tomorrow.
        createTime:
          type: string
          description: >-
            Time the entry was logged, formatted as 'yyyy-MM-dd HH:mm:ss' in
            UTC.
          example: '2026-04-22 10:15:30'
        outboundOrInbound:
          type: string
          description: >-
            Direction of the communication from the agent's point of view.
            'outbound' = agent -> lead; 'inbound' = lead -> agent.
          example: outbound
          enum:
            - outbound
            - inbound
        isPin:
          type: boolean
          description: Whether this entry is pinned to the top of the lead's timeline.
          example: false
        agentId:
          type: integer
          description: User ID of the agent who created the entry.
          format: int64
          example: 100234
        emailSubject:
          type: string
          description: Email subject. Only populated for logEmail entries.
          example: Follow-up on Austin listings
        toEmail:
          type: string
          description: Recipient email address. Only populated for logEmail entries.
          example: sarah.johnson@example.com
        fromEmail:
          type: string
          description: Sender email address. Only populated for logEmail entries.
          example: agent@lofty.com
      description: Manual log entry.

````