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

# List sequence leads

> Returns a page of leads enrolled in the sequence. Each item contains contact details, current enrollment state, and timeline steps in execution order.
Pagination applies to leads, including when filtering by leadIds. Each lead includes its available timeline without separate pagination.
Results default to the most recently updated enrollments. Date filters use inclusive UTC dates and apply to the timestamp selected by sortBy.



## OpenAPI

````yaml https://multichannel-api.salesforge.ai/public/multichannel/swagger/doc.json get /multichannel/workspaces/{workspaceID}/sequences/{sequenceID}/leads
openapi: 3.1.0
info:
  description: Multichannel public endpoints consumed through salesforge-api public docs.
  title: Multichannel Public API
  version: '1.0'
servers:
  - url: https://multichannel-api.salesforge.ai/public
security:
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
externalDocs:
  description: ''
  url: ''
paths:
  /multichannel/workspaces/{workspaceID}/sequences/{sequenceID}/leads:
    get:
      tags:
        - multichannel
      summary: List sequence leads
      description: >-
        Returns a page of leads enrolled in the sequence. Each item contains
        contact details, current enrollment state, and timeline steps in
        execution order.

        Pagination applies to leads, including when filtering by leadIds. Each
        lead includes its available timeline without separate pagination.

        Results default to the most recently updated enrollments. Date filters
        use inclusive UTC dates and apply to the timestamp selected by sortBy.
      parameters:
        - description: Workspace ID
          in: path
          name: workspaceID
          required: true
          schema:
            type: string
        - description: Sequence ID
          in: path
          name: sequenceID
          required: true
          schema:
            maximum: 2147483647
            minimum: 1
            type: integer
        - description: Page number
          in: query
          name: page
          schema:
            default: 1
            minimum: 1
            type: integer
        - description: Items per page
          in: query
          name: limit
          schema:
            default: 20
            maximum: 100
            minimum: 1
            type: integer
        - description: Enrollment status
          in: query
          name: status
          schema:
            type: string
        - description: Search lead name or email
          in: query
          name: q
          schema:
            type: string
        - description: Only leads with recorded email opens
          in: query
          name: openedEmailsOnly
          schema:
            type: boolean
        - description: Only leads moved to a subsequence
          in: query
          name: in_subsequence
          schema:
            type: boolean
        - description: Comma-separated lead IDs
          in: query
          name: leadIds
          schema:
            type: string
        - description: >-
            Sort by enrollment update, enrollment creation, or contact activity;
            also selects the timestamp used by from and to
          in: query
          name: sortBy
          schema:
            default: recently_updated
            enum:
              - recently_contacted
              - least_recently_contacted
              - recently_updated
              - recently_added
              - oldest_added
            type: string
        - description: >-
            Sort direction; defaults to desc. least_recently_contacted and
            oldest_added always use asc
          in: query
          name: sortOrder
          schema:
            enum:
              - asc
              - desc
            type: string
        - description: Inclusive start date in UTC (YYYY-MM-DD); requires to
          in: query
          name: from
          schema:
            type: string
        - description: Inclusive end date in UTC (YYYY-MM-DD); requires from
          in: query
          name: to
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.SequenceLeadListResponse'
          description: OK
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Not Found
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Internal Server Error
      security:
        - ApiKeyAuth: []
