> ## Documentation Index
> Fetch the complete documentation index at: https://moengage-docs-limits-personalize.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Get Campaign Meta (V5)

> Returns lightweight metadata for one or more campaigns without loading their full configuration.


#### Supported Channels

* Email
* Push
* SMS
* WhatsApp
* Facebook
* Google Ads
* Connectors

#### Reachability Information

* Available only for **scheduled** campaigns (one-time, business event-triggered, and event-triggered).
* Provides estimated user count that will receive the campaign.
* Calculated once daily and cached for 24 hours. Multiple API calls within the same day return the cached value.
* May vary due to app installations/uninstalls or subscription changes.

#### Rate Limits

| Rate Limit Name              | Rate Limit                                                                           |
| :--------------------------- | :----------------------------------------------------------------------------------- |
| get campaign meta per second | The total number of get campaign meta requests per second per client allowed is 10.  |
| get campaign meta per minute | The total number of get campaign meta requests per minute per client allowed is 100. |
| get campaign meta per hour   | The total number of get campaign meta requests per hour per client allowed is 6000.  |

<Note>
  **Notes**

  * Breaching the limits will reject the request.
  * Per-hour and per-day limits use a rolling window of the last 1 hour and last 24 hours respectively.
</Note>


## OpenAPI

````yaml /api/campaigns/campaign-draft.yaml post /v5/campaigns/meta
openapi: 3.0.3
info:
  title: MoEngage Campaigns API
  version: '2025-11-20'
  description: >
    The Campaigns V5 API manages the draft campaign lifecycle — draft creation,
    incremental updates, validation, test sends, and post-publish management.


    **Note:** Campaign publishing is not yet supported in V5. To publish
    campaigns, use the V1 API (`PATCH
    /core-services/v1/campaigns/{campaign_id}`) in the interim.


    **Supported channels:**

    - Push (Android, iOS, Web)

    - Email


    **Supported delivery types:**

    - ONE_TIME

    - PERIODIC

    - EVENT_TRIGGERED

    - BUSINESS_EVENT_TRIGGERED

    - DEVICE_TRIGGERED (Push only)

    - LOCATION_TRIGGERED (Push only)

    - BROADCAST_LIVE_ACTIVITY (Push iOS only)


    **Campaign lifecycle:**


    1. **Create** - Start a draft with only the required fields (`channel`,
    `campaign_delivery_type`, `created_by`). Add content, audience, and
    scheduling incrementally across subsequent update calls.

    2. **Update** - Patch individual components as you refine the setup. Each
    submitted component is validated in full before the draft is updated.

    3. **Validate** - Check whether a draft would pass publish-time validation
    without committing any changes.

    4. **Test** - Send a test message to specific users from either a saved
    draft or inline content before going live.

    5. **Manage** - Pause, resume, or stop a live campaign. Search your
    workspace and retrieve lightweight metadata across all campaigns.


    **Campaign versioning** is optional per workspace:

    - When enabled, publishing an update to a live campaign creates a new
    document with an incremented `version_number`.

    - `campaign_id` is the stable identifier across all versions; each version
    has its own raw `id` (ObjectId).


    **Authentication header:** Pass your Workspace ID in the `MOE-APPKEY`
    request header, the same as in V1.
  contact:
    name: MoEngage Developer Team
    email: support@moengage.com
    url: https://developers.moengage.com
