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

# List Campaign Opens

> Get a paginated list of contacts who opened a specific campaign.

Each row carries the contact's encrypted id, email, name, the tags currently assigned to the contact, the lists the contact currently belongs to (with their ids and names), and the time of the open in your account timezone.

Each contact appears at most once in the response. If a contact opened the campaign multiple times, the time shown is the most recent open.



## OpenAPI

````yaml /openapi-v1.json post /campaign/{id}/opens
openapi: 3.1.0
info:
  title: Mailercloud Marketing API
  version: 1.0.0
  description: >-
    Campaigns, contacts, lists, segments, automations, and webhooks for the
    Mailercloud Marketing Platform.
servers:
  - url: https://cloudapi.mailercloud.com/v1
security:
  - apiKey: []
tags:
  - name: Campaigns
  - name: Contacts
  - name: Lists
  - name: Tags
  - name: Segments
  - name: Custom Properties
  - name: Senders
  - name: Templates
  - name: Automations
  - name: Webhooks
  - name: Webforms
  - name: Inbox Tracker
  - name: Account
paths:
  /campaign/{id}/opens:
    post:
      tags:
        - Campaigns
      summary: List Campaign Opens
      description: >-
        Get a paginated list of contacts who opened a specific campaign.


        Each row carries the contact's encrypted id, email, name, the tags
        currently assigned to the contact, the lists the contact currently
        belongs to (with their ids and names), and the time of the open in your
        account timezone.


        Each contact appears at most once in the response. If a contact opened
        the campaign multiple times, the time shown is the most recent open.
      operationId: list-campaign-opens
      parameters:
        - name: id
          in: path
          required: true
          description: Encrypted campaign id
          schema:
            type: string
        - name: Content-Type
          in: header
          required: true
          description: Request body type
          schema:
            type: string
            default: application/json
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - page
                - limit
              properties:
                page:
                  type: integer
                  minimum: 1
                  description: |-
                    Page number (1-indexed).

                    Minimum: 1
                limit:
                  type: integer
                  minimum: 1
                  maximum: 100
                  description: |-
                    Maximum rows per page.

                    Minimum: 1
                    Maximum: 100
                date_from:
                  type: string
                  description: >-
                    Optional. Only return opens on or after this date. Format
                    `YYYY-MM-DD`, interpreted in your account timezone.
                date_to:
                  type: string
                  description: >-
                    Optional. Only return opens on or before this date. Format
                    `YYYY-MM-DD`, interpreted in your account timezone. Must be
                    on or after `date_from`.
            examples:
              Example-1---Default:
                value:
                  page: 1
                  limit: 25
              Example-2---With-date-filter:
                value:
                  page: 1
                  limit: 50
                  date_from: '2026-01-01'
                  date_to: '2026-01-31'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  campaign:
                    type: object
                    properties:
                      name:
                        type: string
                        description: Campaign name.
                      subject_line:
                        type: string
                        description: Campaign subject line.
                      created_date:
                        type: string
                        description: >-
                          Campaign creation date and time. Format: `YYYY-MM-DD
                          HH:mm:ss` in your account timezone.
                  data:
                    type: array
                    items:
                      type: object
                      properties:
                        contact_id:
                          type: string
                          description: >-
                            Encrypted contact id (use with `GET
                            /v1/contacts/{id}`).
                        email:
                          type: string
                          description: Contact email.
                        first_name:
                          type: string
                          description: Contact first name.
                        last_name:
                          type: string
                          description: Contact last name.
                        tags:
                          type: array
                          items:
                            type: string
                          description: >-
                            Names of the tags currently assigned to the contact.
                            Empty array when the contact has no tags.
                        lists:
                          type: string
                          description: >-
                            Comma-separated encrypted ids of the lists the
                            contact currently belongs to. The literal string
                            `"no lists"` when the contact belongs to no lists.
                        list_name:
                          type: string
                          description: >-
                            Comma-separated names of the lists the contact
                            currently belongs to. Each list appears only once.
                            The literal string `"no lists"` when the contact
                            belongs to no lists.
                        created_date:
                          type: string
                          description: >-
                            Time of the open. Format: `YYYY-MM-DD HH:mm:ss` in
                            your account timezone.
                  total:
                    type: integer
                    description: >-
                      Total number of contacts who opened the campaign, ignoring
                      pagination.
              examples:
                Example-1---With-rows:
                  value:
                    campaign:
                      name: May newsletter
                      subject_line: Big update inside
                      created_date: '2026-05-10 11:30:00'
                    data:
                      - contact_id: SuwESEuwZZ
                        email: alice@example.com
                        first_name: Alice
                        last_name: Anderson
                        tags:
                          - VIP
                          - Newsletter
                        lists: SuSwZS,KkfHZw
                        list_name: Newsletter Subscribers, Beta Testers
                        created_date: '2026-05-15 08:42:11'
                      - contact_id: SuwESEuwZf
                        email: bob@example.com
                        first_name: Bob
                        last_name: ''
                        tags: []
                        lists: no lists
                        list_name: no lists
                        created_date: '2026-05-15 09:14:02'
                    total: 1234
                Example-2---Empty-result:
                  value:
                    campaign:
                      name: May newsletter
                      subject_line: Big update inside
                      created_date: '2026-05-10 11:30:00'
                    data: []
                    total: 0
        '400':
          description: Bad Request - validation failure
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
              examples:
                Page-required:
                  value:
                    errors:
                      - field: page
                        message: Page is a required field
                Limit-out-of-range:
                  value:
                    errors:
                      - field: limit
                        message: Limit must be 100 or less
                Bad-date-format:
                  value:
                    errors:
                      - field: date_from
                        message: Invalid date_from
                Date-range-invalid:
                  value:
                    errors:
                      - field: date_to
                        message: date_to must be on or after date_from
                Malformed-JSON:
                  value:
                    errors:
                      - field: ''
                        message: Invalid json
        '401':
          description: Unauthorized - missing or invalid API key
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
              examples:
                Example-1:
                  value:
                    errors:
                      - field: ''
                        message: Authorization failed
        '404':
          description: Not Found - the campaign id does not exist in your account
          content:
            application/json:
              schema:
                type: object
                properties:
                  errors:
                    type: array
                    items:
                      type: object
                      properties:
                        field:
                          type: string
                        message:
                          type: string
              examples:
                Example-1:
                  value:
                    errors:
                      - field: id
                        message: Campaign not found
        '429':
          description: Too Many Requests - rate limit exceeded
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example-1:
                  value:
                    message: Too Many Requests
        '500':
          description: Internal Server Error
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
              examples:
                Example-1:
                  value:
                    message: >-
                      Sorry, we are experiencing some technical difficulties.
                      Please try after some time.
components:
  securitySchemes:
    apiKey:
      type: apiKey
      in: header
      name: Authorization
      description: >-
        Your Mailercloud API key (plain text, no Bearer prefix). Create keys in
        Settings → API.

````