components:
  schemas:
    responses.SequenceLeadListResponse:
      properties:
        leads:
          items:
            $ref: '#/components/schemas/responses.SequenceLeadProgressResponse'
          type: array
          uniqueItems: false
        pagination:
          $ref: '#/components/schemas/responses.PaginationResponse'
      required:
        - leads
        - pagination
      type: object
    responses.ErrorResponse:
      properties:
        data:
          description: >-
            Optional error context. Its shape depends on the message and
            endpoint.
        message:
          description: >-
            Human-readable error text or, for documented cases, a stable
            machine-readable code that clients can branch on.
          example: Invalid request body
          type: string
      type: object
    responses.SequenceLeadProgressResponse:
      properties:
        enrollment:
          $ref: '#/components/schemas/responses.SequenceLeadEnrollmentResponse'
        lead:
          $ref: '#/components/schemas/responses.SequenceLeadResponse'
        timeline:
          items:
            $ref: '#/components/schemas/responses.SequenceLeadTimelineStepResponse'
          type: array
          uniqueItems: false
      required:
        - enrollment
        - lead
        - timeline
      type: object
    responses.PaginationResponse:
      properties:
        hasNext:
          type: boolean
        limit:
          type: integer
        page:
          type: integer
        total:
          type: integer
        totalPages:
          type: integer
      type: object
    responses.SequenceLeadEnrollmentResponse:
      properties:
        inSubsequence:
          type: boolean
        pauseReason:
          type: string
        status:
          enum:
            - active
            - paused
            - completed
            - failed
            - replied
            - out_of_office
            - unsubscribed
            - dnc
            - bounced
            - bounce-shield
            - company_limit_reached
            - stop_on_reply
          type: string
        updatedAt:
          description: UpdatedAt is the last update time of the enrollment record.
          format: date-time
          type: string
      required:
        - inSubsequence
        - status
        - updatedAt
      type: object
    responses.SequenceLeadResponse:
      properties:
        email:
          type: string
        firstName:
          type: string
        lastName:
          type: string
        leadId:
          type: string
        linkedinUrl:
          type: string
        position:
          type: string
        profilePictureUrl:
          type: string
      required:
        - email
        - firstName
        - lastName
        - leadId
        - linkedinUrl
      type: object
    responses.SequenceLeadTimelineStepResponse:
      description: >-
        A sequence step with execution state and available message, reply,
        sender, engagement, and error details. Optional fields are omitted when
        unavailable or inapplicable.
      properties:
        actionChannel:
          enum:
            - email
            - linkedin
            - inmail
          type: string
        actionName:
          type: string
        blockedByLeadStatus:
          description: >-
            BlockedByLeadStatus is the enrollment status preventing a pending or
            scheduled step from running.
          type: string
        branchTaken:
          type: string
        conditionName:
          type: string
        content:
          $ref: '#/components/schemas/responses.SequenceLeadContentResponse'
        delivery:
          $ref: '#/components/schemas/responses.SequenceLeadDeliveryResponse'
        engagement:
          $ref: '#/components/schemas/responses.SequenceLeadEngagementResponse'
        error:
          $ref: '#/components/schemas/responses.SequenceLeadStepErrorResponse'
        executedAt:
          format: date-time
          type: string
        executionOrder:
          type: integer
        executionStatus:
          description: >-
            ExecutionStatus is the processing state of the step. Message
            outcomes are reported in delivery.
          enum:
            - pending
            - scheduled
            - processing
            - completed
            - failed
          type: string
        nodeId:
          type: integer
        nodeType:
          enum:
            - action
            - condition
            - root
            - terminal
          type: string
        replyContent:
          $ref: '#/components/schemas/responses.SequenceLeadReplyContentResponse'
        scheduledAt:
          description: >-
            ScheduledAt is the planned execution time, subject to sequence and
            sender availability.
          format: date-time
          type: string
        sender:
          $ref: '#/components/schemas/responses.SequenceLeadSenderResponse'
      required:
        - executionOrder
        - executionStatus
        - nodeId
        - nodeType
      type: object
    responses.SequenceLeadContentResponse:
      description: >-
        Stored outbound message content. Use delivery to determine the recorded
        send outcome.
      properties:
        contentType:
          description: >-
            ContentType is inferred from email markup; LinkedIn content is
            text/plain.
          enum:
            - text/html
            - text/plain
          type: string
        message:
          type: string
        subject:
          type: string
      required:
        - contentType
        - message
      type: object
    responses.SequenceLeadDeliveryResponse:
      description: >-
        Send and bounce evidence for email, LinkedIn messages, and InMail.
        Included only for these message actions. LinkedIn sends require a sent
        message associated with the step.
      properties:
        bouncedAt:
          format: date-time
          type: string
        channel:
          enum:
            - email
            - linkedin
          type: string
        sentAt:
          description: SentAt is the recorded email send time. Omitted for LinkedIn.
          format: date-time
          type: string
        status:
          description: >-
            Status is unknown when no send or bounce is recorded, sent when a
            send is recorded, or bounced for an email bounce. A recorded send
            does not confirm receipt or reading.
          enum:
            - unknown
            - sent
            - bounced
          type: string
      required:
        - channel
        - status
      type: object
    responses.SequenceLeadEngagementResponse:
      description: >-
        Recorded email opens and clicks. Zero counts mean no recorded events;
        tracking availability is unknown. Included when an email send or
        engagement event is recorded.
      properties:
        clickCount:
          description: ClickCount is the number of recorded clicks.
          type: integer
        lastClickedAt:
          format: date-time
          type: string
        lastOpenedAt:
          format: date-time
          type: string
        openCount:
          description: OpenCount is the number of recorded opens.
          type: integer
      required:
        - clickCount
        - openCount
      type: object
    responses.SequenceLeadStepErrorResponse:
      properties:
        failedAt:
          format: date-time
          type: string
        message:
          type: string
        retryCount:
          type: integer
      required:
        - failedAt
        - message
        - retryCount
      type: object
    responses.SequenceLeadReplyContentResponse:
      description: >-
        The earliest stored reply associated with the step, regardless of
        current enrollment status. Replies are matched by task; replies without
        a task association are matched to the latest preceding execution on the
        same channel. This is a single reply, not the full conversation.
      properties:
        channel:
          enum:
            - email
            - linkedin
          type: string
        contentType:
          description: >-
            ContentType is inferred from email markup; LinkedIn content is
            text/plain.
          enum:
            - text/html
            - text/plain
          type: string
        message:
          type: string
        repliedAt:
          format: date-time
          type: string
        subject:
          type: string
      required:
        - channel
        - contentType
        - message
      type: object
    responses.SequenceLeadSenderResponse:
      description: >-
        The profile and mailbox assigned to the step. Profile details reflect
        their current stored values.
      properties:
        email:
          type: string
        linkedinUrl:
          type: string
        mailboxId:
          type: string
        senderProfileId:
          type: integer
        senderProfileName:
          type: string
      required:
        - email
        - linkedinUrl
        - senderProfileId
        - senderProfileName
      type: object
  securitySchemes:
    ApiKeyAuth:
      in: header
      name: Authorization
      type: apiKey

````