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

# Get Campaign (V5)

> Returns the full configuration and current status of a single campaign by its ID.


<Note>
  **SMS campaigns:** SMS campaigns are returned by this endpoint; the response `channel` field will be `SMS`. The `connector` and `sender_name` fields carry SMS-specific details. SMS campaigns can be retrieved but must be created and managed through the MoEngage dashboard or V1 APIs in the interim.
</Note>

#### Rate Limits

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

<Note>
  **Notes**

  * Breaching the limits will reject the request.
  * Per-hour limits use a rolling window of the last 1 hour.
</Note>


## OpenAPI

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


    **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. **Publish** - Transition the draft to **ACTIVE** by sending `{ "status":
    "PUBLISH" }` in a PATCH request.

    6. **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).


    **Header change from V1 to V5:** The `MOE-APPKEY` request header is replaced
    by `X-MOE-Tenant-ID` in V5.

    - `X-MOE-Tenant-ID` is optional. When omitted, the workspace is resolved
    from the Basic Auth credentials in the `Authorization` header.

    - If you set the workspace via a header, use `X-MOE-Tenant-ID` in V5 in
    place of `MOE-APPKEY`.
  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/{campaign_id}:
    get:
      tags:
        - Get Campaign Details
      summary: Get Campaign (V5)
      description: >
        Returns the full configuration and current status of a single campaign
        by its ID.
      operationId: get_single_campaign_v5
      parameters:
        - $ref: '#/components/parameters/X-MOE-Tenant-ID'
        - $ref: '#/components/parameters/X-MOE-Request-Id'
        - name: campaign_id
          in: path
          required: true
          description: Raw 24-char ObjectId of the campaign to retrieve.
          schema:
            type: string
          examples:
            get_campaign_by_id:
              summary: Get campaign by ID
              value: '{{campaign_id}}'
            get_sms_campaign:
              summary: Get an SMS campaign
              value: '{{sms_campaign_id}}'
      responses:
        '200':
          description: Campaign details retrieved successfully.
          content:
            application/json:
              schema:
                allOf:
                  - $ref: '#/components/schemas/V5SuccessEnvelope'
                  - type: object
                    properties:
                      data:
                        $ref: '#/components/schemas/CampaignDetailsResponse'
              examples:
                scheduled_push_campaign:
                  summary: Scheduled one-time Push campaign (Android + iOS)
                  value:
                    response_id: abc-100
                    type: campaign
                    data:
                      id: 64a1b2c3d4e5f6a7b8c9d0e1
                      campaign_id: 64a1b2c3d4e5f6a7b8c9d0e1
                      status: SCHEDULED
                      channel: PUSH
                      campaign_delivery_type: ONE_TIME
                      created_by: marketer@example.com
                      updated_by: marketer@example.com
                      created_at: '2024-07-04 08:00:54.847000'
                      updated_at: '2024-07-04 09:15:00.000000'
                      basic_details:
                        name: Summer Sale Push
                        platforms:
                          - ANDROID
                          - IOS
                        tags:
                          - promotional
                          - seasonal
                        team: Growth Team
                      campaign_content:
                        content:
                          push:
                            android:
                              template_type: BASIC
                              basic_details:
                                title: Summer Sale — Up to 50% off
                                message: Shop now before the sale ends.
                                default_click_action: DEEPLINKING
                                default_click_action_value: https://example.com/sale
                            ios:
                              template_type: BASIC
                              basic_details:
                                title: Summer Sale — Up to 50% off
                                message: Shop now before the sale ends.
                                default_click_action: DEEPLINKING
                                default_click_action_value: https://example.com/sale
                      scheduling_details:
                        delivery_type: SCHEDULED
                        schedule_time: '2024-11-28T12:00:00'
                        time_zone: UTC
                      segmentation_details:
                        included_filters:
                          filter_operator: and
                          filters:
                            - filter_type: custom_segments
                              name: segment
                              id: seg_abc123
                      delivery_controls:
                        bypass_dnd: false
                        ignore_frequency_capping: false
                      utm_params:
                        utm_source: moengage
                        utm_medium: push
                        utm_campaign: summer_sale_2024
                active_email_campaign:
                  summary: Active periodic Email campaign (promotional)
                  value:
                    response_id: abc-101
                    type: campaign
                    data:
                      id: 64a1b2c3d4e5f6a7b8c9d0e2
                      campaign_id: 64a1b2c3d4e5f6a7b8c9d0e2
                      status: ACTIVE
                      channel: EMAIL
                      campaign_delivery_type: PERIODIC
                      created_by: marketer@example.com
                      updated_by: marketer@example.com
                      created_at: '2024-01-01 08:00:00.000000'
                      updated_at: '2024-06-15 10:30:00.000000'
                      basic_details:
                        name: Weekly Newsletter
                        content_type: PROMOTIONAL
                        subscription_category: newsletter
                        user_attribute_identifier: Email (Standard)
                        tags:
                          - newsletter
                        team: Retention Team
                      connector:
                        connector_type: SENDGRID
                        connector_name: SendgridPrimary
                      campaign_content:
                        content:
                          email:
                            subject: Your weekly digest is here
                            preview_text: See what's new this week
                            sender_name: MoEngage Team
                            from_address: hello@example.com
                            reply_to_address: support@example.com
                      scheduling_details:
                        delivery_type: PERIODIC
                        frequency: WEEKLY
                        schedule_time: '09:00:00'
                        time_zone: America/New_York
                      segmentation_details:
                        included_filters:
                          filter_operator: and
                          filters:
                            - filter_type: custom_segments
                              name: segment
                              id: seg_xyz789
                      utm_params:
                        utm_source: moengage
                        utm_medium: email
                        utm_campaign: weekly_newsletter
                      campaign_audience_limit:
                        is_campaign_audience_limit_enabled: false
        '400':
          $ref: '#/components/responses/V5ValidationError'
        '401':
          $ref: '#/components/responses/V5Unauthorized'
        '500':
          $ref: '#/components/responses/V5InternalError'
      x-codeSamples:
        - lang: Shell
          label: Get campaign by ID (cURL)
          source: >
            curl -X GET
            'https://api-{dc}.moengage.com/v5/campaigns/{{campaign_id}}' \
              -H 'Authorization: Basic {{auth_token}}' \
              -H 'X-MOE-Tenant-ID: {{workspace_id}}' \
              -H 'X-MOE-Request-Id: {{request_id}}'
        - lang: Shell
          label: Get an SMS campaign (cURL)
          source: >
            curl -X GET
            'https://api-{dc}.moengage.com/v5/campaigns/{{sms_campaign_id}}' \
              -H 'Authorization: Basic {{auth_token}}' \
              -H 'X-MOE-Tenant-ID: {{workspace_id}}' \
              -H 'X-MOE-Request-Id: {{request_id}}'    