servers:
  - url: https://api-{dc}.moengage.com/
    description: MoEngage Campaigns API Server
    variables:
      dc:
        default: '01'
        description: >-
          Data center (DC) segment in the hostname. Replace `OX` with your
          workspace DC (01–06 or 101). See [Data
          centers](/api/introduction#data-centers).
security:
  - BasicAuth: []
paths:
  /v5/campaigns/meta:
    post:
      tags:
        - Get Campaign Details
      summary: Get Campaign Meta (V5)
      description: >
        Returns lightweight metadata for one or more campaigns without loading
        their full configuration.
      operationId: get_campaign_meta_v5
      parameters:
        - $ref: '#/components/parameters/MOE-APPKEY'
        - $ref: '#/components/parameters/X-MOE-Request-Id'
        - $ref: '#/components/parameters/Idempotency-Key-Required'
      requestBody:
        description: >
          Provide the search criteria for retrieving campaign metadata and
          reachability information.
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/MetaV5Request'
            examples:
              filter_by_id_and_status:
                summary: Filter by ID and status
                value:
                  request_id: '{{request_id}}'
                  limit: 15
                  page: 1
                  campaign_fields:
                    id: '{{campaign_id}}'
                    status:
                      - SCHEDULED
                      - ACTIVE
                      - PAUSED
                      - DRAFT
              filter_by_channel_and_date:
                summary: Filter by channel and date range
                value:
                  request_id: '{{request_id}}'
                  limit: 15
                  page: 1
                  campaign_fields:
                    channels:
                      - PUSH
                      - EMAIL
                    created_date:
                      from_date: '2024-01-01T00:00:00'
                      to_date: '2024-12-31T23:59:59'
              filter_by_delivery_type_and_creator:
                summary: Filter by delivery type and creator
                value:
                  request_id: '{{request_id}}'
                  limit: 15
                  page: 1
                  campaign_fields:
                    delivery_type: ONE_TIME
                    created_by:
                      - '{{creator_email}}'
                    name: '{{campaign_name_partial}}'
                    tags:
                      - promotional
                  include_child_campaigns: false
              with_child_counts:
                summary: With child campaign counts
                value:
                  request_id: '{{request_id}}'
                  limit: 15
                  page: 1
                  campaign_fields:
                    channels:
                      - PUSH
                      - EMAIL
                    campaign_delivery_type:
                      - PERIODIC
                      - BUSINESS_EVENT_TRIGGERED
                  include_child_campaigns: true
              reachability:
                summary: Reachability for a scheduled campaign
                value:
                  request_id: '{{request_id}}'
                  limit: 1
                  page: 1
                  campaign_fields:
                    id: '{{campaign_id}}'
                    status:
                      - SCHEDULED
              filter_sms_whatsapp:
                summary: Filter SMS and WhatsApp
                value:
                  request_id: '{{request_id}}'
                  limit: 15
                  page: 1
                  campaign_fields:
                    channels:
                      - SMS
                      - WHATSAPP
                    status:
                      - ACTIVE
      responses:
        '200':
          description: Campaign meta rows
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/V5SuccessEnvelope'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/CampaignMetaListResponseData'
              examples:
                scheduled_push_with_reachability:
                  summary: Scheduled Push campaign with reachability details
                  value:
                    response_id: resp-meta-001
                    type: campaign
                    data:
                      campaigns:
                        - campaign_id: 64a1b2c3d4e5f6a7b8c9d0e1
                          channel: PUSH
                          platform:
                            - ANDROID
                            - IOS
                          created_by: marketer@example.com
                          campaign_delivery_type: ONE_TIME
                          campaign_name: Summer Sale Campaign
                          campaign_team: Growth Team
                          campaign_tags:
                            - promotional
                            - seasonal
                          campaign_status: SCHEDULED
                          campaign_start_time: '2024-11-28T12:18:00'
                          reachability_details:
                            count: 18182
                            last_updated_time: '2024-11-27T09:05:42.661000'
                periodic_with_child_campaigns:
                  summary: Periodic campaign with child campaign counts
                  value:
                    response_id: resp-meta-002
                    type: campaign
                    data:
                      campaigns:
                        - campaign_id: 64a1b2c3d4e5f6a7b8c9d0e2
                          channel: EMAIL
                          platform: []
                          created_by: marketer@example.com
                          campaign_delivery_type: PERIODIC
                          campaign_name: Weekly Newsletter
                          campaign_team: Retention Team
                          campaign_tags:
                            - newsletter
                          campaign_status: ACTIVE
                          campaign_start_time: '2024-01-01T08:00:00'
                          total_child_campaigns: 12
                          reachability_details: null
        '400':
          description: Request failed schema or field validation.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/V5ErrorEnvelope'
              examples:
                missing_request_id:
                  summary: Missing request_id
                  value:
                    response_id: resp-meta-400-a
                    error:
                      code: VALIDATION_FAILED
                      message: One or more fields failed validation.
                      request_id: ''
                      details:
                        - target: request_id
                          message: request_id is required.
                missing_limit:
                  summary: Missing limit
                  value:
                    response_id: resp-meta-400-b
                    error:
                      code: VALIDATION_FAILED
                      message: One or more fields failed validation.
                      request_id: '{{request_id}}'
                      details:
                        - target: limit
                          message: limit is required.
                missing_page:
                  summary: Missing page
                  value:
                    response_id: resp-meta-400-c
                    error:
                      code: VALIDATION_FAILED
                      message: One or more fields failed validation.
                      request_id: '{{request_id}}'
                      details:
                        - target: page
                          message: page is required.
                feature_not_enabled:
                  summary: Feature not enabled for workspace
                  value:
                    response_id: resp-meta-400-d
                    error:
                      code: VALIDATION_FAILED
                      message: Campaign metadata API is not enabled for this workspace.
                      request_id: '{{request_id}}'
                      details: []
        '401':
          $ref: '#/components/responses/V5Unauthorized'
        '500':
          $ref: '#/components/responses/V5InternalError'
components:
  parameters:
    MOE-APPKEY:
      name: MOE-APPKEY
      in: header
      required: true
      description: >
        Your MoEngage Workspace ID (App ID). Find it in the dashboard at
        **Settings** > **Account** > **APIs** > **Workspace ID**.
      schema:
        type: string
      example: '{{workspace_id}}'
    X-MOE-Request-Id:
      name: X-MOE-Request-Id
      in: header
      required: true
      description: >
        Correlates with `response_id`. Supply this header or `request_id` in the
        body; if both are set, they must match.
      schema:
        type: string
    Idempotency-Key-Required:
      name: Idempotency-Key
      in: header
      required: true
      description: >
        UUID v4. Required on all `POST` and `PATCH` requests except `POST
        /v5/campaigns/{campaign_id}/validate`. Repeating the same key returns
        the same response body.
      schema:
        type: string
        format: uuid
  schemas:
    MetaV5Request:
      type: object
      required:
        - limit
        - page
      properties:
        request_id:
          type: string
          description: A unique identifier for this metadata retrieval request.
          example: '{{request_id}}'
        campaign_fields:
          $ref: '#/components/schemas/CampaignMetaSearchFieldsV5'
        include_child_campaigns:
          type: boolean
          default: false
          description: >
            When `true`, returns child campaign metadata for periodic campaigns.


            Activates the following response fields on each campaign object:

            - `total_child_campaigns` - number of child campaigns (present on
            the parent campaign).

            - `parent_campaign_id` - the parent campaign's ID (present on each
            child campaign).


            Defaults to `false`.
        limit:
          type: integer
          description: >
            The number of campaigns to display per page.


            **Maximum:** 15. The response does not include a `total_count` field
            - to determine the total number of results, keep paginating until a
            response returns fewer items than `limit`.
          minimum: 1
          maximum: 15
          example: 15
        page:
          type: integer
          description: >
            The page number to retrieve.


            For example, if there are 200 campaigns and the limit is 10, there
            will be 20 pages.
          minimum: 1
          example: 1
    V5SuccessEnvelope:
      type: object
      properties:
        response_id:
          type: string
        type:
          type: string
          example: campaign
        data:
          type: object
    CampaignMetaListResponseData:
      type: object
      description: >
        The response does not include a `total_count` field. To determine
        whether you have reached the last page, check whether the number of
        items returned is less than the `limit` you requested. If `campaigns`
        contains fewer items than `limit`, you have retrieved all results.
      required:
        - campaigns
      properties:
        campaigns:
          type: array
          items:
            $ref: '#/components/schemas/CampaignMetaResponseV5'
    V5ErrorEnvelope:
      type: object
      properties:
        response_id:
          type: string
        error:
          type: object
          properties:
            code:
              type: string
              enum:
                - VALIDATION_FAILED
                - UNPROCESSABLE_ENTITY
                - BAD_REQUEST
                - RATE_LIMITED
                - UNAUTHORIZED
                - INTERNAL_ERROR
                - FORBIDDEN
            message:
              type: string
            target:
              type: string
            details:
              type: array
              items:
                type: object
                properties:
                  target:
                    type: string
                  message:
                    type: string
            request_id:
              type: string
              description: >
                The `request_id` from the originating request. Use this to
                correlate a failed response back to the specific call that
                triggered it, particularly useful in high-volume or retry
                scenarios.


                In V1, `request_id` appeared inside the `error` object. V5
                preserves this field in the same location.
    CampaignMetaSearchFieldsV5:
      type: object
      description: Filter criteria for retrieving campaign metadata.
      properties:
        id:
          type: string
          description: |
            The unique identifier of the campaign to retrieve.
          example: '{{campaign_id}}'
        channels:
          type: array
          items:
            type: string
            enum:
              - EMAIL
              - PUSH
              - SMS
              - WHATSAPP
              - FACEBOOK
              - GOOGLE ADS
              - CONNECTORS
          description: |
            Include campaigns for any of these channels.
          example:
            - PUSH
            - EMAIL
        created_by:
          type: array
          items:
            type: string
            format: email
          description: Include campaigns created by any of these users (email addresses).
          example:
            - user@example.com
        created_date:
          type: object
          description: Filter campaigns by creation date range.
          properties:
            from_date:
              type: string
              format: date-time
              description: Start of the creation date range (ISO 8601 format).
              example: '2024-01-01T00:00:00'
            to_date:
              type: string
              format: date-time
              description: End of the creation date range (ISO 8601 format).
              example: '2024-12-31T23:59:59'
        delivery_type:
          type: string
          enum:
            - ONE_TIME
            - PERIODIC
            - EVENT_TRIGGERED
            - BUSINESS_EVENT_TRIGGERED
            - DEVICE_TRIGGERED
            - LOCATION_TRIGGERED
          description: |
            Filter campaigns by delivery type.
        name:
          type: string
          description: Filter campaigns by name. Partial matches are supported.
          example: Summer Sale
        status:
          type: array
          items:
            type: string
            enum:
              - DRAFT
              - SCHEDULED
              - ACTIVE
              - PAUSED
              - SENT
              - SENDING
              - STOPPED
              - ARCHIVED
          description: Include campaigns in any of these statuses.
        tags:
          type: array
          items:
            type: string
          description: Include campaigns that have any of these tags.
          example:
            - promotional
            - seasonal
    CampaignMetaResponseV5:
      type: object
      description: >
        Campaign metadata including basic information and reachability details.


        **V1 compatibility:**

        - All field names are preserved from the V1 Get Campaign Meta response:
        `campaign_id`, `campaign_name`, `campaign_status`,
        `campaign_delivery_type`, `campaign_team`, `campaign_tags`,
        `campaign_start_time`.

        - No field has been renamed in V5.

        - V5 adds one new field: `version_number` (present only when campaign
        versioning is enabled).
      properties:
        campaign_id:
          type: string
          description: The unique ID of the campaign.
          example: camp_abc123xyz
        version_number:
          type: integer
          description: >
            Monotonic version index for this campaign document when campaign
            versioning is enabled. `campaign_id` is the canonical identifier
            across versions.
        channel:
          type: string
          enum:
            - EMAIL
            - PUSH
            - SMS
            - WHATSAPP
            - FACEBOOK
            - GOOGLE ADS
            - CONNECTORS
          description: The communication channel.
        platform:
          type: array
          items:
            type: string
            enum:
              - ANDROID
              - IOS
              - WEB
          description: The platform types supported for the campaign (applicable for Push).
        created_by:
          type: string
          format: email
          description: The email ID of the user who created the campaign.
        campaign_delivery_type:
          type: string
          enum:
            - ONE_TIME
            - PERIODIC
            - EVENT_TRIGGERED
            - BUSINESS_EVENT_TRIGGERED
            - DEVICE_TRIGGERED
            - LOCATION_TRIGGERED
            - BROADCAST_LIVE_ACTIVITY
          description: The delivery type of the campaign.
        campaign_name:
          type: string
          description: The name of the campaign.
          example: Summer Sale Campaign
        campaign_team:
          type: string
          description: The team name associated with the campaign.
        campaign_tags:
          type: array
          items:
            type: string
          description: Tags associated with the campaign.
        campaign_status:
          type: string
          enum:
            - DRAFT
            - SCHEDULED
            - ACTIVE
            - PAUSED
            - SENT
            - SENDING
            - STOPPED
            - ARCHIVED
          description: The current status of the campaign.
        campaign_start_time:
          type: string
          format: date-time
          description: >-
            The start time of the campaign in ISO 8601 format. This value is
            returned in UTC.
          example: '2024-11-28T12:18:00'
        parent_campaign_id:
          type: string
          description: >
            The `id` (24-character ObjectId) of the parent campaign.


            Only shown if the requested `id` belongs to a child campaign and
            `include_child_campaigns` is true.
        total_child_campaigns:
          type: integer
          description: >
            The number of child campaigns.


            Only shown if the campaign_id belongs to a parent campaign. Only
            applicable for periodic campaigns.
        rejection_comment:
          type: string
          description: >
            The reason a campaign was rejected during review.


            Only present when the campaign's current status is `DRAFT` after a
            rejection.
        reachability_details:
          type: object
          nullable: true
          description: >
            Reachability information for the campaign.


            **Availability:** Only populated for **scheduled** campaigns of
            these delivery types:

            - One-time scheduled campaigns

            - Business event-triggered campaigns

            - Event-triggered campaigns


            For all other campaign types (periodic, device-triggered,
            location-triggered, etc.), this field is `null`.


            Reachability is an estimated value calculated once daily and cached
            for 24 hours.

            Multiple API calls within the same day return the cached value. The
            count may vary over

            time as users install or uninstall the app, or change their
            subscription status.
          properties:
            count:
              type: integer
              description: The estimated number of users the scheduled campaign will reach.
              example: 18182
            last_updated_time:
              type: string
              format: date-time
              description: >-
                The timestamp when reachability was last calculated, in ISO 8601
                format. This value is returned in UTC.
              example: '2024-11-27T09:05:42.661000'
  responses:
    V5Unauthorized:
      description: Authentication failure.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/V5ErrorEnvelope'
          example:
            response_id: abc-101
            error:
              code: UNAUTHORIZED
              message: Invalid or missing credentials.
              details: []
    V5InternalError:
      description: Unhandled server-side failure.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/V5ErrorEnvelope'
          example:
            response_id: abc-101
            error:
              code: INTERNAL_ERROR
              message: Internal server error.
              details: []
  securitySchemes:
    BasicAuth:
      type: http
      scheme: basic
      description: >
        Authentication is done via Basic Auth. This requires a base64-encoded
        string of your credentials in the format 'username:password'.


        - **Username**: Use your MoEngage workspace ID (also known as the App
        ID). You can find it in the MoEngage dashboard at **Settings** >
        **Account** > **APIs** > **Workspace ID (earlier app id)**.

        - **Password**: On your MoEngage workspace, navigate to **Settings** →
        **Account** → **API keys** and click **Create new key**. The tab lists
        every API surface (Data, Segmentation, Push, Email, Campaigns,
        Templates, and more) and exposes per-resource actions. For Campaigns,
        ensure the **View**, **Create & Manage**, and **Create, Manage &
        Publish** checkboxes are selected.


        For more information on authentication and getting your credentials,
        refer to [Getting your
        credentials](/api/introduction#getting-your-credentials).


        Send the value in the `Authorization` header as `Basic` followed by
        Base64-encoding of `appkey:apisecret` (workspace ID and API key).

````