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

# List campaign messages

> Lists the individual WhatsApp messages exchanged in a campaign. Filter with `?conversation_id=` or `?recipient_id=`. Voice-only campaigns have none. Scope `campaigns:read`.



## OpenAPI

````yaml /api-reference/openapi.json get /campaigns/{campaign_id}/messages
openapi: 3.1.0
info:
  title: Lehar API
  version: v0
  description: >-
    Customer-facing REST API for the Lehar voice-AI platform. Platform-admin
    endpoints are intentionally excluded from this reference. Regenerate with
    `npm run sync:openapi`.
servers:
  - url: https://api.lehar.ai/ca/api/v0
security:
  - ApiKeyAuth: []
  - BearerAuth: []
paths:
  /campaigns/{campaign_id}/messages:
    get:
      tags:
        - Campaigns
      summary: List campaign messages
      description: >-
        Lists the individual WhatsApp messages exchanged in a campaign. Filter
        with `?conversation_id=` or `?recipient_id=`. Voice-only campaigns have
        none. Scope `campaigns:read`.
      operationId: list_campaign_messages_ca_api_v0_campaigns__campaign_id__messages_get
      parameters:
        - name: campaign_id
          in: path
          required: true
          schema:
            type: string
        - name: conversation_id
          in: query
          required: false
          schema:
            type: string
          description: Filter to one conversation thread.
        - name: recipient_id
          in: query
          required: false
          schema:
            type: string
          description: Filter to one recipient.
        - name: limit
          in: query
          required: false
          schema:
            type: integer
            default: 20
            maximum: 100
        - name: offset
          in: query
          required: false
          schema:
            type: integer
            default: 0
      responses:
        '200':
          description: >-
            Messages (`direction` is `inbound`/`outbound`; `provider_message_id`
            is the provider's id for delivery correlation).
          content:
            application/json:
              example:
                data:
                  - id: msg_01EXAMPLE
                    conversation_id: conv_01EXAMPLE
                    campaign_id: campaign_01EXAMPLE
                    recipient_id: recipient_01EXAMPLE
                    provider: trustsignal
                    provider_message_id: wamid.EXAMPLE
                    direction: outbound
                    message_type: template
                    status: delivered
                    text: Hi Jane, a quick question about your renewal.
                    sent_at: '2026-05-22T10:10:05Z'
                    received_at: null
                    created_at: '2026-05-22T10:10:05Z'
                pagination:
                  limit: 20
                  offset: 0
        '404':
          description: Campaign not found
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-KEY
    BearerAuth:
      type: http
      scheme: bearer

````