components:
  parameters:
    X-MOE-Tenant-ID:
      name: X-MOE-Tenant-ID
      in: header
      required: false
      description: >
        Workspace tenant ID. Set this to the workspace (App) ID from
        **Settings** > **Account** > **APIs** > **Workspace ID**.


        This header is optional. When omitted, the API resolves the workspace
        from the Basic Auth credentials in the `Authorization` header.


        In the V1 Campaigns API, the workspace ID was passed via the
        `MOE-APPKEY` request header. In V5, this header is renamed to
        `X-MOE-Tenant-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
  schemas:
    V5SuccessEnvelope:
      type: object
      properties:
        response_id:
          type: string
        type:
          type: string
          example: campaign
        data:
          type: object
    CampaignDetailsResponse:
      type: object
      description: >
        Detailed information about a campaign returned by GET
        `/v5/campaigns/{campaign_id}` and

        POST `/v5/campaigns/search`.


        **Identifier change from V1 to V5:**

        - In V1, the campaign identifier was returned as `campaign_id`. In V5,
        it is returned as `id`.

        - The legacy `campaign_id` field may also be present alongside `id` for
        backward compatibility, but `id` is the canonical V5 identifier.


        **V1 fields preserved in V5 under the same names:** `created_by`,
        `updated_by`, `created_at`, `updated_at`, `sent_time`, `flow_id`,
        `flow_name`, `parent_id`, `connector`, `utm_params`,
        `campaign_audience_limit`.
      properties:
        id:
          type: string
          description: |
            The unique document identifier for this campaign revision.

            In V1, this field was `campaign_id`. In V5, it is `id`.
          example: 64a1b2c3d4e5f6a7b8c9d0e1
        campaign_id:
          type: string
          description: >
            The canonical campaign identifier shared across all versions of the
            campaign when

            campaign versioning is enabled. In non-versioned workspaces,
            `campaign_id` equals `id`.
          example: camp_abc123xyz
        version_number:
          type: integer
          description: >
            Monotonic version index for this campaign document when campaign
            versioning is enabled. Publishing edits to a previously published
            campaign creates a new document with a higher `version_number`.
            `campaign_id` is the canonical identifier shared across versions;
            `id` is unique per document.
        status:
          type: string
          enum:
            - DRAFT
            - ACTIVE
            - SCHEDULED
            - PAUSED
            - SENT
            - SENDING
            - STOPPED
            - ARCHIVED
            - RETIRED
          description: The current status of the campaign.
        channel:
          type: string
          enum:
            - PUSH
            - EMAIL
            - SMS
          description: The communication channel.
        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.
        created_by:
          type: string
          format: email
          description: The email ID of the user who created the campaign.
        updated_by:
          type: string
          format: email
          description: The email ID of the user who last updated the campaign.
        created_at:
          type: string
          description: The timestamp when the campaign was created.
          example: '2024-07-04 08:00:54.847000'
        updated_at:
          type: string
          description: The timestamp when the campaign was last updated.
        sent_time:
          type: string
          description: The timestamp when the campaign was sent.
          example: '2024-07-04 20:32:00'
        flow_id:
          type: string
          description: |
            The flow ID (only for flow campaigns).

            Only applicable when `include_child_campaigns` is true.
        flow_name:
          type: string
          description: |
            The flow name (only for flow campaigns).

            Only applicable when `include_child_campaigns` is true.
        parent_id:
          type: string
          description: >
            The campaign ID of the parent campaign.


            Only applicable for periodic child campaigns when
            `include_child_campaigns` is true.
        basic_details:
          description: >
            Basic campaign settings - name, tags, team, platform targets, and
            channel-specific

            identifiers. Structure varies by channel:

            - **Push:** See `PushBasicDetailsV5` schema (name, platforms, tags,
            team, geofences, etc.)

            - **Email:** See `EmailBasicDetailsV5` schema (name, content_type,
            subscription_category, user_attribute_identifier, etc.)

            - **SMS:** connector, sender name, and similar fields.
          oneOf:
            - $ref: '#/components/schemas/PushBasicDetailsV5'
            - $ref: '#/components/schemas/EmailBasicDetailsV5'
        campaign_content:
          description: >
            The full campaign content payload including locales and A/B test
            variations.

            Structure varies by channel:

            - **Push:** See `PushCampaignContent` schema.

            - **Email:** See `EmailCampaignContent` schema.
          oneOf:
            - $ref: '#/components/schemas/PushCampaignContent'
            - $ref: '#/components/schemas/EmailCampaignContent'
        trigger_condition:
          description: >
            Trigger condition for event-triggered campaigns. Structure varies by
            channel:

            - **Push:** See `PushTriggerCondition` schema (supports
            INTELLIGENT_DELAY).

            - **Email:** See `EmailTriggerCondition` schema.
          oneOf:
            - $ref: '#/components/schemas/PushTriggerCondition'
            - $ref: '#/components/schemas/EmailTriggerCondition'
        segmentation_details:
          $ref: '#/components/schemas/SegmentationDetails'
        scheduling_details:
          description: >
            Scheduling configuration as resolved on the campaign. The response
            is a normalized, read-only view and can include fields that are not
            part of the `SchedulingDetails` request schema:

            - `delivery_type` may be returned as `SCHEDULED` (a resolved
            response value, not one of the request enum values).

            - `schedule_time` holds the resolved send time and corresponds to
            the request-side `start_time`.

            - `time_zone` holds the resolved IANA time zone the schedule is
            interpreted in.


            Treat these as response-only fields. Use the `SchedulingDetails`
            request schema when constructing create or update payloads.
          allOf:
            - $ref: '#/components/schemas/SchedulingDetails'
        delivery_controls:
          description: >
            Delivery control settings. Structure varies by channel:

            - **Push:** See `PushDeliveryControls` schema (bypass_dnd,
            campaign_throttle_rpm, ignore_frequency_capping, etc.)

            - **Email:** See `EmailDeliveryControls` schema.
          oneOf:
            - $ref: '#/components/schemas/PushDeliveryControls'
            - $ref: '#/components/schemas/EmailDeliveryControls'
        advanced:
          description: >-
            Advanced campaign settings (for Push campaigns). See the
            `AdvancedDetails` schema for child properties such as
            `expiration_settings` and `platform_level_priority`.
          allOf:
            - $ref: '#/components/schemas/AdvancedDetails'
        conversion_goal_details:
          $ref: '#/components/schemas/ConversionGoalDetails'
        control_group_details:
          $ref: '#/components/schemas/ControlGroupDetails'
        utm_params:
          $ref: '#/components/schemas/UTMParams'
        connector:
          type: object
          description: |
            Connector configuration (for Email and SMS campaigns).
          properties:
            connector_type:
              type: string
              example: SENDGRID
            connector_name:
              type: string
              example: default
        sender_name:
          type: string
          description: |
            The sender name configured for the campaign.

            Only applicable for SMS campaigns.
        campaign_audience_limit:
          $ref: '#/components/schemas/CampaignAudienceLimit'
    PushBasicDetailsV5:
      type: object
      description: >
        Identifying metadata for the Push campaign, including name, team, tags,
        and platform targeting.


        For field-by-field rules, conditional requirements, and
        platform-specific delivery flags (Android `push_amp_plus_enabled`, iOS
        provisional-push audience flags), refer to [Push campaign
        metadata](/api/campaigns/campaign-content-reference#push-campaign-metadata).
      properties:
        name:
          type: string
          description: The name of the campaign.
          example: Summer Sale Push Notification
        business_event:
          type: string
          description: |
            The business event to be mapped to the campaign.

            **Required** for BUSINESS_EVENT_TRIGGERED campaigns.
          example: user_signup
        tags:
          type: array
          items:
            type: string
          description: Tags that provide context about the campaign's nature or theme.
          example:
            - activation
            - summer_sale
        team:
          type: string
          description: >
            The name of the team collaborating on this campaign.

            For more information, refer to [Teams in
            MoEngage](https://help.moengage.com/hc/en-us/articles/360028586211-Teams-in-MoEngage).
          example: marketing_team
        platforms:
          type: array
          items:
            type: string
            enum:
              - ANDROID
              - IOS
              - WEB
          description: The platforms to target for this Push campaign.
          example:
            - ANDROID
            - IOS
        broadcast_live_activity_id:
          type: string
          description: >
            The broadcast live activity ID for iOS Live Activities.


            **Required** when platform is iOS and delivery_type is
            BROADCAST_LIVE_ACTIVITY.


            **Not applicable in the draft-based creation flow.**
            `BROADCAST_LIVE_ACTIVITY` is not supported via POST `/v5/campaigns`.
          example: live_check123
        geofences:
          $ref: '#/components/schemas/Geofences'
        send_to_triggered_platform_only:
          type: boolean
          description: >-
            Whether to send the campaign only to the platform that triggered the
            event. Applicable for event-triggered campaigns.
        platform_specific_details:
          $ref: '#/components/schemas/PlatformSpecificDetails'
    EmailBasicDetailsV5:
      type: object
      description: >
        Identifying metadata for the Email campaign, including name, team, tags,
        and subscription category.


        **Conditional requirements:** `name`, `content_type`,
        `user_attribute_identifier`, and `subscription_category` are strictly
        required only when using the `/v5/campaigns/test` endpoint in **inline
        mode**. They are not required at campaign creation time (V5 supports
        progressive creation, where components are added later via PATCH) and
        are not needed in **draft mode** tests, where content comes from the
        saved draft.
      properties:
        name:
          type: string
          description: Any string name for the test or campaign.
          example: Summer Sale Email
        business_event:
          type: string
          description: The business event to be mapped to the campaign.
          example: user_signup
        content_type:
          type: string
          enum:
            - PROMOTIONAL
            - TRANSACTIONAL
          description: >-
            The type of content in the campaign. "PROMOTIONAL" or
            "TRANSACTIONAL".
        subscription_category:
          type: string
          description: >
            The subscription category for promotional email campaigns. **Must
            match a valid category configured in your workspace.**


            **Required** for PROMOTIONAL email campaigns and inline tests.
          example: marketing
        tags:
          type: array
          items:
            type: string
          description: Tags that provide context about the campaign's nature or theme.
          example:
            - activation
            - summer_sale
        team:
          type: string
          description: The name of the team collaborating on this campaign.
          example: marketing_team
        user_attribute_identifier:
          type: string
          default: Email (Standard)
          description: >
            The user attribute that stores the recipient email address. Use
            "Email (Standard)" for email channels.
          example: Email (Standard)
    PushCampaignContent:
      type: object
      description: >
        Push message content, locales, and A/B variations.


        For full `POST /v5/campaigns` request examples that include
        `campaign_content`, refer to `campaign_delivery_type` on
        `PushCampaignCreateV5Request`, `VariationDetails`, and the Create
        Campaign Draft code samples.


        For per-template-type runnable payloads, refer to [Android push
        content](/api/campaigns/campaign-content-reference#android-push-content),
        [iOS push
        content](/api/campaigns/campaign-content-reference#ios-push-content), or
        [Web push
        content](/api/campaigns/campaign-content-reference#web-push-content).
      properties:
        locales:
          type: array
          items:
            type: string
          description: >
            Additional locale names for multi-language campaigns. List only the
            non-default locales here (for example, `"en-US"`, `"es-ES"`). The
            `"default"` locale is always implicitly present and must not be
            included in this array.
          example:
            - en-US
            - es-ES
        variation_details:
          $ref: '#/components/schemas/VariationDetails'
        content:
          type: object
          description: >
            The campaign message payload. Two shapes are accepted:


            - **Flat shape (no locales or variations):** Pass a flat `push`
            object directly under `content`.

            - **Locale-keyed and variation-keyed shape:** Key by locale name,
            then by variation name: `content[locale_name][variation_name] = {
            push: { ... } }`. The `"default"` locale key is always required and
            serves as the fallback. Additional locale keys must match values
            listed in `locales`.

            <Warning>

            If your V1 integration used locale-variation wrapping, you must
            continue using that structure in V5. The flat format is only valid
            when no locales or A/B variations are configured on the campaign.

            </Warning>


            For runnable payloads for both shapes, refer to [Content payload
            structure](/api/campaigns/campaign-content-reference#content-payload-structure).
          properties:
            push:
              $ref: '#/components/schemas/PushContent'
          additionalProperties:
            type: object
            description: Variation-keyed content blocks for a single locale.
            additionalProperties:
              type: object
              properties:
                push:
                  $ref: '#/components/schemas/PushContent'
    EmailCampaignContent:
      type: object
      description: >
        Email content, locales, and A/B variations.


        For full `POST /v5/campaigns` request examples that include
        `campaign_content`, refer to `campaign_delivery_type` on
        `EmailCampaignCreateV5Request`, `VariationDetails`, and the Create
        Campaign Draft code samples.


        For Email content variants, including `html_content` versus
        `custom_template_id`, CC/BCC, attachments, and editor selection (`Froala
        Editor` versus `Ace Editor`), refer to [Email
        content](/api/campaigns/campaign-content-reference#email-content).
      properties:
        locales:
          type: array
          items:
            type: string
          description: >
            Additional locale names for multi-language campaigns. List only the
            non-default locales here (for example, `"en-US"`, `"es-ES"`). The
            `"default"` locale is always implicitly present and must not be
            included in this array.
          example:
            - en-US
            - es-ES
        variation_details:
          $ref: '#/components/schemas/VariationDetails'
        content:
          type: object
          description: >
            The campaign message payload. Two shapes are accepted:


            - **Flat shape (no locales or variations):** Pass a flat `email`
            object directly under `content`.

            - **Locale-keyed and variation-keyed shape:** Key by locale name,
            then by variation name: `content[locale_name][variation_name] = {
            email: { ... } }`. The `"default"` locale key is always required and
            serves as the fallback. Additional locale keys must match values
            listed in `locales`.


            For runnable payloads for both shapes, refer to [Content payload
            structure](/api/campaigns/campaign-content-reference#content-payload-structure).
          properties:
            email:
              $ref: '#/components/schemas/EmailContent'
          additionalProperties:
            type: object
            description: Variation-keyed content blocks for a single locale.
            additionalProperties:
              type: object
              properties:
                email:
                  $ref: '#/components/schemas/EmailContent'
    PushTriggerCondition:
      type: object
      description: >
        Trigger condition details for Push event-triggered, device-triggered,
        and related campaigns.


        **Required** for `EVENT_TRIGGERED`, `DEVICE_TRIGGERED`, and
        `LOCATION_TRIGGERED` Push campaigns.


        For per-delay-type runnable payloads (`ASAP`, `DELAY` with
        `AFTER`/`BEFORE`, `INTELLIGENT_DELAY`), filter primitives, and
        primary/secondary filter combinations, refer to [Trigger
        conditions](/api/campaigns/audience-scheduling-delivery-reference#trigger-conditions).
      properties:
        included_filters:
          $ref: '#/components/schemas/FilterGroup'
        secondary_included_filters:
          allOf:
            - $ref: '#/components/schemas/FilterGroup'
          description: >-
            Additional filters that must also be satisfied for the trigger to
            fire. For runnable examples, refer to [Primary and secondary trigger
            filters](/api/campaigns/audience-scheduling-delivery-reference#primary-and-secondary-trigger-filters).
        trigger_delay_type:
          type: string
          enum:
            - DELAY
            - ASAP
            - INTELLIGENT_DELAY
          description: |
            The type of triggered delay.

            When set to DELAY, the following fields are mandatory:
            - trigger_delay_value
            - trigger_delay_granularity
            - trigger_relation
        trigger_delay_value:
          type: string
          description: The numeric value of the triggered delay.
        trigger_delay_granularity:
          type: string
          enum:
            - MINUTES
            - HOURS
            - DAYS
          description: The time unit for the trigger delay.
        trigger_relation:
          type: string
          enum:
            - BEFORE
            - AFTER
          description: |
            The trigger relation with delay.

            **Required** when trigger_delay_type is DELAY.
        trigger_attr:
          type: string
          description: >-
            The attribute value of the trigger. Pass the string `"If Action"`
            for event-triggered campaigns.
        intelligent_delay_optimization:
          type: object
          description: >
            Configuration for intelligent delay optimization.


            Used when trigger_delay_type is INTELLIGENT_DELAY. Defines a time
            window (min/max delay) within which the system finds the optimal
            moment to send the message.
          properties:
            min_delay_value:
              type: integer
              description: >-
                The numeric component of the lower bound for the intelligent
                delay window.
            min_delay_granularity:
              type: string
              enum:
                - MINUTES
                - HOURS
              description: The time unit that qualifies the min_delay_value.
            max_delay_value:
              type: integer
              description: >-
                The numeric component of the upper bound for the intelligent
                delay window.
            max_delay_granularity:
              type: string
              enum:
                - HOURS
                - DAYS
              description: The time unit that qualifies the max_delay_value.
    EmailTriggerCondition:
      type: object
      description: >
        Trigger condition details for Email event-triggered campaigns.


        **Required** for EVENT_TRIGGERED campaigns.


        For per-delay-type runnable payloads (`ASAP`, `DELAY` with
        `AFTER`/`BEFORE`), filter primitives, and primary/secondary filter
        combinations, refer to [Trigger
        conditions](/api/campaigns/audience-scheduling-delivery-reference#trigger-conditions).
      properties:
        included_filters:
          $ref: '#/components/schemas/FilterGroup'
        secondary_included_filters:
          allOf:
            - $ref: '#/components/schemas/FilterGroup'
          description: >-
            Additional filters that must also be satisfied for the Email trigger
            to fire. For runnable examples, refer to [Primary and secondary
            trigger
            filters](/api/campaigns/audience-scheduling-delivery-reference#primary-and-secondary-trigger-filters).
        trigger_delay_type:
          type: string
          enum:
            - DELAY
            - ASAP
          description: |
            The type of triggered delay.

            When set to DELAY, the following fields are mandatory:
            - trigger_delay_value
            - trigger_delay_granularity
            - trigger_relation
        trigger_delay_value:
          type: string
          description: The numeric value of the triggered delay.
        trigger_delay_granularity:
          type: string
          enum:
            - MINUTES
            - HOURS
            - DAYS
          description: The time unit for the trigger delay.
        trigger_relation:
          type: string
          enum:
            - BEFORE
            - AFTER
          description: |
            The trigger relation with delay.

            **Required** when trigger_delay_type is DELAY.
        trigger_attr:
          type: string
          description: >-
            The attribute value of the trigger. Pass the string `"If Action"`
            for event-triggered campaigns.
    SegmentationDetails:
      type: object
      description: >
        Defines the target audience for the campaign.


        For included/excluded filter combinations, filter primitives
        (`user_attributes`, `actions`, `custom_segments`), and opt-out
        targeting, refer to [Campaign
        audience](/api/campaigns/audience-scheduling-delivery-reference#campaign-audience).
      properties:
        included_filters:
          $ref: '#/components/schemas/FilterGroup'
        excluded_filters:
          allOf:
            - $ref: '#/components/schemas/FilterGroup'
          description: |
            Filters that exclude users from the campaign audience.
        is_all_user_campaign:
          type: boolean
          description: Whether to include all users in the campaign.
        send_campaign_to_opt_out_users:
          type: boolean
          description: >-
            Whether to send the campaign to users who have opted out. For
            runnable examples, refer to [Campaign
            audience](/api/campaigns/audience-scheduling-delivery-reference#campaign-audience).
    SchedulingDetails:
      type: object
      description: >
        Defines when the campaign should be sent.


        For per-delivery-type runnable payloads (`ASAP`, `AT_FIXED_TIME`,
        `SEND_IN_BTS`, `SEND_IN_USER_TIMEZONE`, and `PERIODIC` with
        `periodic_details`), refer to [Campaign delivery
        schedule](/api/campaigns/audience-scheduling-delivery-reference#campaign-delivery-schedule).
      properties:
        delivery_type:
          type: string
          enum:
            - ASAP
            - AT_FIXED_TIME
            - SEND_IN_BTS
            - SEND_IN_USER_TIMEZONE
          description: |
            When to deliver the campaign.
        start_time:
          type: string
          format: date-time
          description: |
            The start time for the campaign in ISO 8601 format.

            Example: "2024-06-21T12:59:00"
        expiry_time:
          type: string
          format: date-time
          description: |
            The expiry time for the campaign in ISO 8601 format.
        periodic_details:
          $ref: '#/components/schemas/PeriodicDetails'
        bts_details:
          $ref: '#/components/schemas/BTSDetails'
        user_timezone_details:
          $ref: '#/components/schemas/UserTimezoneDetails'
        geo_fence_timelimit:
          type: object
          description: >
            Defines the delivery time window for location-triggered campaigns.
            When configured, notifications are delivered only within the
            specified schedule.


            **Applicable for:** `LOCATION_TRIGGERED` campaigns.
          properties:
            notification_schedule:
              type: string
              enum:
                - ALWAYS
                - LIMITED_TIME
              description: >-
                Controls when delivery is permitted. Set to `ALWAYS` to allow
                delivery at any time, or `LIMITED_TIME` to restrict delivery to
                the configured time bounds.
            timebounds:
              type: array
              description: >
                One or more start and end time windows within which delivery is
                permitted.


                **Required** when `notification_schedule` is `LIMITED_TIME`.
              items:
                type: object
                properties:
                  start_time:
                    type: string
                    format: date-time
                    description: Start of the delivery window in ISO 8601 format.
                    example: '2027-06-19T11:02:00'
                  end_time:
                    type: string
                    format: date-time
                    description: End of the delivery window in ISO 8601 format.
                    example: '2029-06-20T13:55:00'
    PushDeliveryControls:
      type: object
      description: >
        Controls for Push campaign delivery behavior.


        For per-delivery-type runnable examples (throttle, event-triggered,
        device-triggered, location-triggered, queuing), refer to [Push delivery
        controls](/api/campaigns/audience-scheduling-delivery-reference#push-delivery-controls).
      properties:
        bypass_dnd:
          type: boolean
          description: |
            Whether to bypass Do Not Disturb settings.

            Required for event-triggered campaigns.
        campaign_throttle_rpm:
          type: integer
          description: >
            The campaign throttle in requests per minute.


            Not applicable for device-triggered, location-triggered, and
            event-triggered campaigns.
          example: 50000
        count_for_frequency_capping:
          type: boolean
          description: Whether to count this campaign for frequency capping.
        ignore_frequency_capping:
          type: boolean
          description: Whether to ignore frequency capping for this campaign.
        minimum_delay_between_two_notification_in_hour:
          type: integer
          description: |
            Minimum delay between two notifications in hours.

            Applies to event-triggered and device-triggered campaigns.
        max_time_to_show_message_of_same_camapign:
          type: string
          description: >
            Maximum duration (in hours) that a message from this campaign will
            be displayed to a user.


            Applicable for device-triggered campaigns.
        expiry_time_of_sync_data_in_hour:
          type: string
          description: >
            Duration (in hours) after which synced campaign data will expire if
            trigger condition is not met.


            Applicable for device-triggered campaigns.
        send_message_in_offline_mode:
          type: boolean
          description: |
            Whether to store and deliver the message when the device is offline.

            Applicable for device-triggered campaigns.
        send_limit_value:
          type: string
          description: >
            Maximum number of times a user can receive this campaign within the
            specified time granularity.


            Applicable for location-triggered campaigns.
        send_limit_granularity_in_hours:
          type: string
          description: >
            Time window (in hours) during which the send_limit_value is
            enforced.


            Applicable for location-triggered campaigns.
        ignore_global_minimum_delay:
          type: boolean
          description: >
            Whether to bypass the global minimum delay setting configured at the
            workspace level.


            When `true`, this campaign ignores the workspace-wide minimum
            interval between push notifications

            and can be delivered to a user regardless of how recently they
            received another push. Use this

            for time-sensitive campaigns (for example, transactional or
            alert-style messages) where

            respecting the global delay would reduce delivery timeliness.


            Applies to event-triggered campaigns.
        queuing_enabled:
          type: boolean
          description: >
            Whether queuing is enabled for this campaign. When `true`, messages
            that cannot be delivered immediately are queued for later delivery
            within the `queue_duration` window.


            Push only. Not supported for device-triggered or location-triggered
            campaigns.


            This is a flag-gated feature. Contact your MoEngage account team to
            enable it for your workspace.
        queue_duration:
          type: integer
          minimum: 0
          maximum: 48
          description: >
            Duration in hours during which queued messages will be attempted for
            delivery. Valid range is 1–48 hours. Must be `0` when
            `queuing_enabled` is `false`.


            This is a flag-gated feature. Contact your MoEngage account team to
            enable it for your workspace.
    EmailDeliveryControls:
      type: object
      description: >
        Controls for Email campaign delivery behavior.


        For runnable examples, refer to [Email delivery
        controls](/api/campaigns/audience-scheduling-delivery-reference#email-delivery-controls).
      properties:
        bypass_dnd:
          type: boolean
          description: Whether to bypass Do Not Disturb settings.
        campaign_throttle_rpm:
          type: integer
          description: The campaign throttle in requests per minute.
          example: 2000
        count_for_frequency_capping:
          type: boolean
          description: Whether to count this campaign for frequency capping.
        ignore_frequency_capping:
          type: boolean
          description: Whether to ignore frequency capping for this campaign.
        minimum_delay_between_two_notification_in_hour:
          type: integer
          description: Minimum delay between two notifications in hours.
    AdvancedDetails:
      type: object
      description: >
        Advanced Push delivery settings, including notification expiration and
        per-platform priority.


        For runnable iOS APNS priority and Android priority examples, refer to
        [Advanced Push
        settings](/api/campaigns/audience-scheduling-delivery-reference#advanced-push-settings).
      properties:
        expiration_settings:
          type: object
          properties:
            expire_notification_after_value:
              type: integer
              description: The numeric value for the notification expiration time.
            expire_notification_after_type:
              type: string
              enum:
                - HOUR
                - DAY
              description: The time unit for notification expiration.
            remove_from_inbox_after_value:
              type: integer
              description: The numeric value for when to remove the message from the inbox.
            remove_from_inbox_after_type:
              type: string
              enum:
                - DAY
              description: The time unit for removing the message from the inbox.
        platform_level_priority:
          type: object
          properties:
            android_specific_priority:
              type: object
              properties:
                send_with_priority:
                  type: boolean
                  description: Whether to send with priority.
            ios_specific_priority:
              type: object
              properties:
                apns_priority:
                  type: string
                  enum:
                    - '1'
                    - '5'
                    - '10'
                  description: The priority of notification delivery for APNS.
                interruption_level:
                  type: string
                  enum:
                    - PASSIVE
                    - ACTIVE
                    - TIME_SENSITIVE
                    - CRITICAL
                  description: The interruption level for iOS notifications.
                relevance_score:
                  type: number
                  enum:
                    - 0
                    - 0.5
                    - 1
                  description: The relevance score for iOS notifications.
    ConversionGoalDetails:
      type: object
      description: >
        Configuration for tracking campaign conversion goals.


        For runnable single-goal and multi-goal examples, refer to [Conversion
        goal
        tracking](/api/campaigns/audience-scheduling-delivery-reference#conversion-goal-tracking).
      properties:
        attribution_window_in_hours:
          type: integer
          description: The attribution window in hours.
          example: 36
        goals:
          type: array
          items:
            $ref: '#/components/schemas/Goal'
          description: List of conversion goals to track.
    ControlGroupDetails:
      type: object
      description: >
        Configuration for control groups.


        For runnable campaign-control-group and global-control-group examples,
        refer to [Control
        groups](/api/campaigns/audience-scheduling-delivery-reference#control-groups).
      properties:
        is_campaign_control_group_enabled:
          type: boolean
          description: Whether the campaign control group is enabled.
        campaign_control_group_percentage:
          type: integer
          minimum: 0
          maximum: 100
          description: |
            The percentage of users added to the exclusion list.

            **Required** if is_campaign_control_group_enabled is true.
        is_global_control_group_enabled:
          type: boolean
          description: |
            Whether the global control group is enabled.
    UTMParams:
      type: object
      description: >
        UTM parameters for tracking campaign performance. The five standard keys
        (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`)
        are explicitly defined.


        **Custom UTM parameters:** Up to 5 additional custom parameters can be
        passed as separate keys directly inside the `utm_params` object. Custom
        keys accept arbitrary names — the `utm_` prefix is a convention, not a
        requirement (for example, `utm_cust` or `campaign_source` are both
        accepted).


        For runnable examples, refer to [UTM
        parameters](/api/campaigns/audience-scheduling-delivery-reference#utm-parameters).
      properties:
        utm_source:
          type: string
          description: |
            The source of the traffic (for example, YouTube, Instagram, Google).

            **Required** when using UTM parameters.
          example: '{{utm_source}}'
        utm_medium:
          type: string
          description: |
            The channel type (for example, Push, SMS, Email).

            **Required** when using UTM parameters.
          example: '{{utm_medium}}'
        utm_campaign:
          type: string
          description: The name of the campaign (for example, Newyear, Bigbillionday).
          example: '{{utm_campaign}}'
        utm_term:
          type: string
          description: Search terms for paid traffic (for example, Mobile+sale).
        utm_content:
          type: string
          description: >-
            The content element that differentiates links (for example, banner,
            video).
        utm_custom:
          type: string
          description: >
            A single custom UTM parameter value. For multiple custom parameters,
            pass them as

            separate top-level keys inside the `utm_params` object using
            arbitrary `utm_`-prefixed

            names (for example, `utm_cust`, `utm_c1ust`, `utm_c2ust`). A maximum
            of 5 custom

            parameters is supported in total.
      additionalProperties:
        type: string
        description: >
          Arbitrary custom UTM parameters with `utm_`-prefixed key names (for
          example, `utm_cust`,

          `utm_c1ust`). Up to 5 custom parameters are supported in total across
          all custom keys.
    CampaignAudienceLimit:
      type: object
      description: >
        Configuration for capping the number of users a campaign can reach
        (max-send).


        For runnable `TOTAL` (lifetime cap), `INSTANCE` (per-send cap, Periodic
        Push only), and disabled-cap examples, refer to [Campaign audience
        cap](/api/campaigns/audience-scheduling-delivery-reference#campaign-audience-cap).


        **Supported channels:** Email, Push.


        **Supported delivery types:**

        - All delivery types support `frequency: TOTAL` (lifetime cap).

        - `frequency: INSTANCE` (per-send cap) is supported only for **Periodic
        Push** campaigns.

        - `campaign_audience_limit` is not supported for
        `BROADCAST_LIVE_ACTIVITY`.


        **Flag-gated feature:** This feature is not enabled by default for any
        workspace and requires

        explicit activation by your MoEngage account team. If you include
        `campaign_audience_limit` in

        a request on a workspace where the flag has not been enabled, the API
        returns a `400` with the

        following error body:


        ```json

        {
          "error": {
            "code": "VALIDATION_FAILED",
            "message": "Campaign Audience Limit feature is not enabled for this db",
            "target": "campaign_audience_limit",
            "details": [
              {
                "target": "campaign_audience_limit",
                "message": "Campaign Audience Limit feature is not enabled for this db"
              }
            ]
          },
          "response_id": "{{response_id}}"
        }

        ```


        When `is_campaign_audience_limit_enabled` is `true`, the fields
        `metric`, `frequency`, and

        `limit` are all required. When set to `false`, those three fields must
        not be provided.


        For `ONE_TIME` campaigns, only `limit` and
        `is_campaign_audience_limit_enabled` are supported. Do not pass `metric`
        or `frequency`, they are only valid for `PERIODIC` and `EVENT_TRIGGERED`
        campaigns. 

        Passing them for a ONE_TIME campaign causes the validate API to fail. 
      properties:
        is_campaign_audience_limit_enabled:
          type: boolean
          description: >
            Whether the campaign audience limit is active. Set to `true` to
            enforce the cap; `false` to disable.


            When `true`, `metric`, `frequency`, and `limit` are all required.

            When `false`, `metric`, `frequency`, and `limit` must not be
            provided.
        metric:
          type: string
          description: |
            The type of send event counted toward the limit.

            **Required** when `is_campaign_audience_limit_enabled` is `true`.
          enum:
            - SENT
          example: SENT
        frequency:
          type: string
          description: >
            The window over which the limit is applied.


            - `TOTAL` - applies the cap across the full lifetime of the
            campaign. Supported for all campaign types on both Email and Push.

            - `INSTANCE` - applies the cap per campaign instance (for example,
            per periodic send). Applicable to Periodic Push campaigns only.


            **Required** when `is_campaign_audience_limit_enabled` is `true`.
          enum:
            - TOTAL
            - INSTANCE
          example: TOTAL
        limit:
          type: integer
          minimum: 1
          maximum: 9999999999
          description: >
            The maximum number of users who can receive this campaign (or per
            instance, when

            `frequency` is `INSTANCE`). Must be between 1 and 9,999,999,999.


            **Required** when `is_campaign_audience_limit_enabled` is `true`.
          example: 100000
    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.
    Geofences:
      type: object
      description: >
        Geofence location details for location-triggered campaigns.


        **Required** for LOCATION_TRIGGERED campaigns.


        For per-`triggered_at` runnable payloads (`ENTRY`, `EXIT`, `dwell`) and
        the casing distinction between `ENTRY`/`EXIT` (uppercase) and `dwell`
        (lowercase), refer to [Geofence
        targeting](/api/campaigns/audience-scheduling-delivery-reference#geofence-targeting).
      required:
        - name
        - latitude
        - longitude
        - radius
        - response_time_value
        - response_time_granularity
        - triggered_at
      properties:
        name:
          type: string
          description: The unique name of the geofence location being targeted.
        latitude:
          type: string
          description: The latitude coordinate for the center of the geofence area.
        longitude:
          type: string
          description: The longitude coordinate for the center of the geofence area.
        radius:
          type: string
          description: >-
            The radius in meters from the center point that defines the boundary
            of the geofence.
        dwell_time_value:
          type: string
          description: >
            The numeric value for the time to wait before sending the message
            after the trigger condition is met.


            **Required** when triggered_at is set to "dwell".
        dwell_time_granularity:
          type: string
          enum:
            - MINUTES
            - HOURS
            - DAYS
          description: |
            The time unit for the dwell_time_value.

            **Required** when triggered_at is set to "dwell".
        response_time_value:
          type: string
          description: >-
            The numeric value for the time to wait before sending the message
            after the trigger condition is met.
        response_time_granularity:
          type: string
          enum:
            - MINUTES
            - HOURS
            - DAYS
          description: The time unit for the response_time_value.
        triggered_at:
          type: string
          enum:
            - ENTRY
            - EXIT
            - dwell
          description: >
            The user action that triggers the campaign (when user enters/exits
            the geofence).
    PlatformSpecificDetails:
      type: object
      description: >
        Platform-specific configuration details for Push.


        For runnable Android and iOS examples and the mutual-exclusion rule on
        iOS audience flags, refer to [Platform-specific delivery
        flags](/api/campaigns/campaign-content-reference#platform-specific-delivery-flags).
      properties:
        android:
          type: object
          properties:
            push_amp_plus_enabled:
              type: boolean
              default: false
              description: Whether Push Amp+ feature is enabled for this campaign.
        ios:
          type: object
          description: |
            **Note:** You must pass one of these keys as true for iOS.
          properties:
            send_to_all_eligible_device:
              type: boolean
              description: Whether to send the campaign to all eligible devices.
            exclude_provisional_push_devices:
              type: boolean
              description: Whether to exclude provisional push devices.
            send_to_only_provisional_push_enabled_devices:
              type: boolean
              description: Whether to send only to provisional push-enabled devices.
    VariationDetails:
      type: object
      description: >
        Configuration for A/B testing variations.


        For runnable `MANUAL` (fixed split) and `SHERPA` (auto-optimized)
        examples, refer to [A/B test
        variations](/api/campaigns/campaign-content-reference#a-b-test-variations).
      properties:
        distribution_type:
          type: string
          enum:
            - SHERPA
            - MANUAL
          description: >
            The traffic distribution method for A/B test variations.


            - `MANUAL` - you specify a fixed percentage split across variations.

            - `SHERPA` - MoEngage's AI-powered optimizer automatically shifts
            traffic toward the best-performing variation during the campaign
            run.
        no_of_variations:
          type: integer
          minimum: 1
          description: The number of A/B test variations.
          example: 2
        manual_distribution_percentage:
          type: object
          additionalProperties:
            type: integer
          description: >
            Fixed percentage of audience assigned to each variation. 

            **Note:** Variation keys must follow the `variation_N` naming format
            (e.g. `variation_1`, `variation_2`). Keys with any other format like
            `var_1`, `1`, `2` will be rejected with a validation error.


            **Required** when `distribution_type` is `MANUAL`.
          example:
            variation_1: 50
            variation_2: 50
        sherpa_campaign_duration:
          type: integer
          description: >
            Duration in hours over which MoEngage Sherpa collects performance
            data before declaring a winning variation.


            **Required** when `distribution_type` is `SHERPA`.
        sherpa_distribution_metric:
          type: string
          enum:
            - OPEN_RATE
            - CLICK_RATE
            - BOTH
          description: |
            The engagement metric Sherpa uses to evaluate and rank variations.

            **Required** when `distribution_type` is `SHERPA`.
    PushContent:
      type: object
      description: Push notification content for Android, iOS, and Web platforms.
      properties:
        android:
          $ref: '#/components/schemas/AndroidPushContent'
        ios:
          $ref: '#/components/schemas/IOSPushContent'
        web:
          $ref: '#/components/schemas/WebPushContent'
    EmailContent:
      type: object
      description: Email campaign content.
      properties:
        subject:
          type: string
          description: The subject line of the email.
          example: Exclusive Summer Sale - 50% Off!
        preview_text:
          type: string
          description: The preview text shown in email clients.
          example: Don't miss out on our biggest sale of the season
        sender_name:
          type: string
          description: The name of the sender that appears in the email.
          example: MoEngage Team
        from_address:
          type: string
          format: email
          description: The sender's email address.
          example: noreply@example.com
        reply_to_address:
          type: string
          format: email
          description: The reply-to email address.
          example: support@example.com
        cc_ids:
          type: array
          items:
            type: string
            format: email
          description: >-
            Email addresses to CC. For runnable examples, refer to [Email
            content
            variants](/api/campaigns/campaign-content-reference#email-content-variants).
        bcc_ids:
          type: array
          items:
            type: string
            format: email
          description: >-
            Email addresses to BCC. For runnable examples, refer to [Email
            content
            variants](/api/campaigns/campaign-content-reference#email-content-variants).
        html_content:
          type: string
          description: |
            The HTML content of the email.

            **Optional** if custom_template_id is provided.
          example: >-
            <!DOCTYPE html><html><head></head><body><p>Hello
            {{UserAttribute['First Name']}}</p></body></html>
        email_editor:
          type: string
          enum:
            - Froala Editor
            - Ace Editor
          description: >
            The HTML editor used for the email campaign.


            - **Required** if you want to create the campaign using the `Ace
            Editor`.

            - **Optional** if you want to use the default `Froala Editor`.
          example: Ace Editor
        custom_template_id:
          type: string
          description: |
            The ID of a custom email template.

            **Optional** if html_content is provided.

            When this field is provided, the following fields are not required:
            - subject
            - preview_text
            - sender_name
        custom_template_version:
          type: integer
          description: The version of the custom template.
        attachments:
          type: array
          items:
            type: object
            properties:
              file_type:
                type: string
                enum:
                  - URL
                  - PERSONALIZED_ATTACHMENT
              url:
                type: string
          description: |
            Attachments to include in the email.
    FilterGroup:
      type: object
      description: >
        A group of filters combined with a logical operator.


        For detailed segmentation payload and supported fields, refer to [Create
        Custom
        Segment](https://developers.moengage.com/hc/en-us/articles/13277936457748).
      properties:
        filter_operator:
          type: string
          enum:
            - and
            - or
          description: The logical operator to combine filters.
        filters:
          type: array
          items:
            oneOf:
              - $ref: '#/components/schemas/UserAttributeFilter'
              - $ref: '#/components/schemas/ActionFilter'
              - $ref: '#/components/schemas/CustomSegmentFilter'
          description: |
            The list of filters to be combined using the filter operator.

            Supported filter types:
            - User attributes-based filters
            - Action-based filters (with or without attributes)
            - Custom segments
    PeriodicDetails:
      type: object
      description: >
        Configuration for periodic campaigns.


        **Required** for PERIODIC campaigns.


        For runnable Daily, Weekly, Monthly (specific dates), and Monthly (first
        Monday) examples, refer to [Periodic
        schedules](/api/campaigns/audience-scheduling-delivery-reference#periodic-schedules).
      properties:
        sending_frequency:
          type: string
          enum:
            - DAILY
            - WEEKLY
            - MONTHLY
          description: The frequency to send the campaign.
        repeat_frequency:
          type: integer
          description: The repeat frequency of the campaign.
        no_of_occurences:
          type: integer
          description: The number of occurrences of the campaign.
        repeat_on_date_of_month:
          type: array
          items:
            type: integer
          description: |
            The dates of the month on which the campaign should be repeated.

            Example: [5, 25] to send on the 5th and 25th of each month.
        repeat_on_days_of_week:
          type: array
          items:
            type: string
            enum:
              - MONDAY
              - TUESDAY
              - WEDNESDAY
              - THURSDAY
              - FRIDAY
              - SATURDAY
              - SUNDAY
          description: |
            The days of the week on which the campaign should repeat.
        repeat_on_days_of_week_for_month:
          type: array
          items:
            type: object
            properties:
              week_granularity:
                type: string
                enum:
                  - FIRST
                  - SECOND
                  - THIRD
                  - FOURTH
                  - LAST
              repeat_on_days_of_week:
                type: array
                items:
                  type: string
                  enum:
                    - MONDAY
                    - TUESDAY
                    - WEDNESDAY
                    - THURSDAY
                    - FRIDAY
                    - SATURDAY
                    - SUNDAY
          description: |
            Configuration for repeating on specific weeks of the month.
    BTSDetails:
      type: object
      description: >
        Best Time to Send (BTS) configuration.


        BTS selects an optimal send time per user based on historical engagement
        patterns.


        For the field schema and required-when-`SEND_IN_BTS` rule, refer to
        [Best Time to
        Send](/api/campaigns/audience-scheduling-delivery-reference#best-time-to-send).
      properties:
        send_in_bts:
          type: boolean
          description: Whether to send the campaign at the best time.
        if_user_bts_is_not_available:
          type: string
          description: When to send the campaign if the user's best time is not available.
        if_user_bts_outside_time_window:
          type: string
          description: >-
            When to send the campaign if the user's best time is outside the
            time window.
        window_end_time:
          type: string
          description: The window end time.
          example: 6:43 am
    UserTimezoneDetails:
      type: object
      description: >
        Configuration for sending in the user's timezone.


        For the field schema and required-when-`SEND_IN_USER_TIMEZONE` rule,
        refer to [User
        timezone](/api/campaigns/audience-scheduling-delivery-reference#user-timezone).
      properties:
        send_in_user_timezone:
          type: boolean
          description: >-
            Whether to send the campaign on a specific date and time within the
            user's timezone.
        send_if_user_timezone_has_passed:
          type: boolean
          description: Whether to send the campaign if the user's timezone has passed.
    Goal:
      type: object
      description: A single conversion goal configuration.
      properties:
        goal_name:
          type: string
          description: The name of the goal.
          example: Goal 1
        goal_event_name:
          type: string
          description: The event name associated with this goal.
        goal_event_attribute:
          $ref: '#/components/schemas/GoalEventAttribute'
        is_primary_goal:
          type: boolean
          description: Whether this is the primary goal.
        revenue_attribute:
          type: string
          description: The revenue attribute to track.
        revenue_currency:
          type: string
          description: The currency for revenue tracking.
    AndroidPushContent:
      type: object
      description: Android push notification content.
      properties:
        template_type:
          type: string
          enum:
            - BASIC
            - STYLIZED_BASIC
            - SIMPLE_IMAGE_CAROUSEL
            - IMAGE_BANNER_WITH_TEXT
            - TIMER
            - TIMER_WITH_PROGRESS_BAR
            - Custom
          description: >
            The type of Android push template.


            **Note:** If you are passing a template ID, set template_type to
            "Custom" and use `custom_template_id`.
        custom_template_id:
          type: string
          description: |
            The ID of the custom template.

            **Required** when template_type is "Custom".
        custom_template_version:
          type: integer
          description: The version of the custom template.
        basic_details:
          $ref: '#/components/schemas/AndroidBasicDetails'
        timer:
          $ref: '#/components/schemas/AndroidTimer'
        buttons:
          type: array
          items:
            $ref: '#/components/schemas/AndroidButton'
          description: Action buttons for the notification.
        advanced:
          $ref: '#/components/schemas/AndroidAdvanced'
        template_backup:
          $ref: '#/components/schemas/AndroidTemplateBackup'
    IOSPushContent:
      type: object
      description: iOS push notification content.
      properties:
        template_type:
          type: string
          enum:
            - BASIC
            - STYLIZED_BASIC
            - SIMPLE_IMAGE_CAROUSEL
            - Custom
          description: |
            The type of iOS push template.
        custom_template_id:
          type: string
          description: |
            The ID of the custom template.

            **Required** when template_type is "Custom".
        custom_template_version:
          type: integer
          description: The version of the custom template.
        basic_details:
          $ref: '#/components/schemas/IOSBasicDetails'
        buttons:
          type: array
          items:
            $ref: '#/components/schemas/IOSButton'
          description: Action buttons for the notification.
        advanced:
          $ref: '#/components/schemas/IOSAdvanced'
        template_backup:
          $ref: '#/components/schemas/IOSTemplateBackup'
    WebPushContent:
      type: object
      description: Web push notification content.
      properties:
        template_type:
          type: string
          enum:
            - BASIC
          description: The template type for web push (currently only BASIC is supported).
        basic_details:
          $ref: '#/components/schemas/WebBasicDetails'
        buttons:
          type: array
          items:
            $ref: '#/components/schemas/WebButton'
          description: |
            Action buttons for the notification.
        advanced:
          $ref: '#/components/schemas/WebAdvanced'
    UserAttributeFilter:
      type: object
      title: User attributes-based filters
      description: Filter based on user attributes.
      properties:
        filter_type:
          type: string
          enum:
            - user_attributes
        data_type:
          type: string
          enum:
            - string
            - double
            - datetime
            - bool
          description: The data type of the attribute being filtered.
        category:
          type: string
          description: The category of the attribute (e.g., "Tracked Standard Attribute").
        name:
          type: string
          description: The name of the attribute to filter on (e.g., "uid").
        operator:
          type: string
          description: >
            The operator to use in the filter. Allowed values depend on
            data_type:

            - bool: is, exists

            - double: in, between, lessThan, greaterThan, exists

            - string: in, contains, containsInTheFollowing,
            startWithInTheFollowing, endsWithInTheFollowing, exists, is

            - datetime: inTheLast, on, between, before, after, inTheNext,
            exists, today
        value:
          description: The value to filter on (not required for 'exists' operator).
        case_sensitive:
          type: boolean
          description: Whether the filter comparison should be case-sensitive.
        negate:
          type: boolean
          description: Whether to negate the filter condition.
        is_dynamic_value:
          type: boolean
          description: >
            When `true`, the filter value is treated as a dynamic expression and
            resolved at send time rather than evaluated as a literal string.


            Set this to `true` for Business Event-triggered campaigns where the
            filter value references a Business Event attribute, for example,
            `{{BusinessEventAttribute['season']}}`.
        project_name:
          type: string
          description: |
            The name of the project associated with the user attributes.

            **Required** if the Portfolio feature is enabled in your workspace.
    ActionFilter:
      type: object
      title: Action-based filters (with or without attributes)
      description: >
        Filter based on user actions/events. Use inside
        `segmentation_details.included_filters.filters` or
        `trigger_condition.included_filters.filters`.
      properties:
        filter_type:
          type: string
          enum:
            - actions
        action_name:
          type: string
          description: The name of the action/event to filter on.
        execution:
          type: object
          properties:
            type:
              type: string
              enum:
                - atleast
                - atmost
                - exactly
            count:
              type: integer
        executed:
          type: boolean
          description: Whether the action was executed.
        attributes:
          $ref: '#/components/schemas/FilterGroup'
        condition:
          type: string
          description: The condition type. Must be passed as the string "IF".
    CustomSegmentFilter:
      type: object
      title: Custom segments
      description: Filter using a custom segment.
      properties:
        filter_type:
          type: string
          enum:
            - custom_segments
        name:
          type: string
          description: The name of the custom segment.
        id:
          type: string
          description: The ID of the custom segment.
    GoalEventAttribute:
      type: object
      description: Attributes associated with the conversion goal event.
      properties:
        name:
          type: string
          description: The name of the goal event attribute.
        condition:
          type: string
          description: >-
            The condition used while creating the goal (e.g., "is", "contains",
            "between").
        data_type:
          type: string
          enum:
            - STRING
            - DOUBLE
            - BOOL
            - NUMBER
            - GEOPOINT
            - DATETIME
            - ARRAY_DOUBLE
            - ARRAY_STRING
            - OBJECT
            - ARRAY_OBJECT
          description: The data type of the attribute.
        value:
          type: string
          description: >
            The value of the goal event attribute.

            Supported data types: STRING, DOUBLE, BOOL, NUMBER, GEOPOINT,
            DATETIME, ARRAY_DOUBLE, ARRAY_STRING.
        value1:
          type: string
          description: >
            A secondary value, used for conditions like 'between'.

            Supported data types: STRING, DOUBLE, BOOL, NUMBER, GEOPOINT,
            DATETIME, ARRAY_DOUBLE, ARRAY_STRING.
        negate:
          type: boolean
          description: Whether to negate the filter condition.
        value_type:
          type: string
          description: The type of value being filtered.
        array_filter_type:
          type: string
          description: The logical filter type for array attributes.
        filters:
          type: array
          items:
            type: object
          description: A list of sub-filters used when data_type is OBJECT or ARRAY_OBJECT.
        is_case_sensitive:
          type: boolean
          description: Whether the goal event attribute is case-sensitive.
    AndroidBasicDetails:
      type: object
      description: >
        Basic details for the Android push notification. 


        Fields vary by template_type. All templates support common fields like
        title, message, default_click_action.
      properties:
        notification_channel:
          type: string
          description: The Android notification channel where the push will be sent.
          example: general
        include_app_name_and_time:
          type: boolean
          description: >
            Whether to include the application's name and timestamp within the
            banner image.


            **Supported Templates:** Image Banner with Text
        background_color_code:
          type: string
          description: >
            The hex code for the notification's background color.


            **Supported Templates:** Stylized Basic, Simple Image Carousel,
            Image Banner with Text
          example: '#9a4444'
        app_name_color_code:
          type: string
          description: >
            The hex code for the color of the application's name text.


            **Supported Templates:** Stylized Basic, Simple Image Carousel,
            Image Banner with Text
          example: '#dea1a1'
        notification_control_color:
          type: string
          enum:
            - LIGHT
            - DARK
          description: >
            The color scheme for the notification's control elements (action
            buttons).


            **Supported Templates:** Stylized Basic, Simple Image Carousel,
            Image Banner with Text
        include_title_and_message:
          type: boolean
          description: >
            Whether to include the notification's title and message text within
            the banner image.


            **Supported Templates:** Image Banner with Text
        apply_background_color_in_text_editor:
          type: boolean
          description: >
            Whether to apply the specified background color within the rich text
            editor for preview.


            **Supported Templates:** Stylized Basic, Simple Image Carousel,
            Image Banner with Text
        title:
          type: string
          description: The main title of the push notification.
          example: Limited Time Offer!
        message:
          type: string
          description: >
            The message body of the push notification.


            You can use HTML in the message parameter to apply rich text
            formatting, including text color and styles.
          example: Get 50% off on all items. Shop now!
        summary:
          type: string
          description: The summary text for the notification.
        image_url:
          type: string
          format: uri
          description: The image URL for the push notification.
          example: https://example.com/images/promo.jpg
        image_scaling:
          type: string
          enum:
            - FIT_INSIDE_IMAGE_CONTAINER
            - FILL_IMAGE_CONTAINER
          description: >
            The scaling behavior for images within the carousel template.


            **Supported Templates:** Simple Image Carousel, Image Banner with
            Text
        banner_image_url:
          type: string
          format: uri
          description: >
            The URL for the background image used in the Image Banner Text
            template.


            **Required for:** Image Banner with Text template
        input_gif_url:
          type: string
          format: uri
          description: |
            The URL for the GIF media used in the push campaign content.

            **Supported Templates:** Basic
        collapsed_push_notification:
          type: string
          description: >
            The configuration for the notification's collapsed state (view
            before user expands it).


            **Supported Templates:** Image Banner with Text
          example: SAME_AS_TEMPLATE_BACKUP
        carousel_content:
          $ref: '#/components/schemas/CarouselContent'
        default_click_action:
          type: string
          enum:
            - DEEPLINKING
            - NAVIGATE_TO_A_SCREEN
            - RICH_LANDING
          description: >-
            The action performed when the main body of the notification is
            clicked.
        default_click_action_value:
          type: string
          description: The URL or deep link to open when the notification is clicked.
          example: https://example.com/sale
        key_value_pairs:
          type: array
          items:
            $ref: '#/components/schemas/KeyValuePair'
          description: Custom key-value pairs for the notification payload.
    AndroidTimer:
      type: object
      description: |
        Timer configuration for Timer and Timer with Progress Bar templates.

        **Required for:** TIMER and TIMER_WITH_PROGRESS_BAR templates
      properties:
        timer_ends_at:
          type: string
          enum:
            - DURATION
            - SPECIFIC_TIME_USER_TIMEZONE
            - SPECIFIC_TIME_CAMPAIGN_TIMEZONE
          description: How the timer's endpoint is determined.
        specific_time:
          type: string
          format: date-time
          description: |
            The specific time when the timer ends.

            **Required** when personalized_value is true.
        time_period:
          type: string
          description: >
            The time period for the timer.


            **Required** when timer_ends_at is SPECIFIC_TIME_USER_TIMEZONE or
            SPECIFIC_TIME_CAMPAIGN_TIMEZONE.
        personalized_value:
          type: boolean
          description: |
            Whether the timer duration is personalized per user.

            If false, all users get the same duration.
        duration_hour:
          type: string
          description: |
            The number of hours the timer will run for.

            **Required** when personalized_value is false.
          example: '2'
        duration_minute:
          type: string
          description: |
            The number of minutes the timer will run for (in addition to hours).

            **Required** when personalized_value is false.
          example: '30'
    AndroidButton:
      type: object
      description: Action button configuration for Android push notifications.
      properties:
        btn_name:
          type: string
          description: The text to be displayed on the button.
          example: Shop Now
        click_action_type:
          type: string
          enum:
            - DEEPLINKING
            - NAVIGATE_TO_A_SCREEN
            - RICH_LANDING
            - CALL
            - SHARE
            - COPY
            - SET_USER_ATTRIBUTE
            - TRACK_EVENT
            - CUSTOM_ACTION
            - SNOOZE
            - REMIND_LATER
          description: The type of action to perform when the button is clicked.
        click_action_name:
          type: string
          description: The name of the click action.
        click_action_value:
          type: string
          description: The URL or deep link to open for the button's action.
          example: https://example.com/product
        key_value_pairs:
          type: array
          items:
            $ref: '#/components/schemas/KeyValuePair'
          description: Custom key-value pairs specific to this button's click event.
    AndroidAdvanced:
      type: object
      description: >-
        Platform-level advanced settings for push delivery - TTL, priority,
        badge count, and similar controls.
      properties:
        coupon_code:
          type: string
          description: The coupon code to be included in the push payload.
          example: SUMMER50
        icon_type_in_notification:
          type: string
          description: The icon type to be included in the push payload.
          example: app_icon
        use_large_icon:
          type: boolean
          description: Whether to use a large icon in the notification.
        make_notification_sticky:
          type: boolean
          description: |
            When enabled, the user cannot swipe away the notification.
        dismiss_button_text:
          type: string
          description: >
            The text to display on the dismiss button.


            **Required** when make_notification_sticky is true or
            auto_dismiss_notification is true.
        auto_dismiss_notification:
          type: boolean
          description: Whether the notification can be auto-dismissed.
        auto_dismiss_notification_time_value:
          type: integer
          description: |
            The time value after which to auto-dismiss the notification.

            **Required** when auto_dismiss_notification is true.
        auto_dismiss_notification_time_granularity:
          type: string
          enum:
            - DAYS
            - HOURS
            - MINUTES
          description: |
            The time unit for auto-dismiss.

            **Required** when auto_dismiss_notification is true.
        group_key:
          type: string
          description: >
            The group key used to identify and categorize related push
            notifications.


            **Note:**

            - Use the same group key for all push notifications you want to
            group

            - MoEngage automatically modifies the group key to ensure it doesn't
            exceed 45 characters

            - Non-Latin scripts, special characters, and spaces are removed
        collapse_replace_key:
          type: string
          description: >
            The update key used to identify and update related push
            notifications.


            Ensure you use the same update key for all push notifications
            intended to update each other.
    AndroidTemplateBackup:
      type: object
      description: >
        Fallback notification content for when the template cannot be rendered.


        **Required for:** Stylized Basic, Simple Image Carousel, Image Banner
        with Text, Timer, and Timer with Progress Bar templates
      properties:
        title:
          type: string
          description: The title for the fallback notification.
        message:
          type: string
          description: The message body for the fallback notification.
        summary:
          type: string
          description: The summary for the fallback notification.
        image_url:
          type: string
          format: uri
          description: The URL of an image for the fallback notification.
        default_click_action:
          type: string
          enum:
            - DEEPLINKING
            - NAVIGATE_TO_A_SCREEN
            - RICH_LANDING
          description: The default click action for the fallback notification.
        default_click_action_value:
          type: string
          description: The URL or deep link for the fallback's click action.
        key_value_pairs:
          type: array
          items:
            $ref: '#/components/schemas/KeyValuePair'
          description: Custom key-value pairs specific to the fallback payload.
    IOSBasicDetails:
      type: object
      description: Basic details for the iOS push notification.
      properties:
        background_color_code:
          type: string
          description: |
            The hexadecimal color code for the notification's background.

            **Supported Templates:** Simple Image Carousel, Stylized Basic
          example: '#a0a0a0'
        apply_background_color_in_text_editor:
          type: boolean
          description: |
            Whether to apply the background color within the text editor view.

            **Supported Templates:** Simple Image Carousel, Stylized Basic
        title:
          type: string
          description: The main title of the push notification.
          example: New Message
        message:
          type: string
          description: The main body text of the notification.
          example: You have a new message waiting for you
        subtitle:
          type: string
          description: The subtitle displayed below the main title.
        allow_bg_refresh:
          type: boolean
          description: >-
            Whether to allow the app to be woken up in the background to refresh
            content.
        rich_media_type:
          type: string
          enum:
            - Image
            - Video
            - GIF
          description: |
            The type of rich media to be included in the notification.

            **Supported Templates:** Basic
        rich_media_value:
          type: string
          format: uri
          description: >
            The URL of the rich media asset specified in the rich_media_type
            field.


            **Supported Templates:** Basic
        image_url:
          type: string
          format: uri
          description: >
            The URL of a large image to be displayed within the notification
            content.


            **Note:** Required when template_type is SIMPLE_IMAGE_CAROUSEL.
        input_gif_url:
          type: string
          format: uri
          description: |
            The URL for the GIF media used in the push campaign content.

            **Supported Templates:** Basic, Stylized Basic
        carousel_content:
          $ref: '#/components/schemas/IOSCarouselContent'
        default_click_action:
          type: string
          enum:
            - DEEPLINKING
            - NAVIGATE_TO_A_SCREEN
            - RICH_LANDING
          description: >-
            The action performed when the main body of the notification is
            tapped.
        default_click_action_value:
          type: string
          description: The URL or deep link associated with the default click action.
        key_value_pairs:
          type: array
          items:
            $ref: '#/components/schemas/KeyValuePair'
          description: >-
            Custom key-value pairs sent with the push payload for in-app
            handling.
    IOSButton:
      type: object
      description: Action button configuration for iOS push notifications.
      properties:
        button_category:
          type: string
          description: >
            The pre-defined category name for a set of interactive buttons
            configured in the app.
          example: MOE_PUSH_TEMPLATE
    IOSAdvanced:
      type: object
      description: >-
        Platform-level advanced settings for push delivery - TTL, priority,
        badge count, and similar controls.
      properties:
        coupon_code:
          type: string
          description: The coupon code to be included in the push payload.
        sound_file:
          type: string
          description: >-
            The name of a custom sound file located in the app bundle to play
            upon receiving the notification.
        enable_ios_badge:
          type: boolean
          description: >-
            Whether this campaign allows the notification to increment the app's
            badge count.
        group_key:
          type: string
          description: >
            The group key used to identify and categorize related push
            notifications.


            **Note:**

            - Use the same group key for all push notifications you want to
            group

            - MoEngage automatically modifies the group key to ensure it doesn't
            exceed 45 characters

            - Non-Latin scripts, special characters, and spaces are removed
        collapse_replace_key:
          type: string
          description: >
            The update key used to identify and update related push
            notifications.


            Ensure you use the same update key for all push notifications
            intended to update each other.
    IOSTemplateBackup:
      type: object
      description: |
        Fallback notification content for when the template cannot be rendered.

        **Required for:** Stylized Basic and Simple Image Carousel templates
      properties:
        title:
          type: string
          description: The title for the fallback notification.
        message:
          type: string
          description: The message body for the fallback notification.
        subtitle:
          type: string
          description: The subtitle for the fallback notification.
        allow_bg_refresh:
          type: boolean
          description: >-
            Whether to enable background app refresh for the fallback
            notification.
        rich_media_type:
          type: string
          enum:
            - Image
            - Video
            - GIF
          description: The type of media attachment for the fallback.
        rich_media_value:
          type: string
          format: uri
          description: The URL of the media attachment for the fallback.
        default_click_action:
          type: string
          enum:
            - DEEPLINKING
            - NAVIGATE_TO_A_SCREEN
            - RICH_LANDING
          description: The default click action for the fallback notification.
        default_click_action_value:
          type: string
          description: The URL or deep link for the fallback's click action.
        key_value_pairs:
          type: array
          items:
            $ref: '#/components/schemas/KeyValuePair'
          description: Custom key-value pairs specific to the fallback payload.
    WebBasicDetails:
      type: object
      description: Basic details for the Web push notification.
      properties:
        title:
          type: string
          description: The title text displayed at the top of the notification.
          example: Special Offer
        message:
          type: string
          description: The main body text of the notification.
          example: Check out our latest deals!
        redirect_url:
          type: string
          format: uri
          description: >-
            The URL that the user is redirected to when they click the main body
            of the notification.
          example: https://example.com/offers
        image_url:
          type: string
          format: uri
          description: >-
            The URL of a large image to be displayed within the notification
            content.
        auto_dismiss_notification:
          type: boolean
          description: Whether the notification should auto-dismiss.
    WebButton:
      type: object
      description: Action button configuration for Web push notifications.
      properties:
        title:
          type: string
          description: The text displayed on the button.
          example: View Offer
        icon_url:
          type: string
          format: uri
          description: The URL of an icon to be displayed next to the button text.
        url:
          type: string
          format: uri
          description: >-
            The destination URL that the user is redirected to when they click
            this button.
    WebAdvanced:
      type: object
      description: >
        Platform-level advanced settings for push delivery - TTL, priority,
        badge count, and similar controls.
      properties:
        icon_image_type:
          type: string
          enum:
            - DEFAULT
            - ICON_URL
          description: The type of icon to use for the notification.
        icon_url:
          type: string
          format: uri
          description: The URL for a custom notification icon.
    CarouselContent:
      type: object
      description: |
        Configuration for image carousel in Simple Image Carousel template.

        **Required for:** Simple Image Carousel template
      properties:
        slider_transition:
          type: string
          enum:
            - MANUAL
            - AUTOMATIC
          description: >
            The transition type for the carousel slides.


            In earlier versions of this API, the accepted values were `manual`
            and `automatic` (lowercase). They are now `MANUAL` and `AUTOMATIC`
            (uppercase). Update any existing integrations that pass lowercase
            values.
        slide_data:
          type: array
          description: Array of slide configurations.
          items:
            type: object
            properties:
              image_url:
                type: string
                format: uri
                description: The image URL for this slide.
              image_click_action:
                type: string
                enum:
                  - DEEPLINKING
                  - RICH_LANDING
                  - NAVIGATE_TO_A_SCREEN
                description: The click action for this slide's image.
              image_click_action_value:
                type: string
                description: |
                  The click action value for this slide's image.

                  **Required** when image_click_action is provided.
              key_value_pairs:
                type: array
                items:
                  $ref: '#/components/schemas/KeyValuePair'
    KeyValuePair:
      type: object
      description: A custom key-value pair attached to the push payload.
      properties:
        key:
          type: string
          description: The key name.
        value:
          type: string
          description: The value.
    IOSCarouselContent:
      type: object
      description: |
        Configuration for image carousel in Simple Image Carousel template.

        **Required for:** Simple Image Carousel template
      properties:
        slider_transition:
          type: string
          enum:
            - MANUAL
            - AUTOMATIC
          description: >
            The transition type for the carousel slides.


            In earlier versions of this API, the accepted values were `manual`
            and `automatic` (lowercase). They are now `MANUAL` and `AUTOMATIC`
            (uppercase). Update any existing integrations that pass lowercase
            values.
        slide_data:
          type: array
          description: Array of slide configurations.
          items:
            type: object
            properties:
              image_url:
                type: string
                format: uri
                description: The image URL for this slide.
              image_click_action:
                type: string
                enum:
                  - DEEPLINKING
                  - RICH_LANDING
                  - NAVIGATE_TO_A_SCREEN
                description: The click action for this slide's image.
              image_click_action_value:
                type: string
                description: The click action value for this slide's image.
              key_value_pairs:
                type: array
                items:
                  $ref: '#/components/schemas/KeyValuePair'
  responses:
    V5ValidationError:
      description: Request failed schema or component validation.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/V5ErrorEnvelope'
          example:
            response_id: abc-101
            error:
              code: VALIDATION_FAILED
              message: One or more fields failed validation.
              request_id: req-push-001
              details:
                - target: campaign_delivery_type
                  message: campaign_delivery_type value is required.
    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).

````