> ## 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 sent messages

> Returns sent emails and LinkedIn messages for up to 10 sequences within a mandatory date range of at most 30 days. Results are ordered by send time, oldest first unless `order=desc`, and paginated: follow `nextCursor` until `hasMore` is false. No total count is returned.



## OpenAPI

````yaml https://multichannel-api.salesforge.ai/public/multichannel/swagger/doc.json get /multichannel/workspaces/{workspaceID}/analytics/messages
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: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
  - ApiKeyAuth: []
externalDocs:
  description: ''
  url: ''
paths:
  /multichannel/workspaces/{workspaceID}/analytics/messages:
    get:
      tags:
        - multichannel
      summary: List sent messages
      description: >-
        Returns sent emails and LinkedIn messages for up to 10 sequences within
        a mandatory date range of at most 30 days. Results are ordered by send
        time, oldest first unless `order=desc`, and paginated: follow
        `nextCursor` until `hasMore` is false. No total count is returned.
      parameters:
        - description: Workspace ID
          in: path
          name: workspaceID
          required: true
          schema:
            type: string
        - description: >-
            Sequence IDs, 1-10. Repeat the parameter per id:
            sequence_ids=1&sequence_ids=2
          in: query
          name: sequence_ids
          required: true
          schema:
            items:
              type: integer
            type: array
        - description: Start date (inclusive, YYYY-MM-DD)
          in: query
          name: from_date
          required: true
          schema:
            type: string
        - description: >-
            End date (inclusive, YYYY-MM-DD). The range from from_date to
            to_date can span at most 30 days
          in: query
          name: to_date
          required: true
          schema:
            type: string
        - description: >-
            IANA time zone name, for example America/New_York, used to resolve
            the dates to start and end of day (default UTC)
          in: query
          name: timezone
          schema:
            type: string
        - description: 'Restrict to one channel (default: both)'
          in: query
          name: channel
          schema:
            enum:
              - email
              - linkedin
            type: string
        - description: >-
            Restrict to messages that were replied to, opened, bounced or had a
            link clicked. `opened`, `bounced` and `clicked` apply to email only.
            Out-of-office email replies are not counted as replies
          in: query
          name: engagement
          schema:
            enum:
              - replied
              - opened
              - bounced
              - clicked
            type: string
        - description: >-
            Only messages sent to these contacts, 1-50 unique ids. Repeat the
            parameter per id: lead_ids=a&lead_ids=b
          in: query
          name: lead_ids
          schema:
            items:
              type: string
            type: array
        - description: Only this kind of LinkedIn message. Emails are not returned when set
          in: query
          name: message_type
          schema:
            enum:
              - message
              - inmail
              - connection_note
            type: string
        - description: Only leads with this status in the sequence
          in: query
          name: lead_status
          schema:
            enum:
              - active
              - paused
              - completed
              - failed
              - replied
              - out_of_office
              - unsubscribed
              - dnc
              - bounced
              - bounce-shield
              - company_limit_reached
              - stop_on_reply
            type: string
        - description: Only messages sent from this sender profile
          in: query
          name: sender_profile_id
          schema:
            type: integer
        - description: 'Sort by send time: oldest first or newest first (default asc)'
          in: query
          name: order
          schema:
            default: asc
            enum:
              - asc
              - desc
            type: string
        - description: >-
            Value of `nextCursor` from the previous response, valid only in the
            same workspace. Send it back unchanged with the same filters and
            order. Omit for the first page
          in: query
          name: cursor
          schema:
            type: string
        - description: Maximum messages per page
          in: query
          name: limit
          schema:
            default: 50
            maximum: 100
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.MessageAnalyticsListResponse'
          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
        '408':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Request Timeout
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/responses.ErrorResponse'
          description: Internal Server Error
      security:
        - ApiKeyAuth: []
components:
  schemas:
    responses.MessageAnalyticsListResponse:
      properties:
        data:
          description: The messages on this page.
          items:
            $ref: '#/components/schemas/responses.MessageAnalyticsResponse'
          type: array
          uniqueItems: false
        hasMore:
          description: True when more messages follow this page.
          type: boolean
        limit:
          description: The maximum number of messages on a page.
          type: integer
        nextCursor:
          description: >-
            The value to send as cursor to get the next page. Present only when
            hasMore is true.
          type: string
      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.MessageAnalyticsResponse:
      properties:
        bouncedAt:
          description: >-
            When an email bounced, in RFC 3339 format. Omitted if it did not
            bounce.
          type: string
        channel:
          description: 'The channel the message was sent on: email or linkedin.'
          enum:
            - email
            - linkedin
          type: string
        clickCount:
          description: >-
            How many link clicks an email received. Always 0 for LinkedIn
            messages.
          type: integer
        contact:
          $ref: '#/components/schemas/responses.MessageContactResponse'
        content:
          description: The message body.
          type: string
        firstOpenedAt:
          description: >-
            When an email was first opened, in RFC 3339 format. Omitted if it
            was not opened.
          type: string
        from:
          $ref: '#/components/schemas/responses.MessageSenderResponse'
        messageId:
          description: >-
            The Message-ID for an email, or the LinkedIn message id for a
            LinkedIn message.
          type: string
        openCount:
          description: How many times an email was opened. Always 0 for LinkedIn messages.
          type: integer
        positiveReply:
          description: True when the reply to this message was classified as positive.
          type: boolean
        repliedAt:
          description: >-
            When the contact replied to this message, in RFC 3339 format.
            Omitted if there is no reply.
          type: string
        sentAt:
          description: When the message was sent, in RFC 3339 format.
          type: string
        sequenceId:
          description: The sequence the message belongs to.
          type: integer
        sequenceName:
          description: The name of that sequence.
          type: string
        subject:
          description: The message subject. Empty when the message has none.
          type: string
        type:
          description: >-
            The kind of message: Email, LinkedIn message, InMail or Connection
            note.
          enum:
            - Email
            - LinkedIn message
            - InMail
            - Connection note
          type: string
      type: object
    responses.MessageContactResponse:
      description: The recipient.
      properties:
        company:
          description: The contact's company name.
          type: string
        email:
          description: The contact's email address.
          type: string
        firstName:
          description: The contact's first name.
          type: string
        id:
          description: The contact's id.
          type: string
        lastName:
          description: The contact's last name.
          type: string
        linkedinUrl:
          description: The contact's LinkedIn profile URL.
          type: string
        status:
          description: The contact's status in the sequence, for example active.
          type: string
        validationStatus:
          description: The contact's email validation result, for example valid.
          type: string
      type: object
    responses.MessageSenderResponse:
      description: The sender.
      properties:
        email:
          description: The address the email was sent from. Empty for LinkedIn messages.
          type: string
        linkedinAccount:
          description: >-
            The email of the LinkedIn account that sent the message. Empty for
            emails.
          type: string
        senderProfile:
          description: The name of the sender profile used for the message.
          type: string
      type: object
  securitySchemes:
    ApiKeyAuth:
      in: header
      name: Authorization
      type: apiKey

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.