MoEngage Create Campaigns API

The Create Campaigns API from MoEngage — 3 operation(s) for create campaigns.

Operations 3

POST /v5/campaigns Create Campaign Draft (V5) #
POST /v5/campaigns/{campaign_id}/validate Validate Campaign (V5) #
POST /campaigns Create Campaign #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/moengage-create-campaigns-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

moengage-create-campaigns-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Moengage Create Campaigns API
  version: '2025-11-20'
  contact:
    name: MoEngage Developer Team
    email: support@moengage.com
    url: https://developers.moengage.com
  description: 'Operations tagged Create Campaigns across 2 of this provider''s published API definitions: moengage-campaign-draft-openapi.yml, moengage-campaigns-openapi.yml. Each path carries the servers of the definition it was published in.'
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).
- url: https://api-{dc}.moengage.com/core-services/v1
  description: MoEngage Campaigns API Server
  variables:
    dc:
      default: '01'
      description: The ‘dc’ in the API Endpoint URL refers to the MoEngage Data Center (DC). MoEngage hosts each customer in a different DC. You can find your DC number and replace the value of ‘dc’ in the URL by referring to the DC and API endpoint mapping [here](/api/introduction#data-centers). Your MoEngage Data Center (DC) can be 01, 02, 03, 04, 05, 06, or 101.
security:
- BasicAuth: []
tags:
- name: Create Campaigns
paths:
  /v5/campaigns:
    post:
      operationId: create_draft_campaign_v5
      summary: Create Campaign Draft (V5)
      description: 'Creates a Push or Email campaign draft. Content, audience, and delivery settings can be included at the time of creation, or added later via `PATCH /v5/campaigns/{campaign_id}`.

        '
      x-mint:
        content: "\n<Info>\n**Component reference pages:**\n- For the full schema of `basic_details` and `campaign_content` per channel, platform, and template type :\n  - Android (`BASIC` / `STYLIZED_BASIC` / `SIMPLE_IMAGE_CAROUSEL` / `IMAGE_BANNER_WITH_TEXT` / `TIMER` / `TIMER_WITH_PROGRESS_BAR` / `Custom`)\n  - iOS (`BASIC` / `STYLIZED_BASIC` / `SIMPLE_IMAGE_CAROUSEL` / `Custom`)\n  - Web `BASIC`\n  - Email (`html_content` and `custom_template_id`), see [Campaign content reference](/api/campaigns/campaign-content-reference).\n- For the full schema of `trigger_condition`, `segmentation_details`, `scheduling_details`, `delivery_controls`, `conversion_goal_details`, `control_group_details`, `utm_params`, `campaign_audience_limit`, `advanced`, and `geofences`, see [Audience and delivery reference](/api/campaigns/audience-scheduling-delivery-reference).\n</Info>\n\n#### Rate Limits\n| Rate Limit Name | Rate Limit |\n| :--- | :--- |\n| Create campaign per second | The total number of create campaign operations per second per client allowed is 5. |\n| Create campaign per minute | The total number of create campaign operations per minute per client allowed is 25. |\n| Create campaign per hour | The total number of create campaign operations per hour per client allowed is 100. |\n\n### Campaign Creation Limits\n\nYou can create 5 campaigns per minute, 25 campaigns per hour, and 100 campaigns per day.\n\n<Note>\n**Notes**\n* Higher limit (Total Calls): The system permits a higher volume of total API calls (for example, 120 calls) to accommodate potential failures or retries.\n* Minimum limit (Campaign Creation Limits): The system maintains a stricter quota for actual successful creations (100 campaigns per day).\n\nExample: If a client submits 120 requests and 20 fail, they successfully generate exactly 100 campaigns.\nBecause the system applies the most restrictive threshold, the 100 successful operations trigger the quota limit, and the system issues a rate limit breach warning regardless of the total API calls made.\n* Breaching the limits will reject the request.\n* Per-hour and per-day limits use a rolling window of the last 1 hour and last 24 hours respectively.\n</Note>\n"
      tags:
      - Create Campaigns
      parameters:
      - $ref: '#/components/parameters/MOE-APPKEY'
      - $ref: '#/components/parameters/X-MOE-Request-Id'
      - $ref: '#/components/parameters/Idempotency-Key-Required'
      requestBody:
        description: 'Campaign payload. Required top-level fields are `channel`, `campaign_delivery_type`, and `created_by`. Optional sections (`basic_details`, `campaign_content`, audience, scheduling, and so on) can be omitted or supplied in full.

          **Note:** Use the tabs below to select your campaign type. The schema adapts based on the selected channel.'
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CampaignCreateV5Request'
            examples:
              push_one_time:
                summary: Push - ONE_TIME
                value:
                  request_id: '{{request_id}}'
                  channel: PUSH
                  campaign_delivery_type: ONE_TIME
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    platforms:
                    - ANDROID
                  campaign_content:
                    content:
                      push:
                        android:
                          template_type: BASIC
                          basic_details:
                            notification_channel: '{{notification_channel}}'
                            title: '{{title}}'
                            message: '{{message}}'
                            default_click_action: DEEPLINKING
                            default_click_action_value: '{{deep_link_url}}'
                  scheduling_details:
                    delivery_type: ASAP
              push_periodic:
                summary: Push - PERIODIC
                value:
                  request_id: '{{request_id}}'
                  channel: PUSH
                  campaign_delivery_type: PERIODIC
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    platforms:
                    - ANDROID
                    - IOS
                  campaign_content:
                    content:
                      push:
                        android:
                          template_type: BASIC
                          basic_details:
                            title: '{{title}}'
                            message: '{{message}}'
                  scheduling_details:
                    delivery_type: AT_FIXED_TIME
                    start_time: '{{start_time}}'
                    periodic_details:
                      sending_frequency: WEEKLY
                      repeat_frequency: 1
                      repeat_on_days_of_week:
                      - MONDAY
              email_one_time:
                summary: Email - ONE_TIME
                value:
                  request_id: '{{request_id}}'
                  channel: EMAIL
                  campaign_delivery_type: ONE_TIME
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    content_type: PROMOTIONAL
                    user_attribute_identifier: Email (Standard)
                    subscription_category: '{{subscription_category}}'
                  connector:
                    connector_type: '{{connector_type}}'
                    connector_name: '{{connector_name}}'
                  campaign_content:
                    content:
                      email:
                        subject: '{{email_subject}}'
                        sender_name: '{{sender_name}}'
                        from_address: '{{from_email}}'
                        html_content: '{{html_body}}'
                        email_editor: Froala Editor
                  scheduling_details:
                    delivery_type: ASAP
              email_event_triggered_delay:
                summary: Email - EVENT_TRIGGERED (with delay)
                value:
                  request_id: '{{request_id}}'
                  channel: EMAIL
                  campaign_delivery_type: EVENT_TRIGGERED
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    content_type: TRANSACTIONAL
                  connector:
                    connector_type: '{{connector_type}}'
                    connector_name: '{{connector_name}}'
                  trigger_condition:
                    included_filters:
                      filter_operator: and
                      filters:
                      - filter_type: actions
                        action_name: '{{action_name}}'
                        execution:
                          type: atleast
                          count: 1
                        executed: true
                        condition: IF
                    trigger_delay_type: DELAY
                    trigger_delay_value: 1
                    trigger_delay_granularity: HOURS
                    trigger_relation: AFTER
                    trigger_attr: If Action
                  campaign_content:
                    content:
                      email:
                        subject: '{{email_subject}}'
                        sender_name: '{{sender_name}}'
                        from_address: '{{from_address}}'
                        html_content: '{{html_body}}'
                  scheduling_details:
                    delivery_type: AT_FIXED_TIME
                    start_time: '{{start_time}}'
                    expiry_time: '{{expiry_time}}'
              push_event_triggered:
                summary: Push - EVENT_TRIGGERED
                value:
                  request_id: a1b2c3d4-e5f6-7890-abcd-ef1234567890
                  channel: PUSH
                  campaign_delivery_type: EVENT_TRIGGERED
                  created_by: marketer@example.com
                  basic_details:
                    name: Cart Abandonment - Push
                    platforms:
                    - ANDROID
                    - IOS
                  trigger_condition:
                    included_filters:
                      filter_operator: and
                      filters:
                      - filter_type: actions
                        action_name: cart_abandoned
                        execution:
                          type: atleast
                          count: 1
                        executed: true
                    trigger_delay_type: DELAY
                    trigger_delay_value: 1
                    trigger_delay_granularity: HOURS
                    trigger_relation: AFTER
                  campaign_content:
                    content:
                      push:
                        android:
                          template_type: BASIC
                          basic_details:
                            title: Items in your cart
                            message: You left something behind. Complete your purchase before it sells out.
                            default_click_action: DEEPLINKING
                            default_click_action_value: myapp://cart
                        ios:
                          template_type: BASIC
                          basic_details:
                            title: Items in your cart
                            message: You left something behind. Complete your purchase before it sells out.
                            default_click_action: DEEPLINKING
                            default_click_action_value: myapp://cart
                  scheduling_details:
                    delivery_type: AT_FIXED_TIME
                    start_time: '2026-07-01T00:00:00'
                    expiry_time: '2026-12-31T23:59:59'
                  delivery_controls:
                    bypass_dnd: false
                    minimum_delay_between_two_notification_in_hour: 24
                    ignore_global_minimum_delay: false
              push_business_event_triggered:
                summary: Push - BUSINESS_EVENT_TRIGGERED
                value:
                  request_id: '{{request_id}}'
                  channel: PUSH
                  campaign_delivery_type: BUSINESS_EVENT_TRIGGERED
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    business_event: '{{business_event_name}}'
                    platforms:
                    - ANDROID
                  campaign_content:
                    content:
                      push:
                        android:
                          template_type: BASIC
                          basic_details:
                            title: '{{title}}'
                            message: '{{message}}'
                  scheduling_details:
                    delivery_type: AT_FIXED_TIME
                    start_time: '{{start_time}}'
                    expiry_time: '{{expiry_time}}'
              push_device_triggered:
                summary: Push - DEVICE_TRIGGERED
                value:
                  request_id: '{{request_id}}'
                  channel: PUSH
                  campaign_delivery_type: DEVICE_TRIGGERED
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    platforms:
                    - ANDROID
                  trigger_condition:
                    included_filters:
                      filter_operator: and
                      filters:
                      - filter_type: actions
                        action_name: '{{device_trigger_event_name}}'
                        execution:
                          type: atleast
                          count: 1
                        executed: true
                    trigger_delay_type: ASAP
                  campaign_content:
                    content:
                      push:
                        android:
                          template_type: BASIC
                          basic_details:
                            title: '{{title}}'
                            message: '{{message}}'
                  delivery_controls:
                    max_time_to_show_message_of_same_camapign: '{{max_display_hours}}'
                    expiry_time_of_sync_data_in_hour: '{{sync_expiry_hours}}'
                    send_message_in_offline_mode: true
              push_location_triggered:
                summary: Push - LOCATION_TRIGGERED
                value:
                  request_id: '{{request_id}}'
                  channel: PUSH
                  campaign_delivery_type: LOCATION_TRIGGERED
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    platforms:
                    - ANDROID
                    - IOS
                    geofences:
                      name: '{{geofence_name}}'
                      latitude: '{{latitude}}'
                      longitude: '{{longitude}}'
                      radius: '{{radius_meters}}'
                      response_time_value: '5'
                      response_time_granularity: MINUTES
                      triggered_at: ENTRY
                  campaign_content:
                    content:
                      push:
                        android:
                          template_type: BASIC
                          basic_details:
                            title: '{{title}}'
                            message: '{{message}}'
                  delivery_controls:
                    send_limit_value: '{{max_sends_per_user}}'
                    send_limit_granularity_in_hours: '{{send_limit_window_hours}}'
              email_one_time_promotional:
                summary: Email - ONE_TIME promotional
                value:
                  request_id: '{{request_id}}'
                  channel: EMAIL
                  campaign_delivery_type: ONE_TIME
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    content_type: PROMOTIONAL
                    user_attribute_identifier: Email (Standard)
                    subscription_category: '{{subscription_category}}'
                  connector:
                    connector_type: SENDGRID
                    connector_name: '{{connector_name}}'
                  campaign_content:
                    content:
                      email:
                        subject: '{{email_subject}}'
                        sender_name: '{{sender_name}}'
                        from_address: '{{from_email}}'
                        html_content: '{{html_body}}'
                  scheduling_details:
                    delivery_type: ASAP
              email_one_time_transactional:
                summary: Email - ONE_TIME transactional
                value:
                  request_id: '{{request_id}}'
                  channel: EMAIL
                  campaign_delivery_type: ONE_TIME
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    content_type: TRANSACTIONAL
                    user_attribute_identifier: Email (Standard)
                  connector:
                    connector_type: '{{connector_type}}'
                    connector_name: '{{connector_name}}'
                  campaign_content:
                    content:
                      email:
                        subject: '{{email_subject}}'
                        sender_name: '{{sender_name}}'
                        from_address: '{{from_email}}'
                        html_content: '{{html_body}}'
                  scheduling_details:
                    delivery_type: ASAP
              email_periodic:
                summary: Email - PERIODIC
                value:
                  request_id: '{{request_id}}'
                  channel: EMAIL
                  campaign_delivery_type: PERIODIC
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    content_type: PROMOTIONAL
                    subscription_category: '{{subscription_category}}'
                  connector:
                    connector_type: '{{connector_type}}'
                    connector_name: '{{connector_name}}'
                  campaign_content:
                    content:
                      email:
                        subject: '{{email_subject}}'
                        sender_name: '{{sender_name}}'
                        from_address: '{{from_email}}'
                        html_content: '{{html_body}}'
                  scheduling_details:
                    delivery_type: AT_FIXED_TIME
                    start_time: '{{start_time}}'
                    periodic_details:
                      sending_frequency: WEEKLY
                      repeat_frequency: 1
                      repeat_on_days_of_week:
                      - TUESDAY
              email_event_triggered:
                summary: Email - EVENT_TRIGGERED
                value:
                  request_id: '{{request_id}}'
                  channel: EMAIL
                  campaign_delivery_type: EVENT_TRIGGERED
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    content_type: TRANSACTIONAL
                  connector:
                    connector_type: '{{connector_type}}'
                    connector_name: '{{connector_name}}'
                  trigger_condition:
                    included_filters:
                      filter_operator: and
                      filters:
                      - filter_type: actions
                        action_name: '{{action_name}}'
                        execution:
                          type: atleast
                          count: 1
                        executed: true
                    trigger_delay_type: ASAP
                  campaign_content:
                    content:
                      email:
                        subject: '{{email_subject}}'
                        sender_name: '{{sender_name}}'
                        from_address: '{{from_address}}'
                        html_content: '{{html_body}}'
                  scheduling_details:
                    delivery_type: AT_FIXED_TIME
                    start_time: '{{start_time}}'
                    expiry_time: '{{expiry_time}}'
              email_business_event_triggered:
                summary: Email - BUSINESS_EVENT_TRIGGERED
                value:
                  request_id: '{{request_id}}'
                  channel: EMAIL
                  campaign_delivery_type: BUSINESS_EVENT_TRIGGERED
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    business_event: '{{business_event_name}}'
                    content_type: TRANSACTIONAL
                  connector:
                    connector_type: '{{connector_type}}'
                    connector_name: '{{connector_name}}'
                  campaign_content:
                    content:
                      email:
                        subject: '{{email_subject}}'
                        sender_name: '{{sender_name}}'
                        from_address: '{{from_email}}'
                        html_content: '{{html_body}}'
                  scheduling_details:
                    delivery_type: AT_FIXED_TIME
                    start_time: '{{start_time}}'
                    expiry_time: '{{expiry_time}}'
              push_web_one_time:
                summary: Push - Web ONE_TIME
                value:
                  request_id: '{{request_id}}'
                  channel: PUSH
                  campaign_delivery_type: ONE_TIME
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    platforms:
                    - WEB
                  campaign_content:
                    content:
                      push:
                        web:
                          template_type: BASIC
                          basic_details:
                            title: '{{title}}'
                            message: '{{message}}'
                            redirect_url: '{{redirect_url}}'
                            image_url: '{{image_url}}'
                          buttons:
                          - title: '{{button_label}}'
                            url: '{{button_url}}'
                  scheduling_details:
                    delivery_type: ASAP
              push_multi_locale_ab_variation:
                summary: Push - Multi-locale with A/B variation
                value:
                  request_id: '{{request_id}}'
                  channel: PUSH
                  campaign_delivery_type: ONE_TIME
                  created_by: '{{user_email}}'
                  basic_details:
                    name: '{{campaign_name}}'
                    platforms:
                    - ANDROID
                  campaign_content:
                    locales:
                    - es-ES
                    variation_details:
                      distribution_type: MANUAL
                      no_of_variations: 2
                      manual_distribution_percentage:
                        variation_1: 50
                        variation_2: 50
                    content:
                      default:
                        variation_1:
                          push:
                            android:
                              template_type: BASIC
                              basic_details:
                                title: '{{title_v1}}'
                                message: '{{message_v1}}'
                        variation_2:
                          push:
                            android:
                              template_type: BASIC
                              basic_details:
                                title: '{{title_v2}}'
                                message: '{{message_v2}}'
                      es-ES:
                        variation_1:
                          push:
                            android:
                              template_type: BASIC
                              basic_details:
                                title: '{{title_es_v1}}'
                                message: '{{message_es_v1}}'
                        variation_2:
                          push:
                            android:
                              template_type: BASIC
                              basic_details:
                                title: '{{title_es_v2}}'
                                message: '{{message_es_v2}}'
                  scheduling_details:
                    delivery_type: ASAP
      responses:
        '201':
          description: Draft created
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/V5SuccessEnvelope'
                - type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/CampaignDraftCreatedData'
              example:
                response_id: abc-101
                type: campaign
                data:
                  id: 64a1b2c3d4e5f6a7b8c9d0e1
                  status: DRAFT
        '400':
          $ref: '#/components/responses/V5ValidationError'
        '401':
          $ref: '#/components/responses/V5Unauthorized'
        '429':
          $ref: '#/components/responses/V5RateLimited'
        '500':
          $ref: '#/components/responses/V5InternalError'
    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).
  /v5/campaigns/{campaign_id}/validate:
    post:
      operationId: validate_draft_campaign_v5
      summary: Validate Campaign (V5)
      description: 'Runs full publish-time validation (`DRAFT_PUBLISH`) on a saved draft without mutating it. Returns `valid: true` if the campaign would pass, or a list of blocking errors if it would not.


        All campaign data is read from the saved draft identified by `campaign_id` in the path. There is no channel-specific payload.

        '
      x-mint:
        content: '<Info>

          You do not need an idempotency key for this endpoint. The validate endpoint is read-only and safe to retry freely.

          </Info>


          ### Validation Modes


          The V5 API applies validation in two modes:


          | Mode | Triggered by | Strictness |

          | :--- | :--- | :--- |

          | Lenient | Draft create (`POST /v5/campaigns`) and component patch (`PATCH /v5/campaigns/{id}`) | Partial — individual components are validated in isolation as they are written |

          | Full (`DRAFT_PUBLISH`) | `POST /v5/campaigns/{id}/validate` and publish | Strict — all components are validated together as a complete, publish-ready campaign |


          Use this endpoint to catch `DRAFT_PUBLISH` failures before triggering a publish.


          ### Validation Failures


          All validation failures are blocking. There is no warning or non-blocking tier. A campaign that fails validation returns `valid: false` with a list of field-level errors. Each error identifies the `field` path and the `issue`.


          ### Channel-Specific Rules


          The following rules are enforced at `DRAFT_PUBLISH` for each channel:


          **Push**

          - `campaign_content` must be present and include content for all platforms listed in `basic_details.platforms`.

          - `template_type` must be valid for the target platform (Android, iOS, Web).

          - Platform-specific required fields (for example, `title` and `message` for Android basic templates) must be non-empty.


          **Email**

          - `connector.connector_type` and `connector.connector_name` must be present and match a connector configured in your workspace.

          - `basic_details.from_address` must be set and match a verified sender in the configured connector.

          - `basic_details.subscription_category` must be present for `PROMOTIONAL` content type.

          - `campaign_content` must include at least one variation with a non-empty `subject` and `html_content`.


          ### Delivery-Type-Specific Rules


          The following rules are enforced at `DRAFT_PUBLISH` based on `campaign_delivery_type`:


          | Delivery Type | Additional Requirements |

          | :--- | :--- |

          | `ONE_TIME`, `PERIODIC` | `scheduling_details` must be present. |

          | `AT_FIXED_TIME` scheduling | `scheduling_details.timezone` must be present. |

          | `PERIODIC` | `scheduling_details.periodic_details` must be present with a valid `sending_frequency`. |

          | `EVENT_TRIGGERED` | `trigger_condition` must be present with at least one `included_filters` entry. |

          | `DEVICE_TRIGGERED` | `trigger_condition` must be present. Trigger delay fields (`trigger_delay_type`, `trigger_delay_value`, `trigger_delay_granularity`) must **not** be set — they are only valid for `EVENT_TRIGGERED`. |

          | `BUSINESS_EVENT_TRIGGERED` | `basic_details.business_event` must be present. |

          | `LOCATION_TRIGGERED` | `basic_details.geofences` must contain at least one valid geofence entry. |


          #### Rate Limits


          | Rate Limit Name | Rate Limit |

          | :--- | :--- |

          | Validate campaign per second | The total number of validate campaign requests per second per client allowed is 10. |

          | Validate campaign per minute | The total number of validate campaign requests per minute per client allowed is 100. |

          | Validate campaign per hour | The total number of validate campaign requests per hour per client allowed is 6000. |

          '
      tags:
      - Create Campaigns
      parameters:
      - $ref: '#/components/parameters/MOE-APPKEY'
      - $ref: '#/components/parameters/X-MOE-Request-Id'
      - name: campaign_id
        in: path
        required: true
        description: 'Raw 24-char ObjectId of the campaign to validate. Use the `id` value returned in the Create Campaign response.

          '
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                request_id:
                  type: string
                  description: Optional string (UUID v4 recommended) used to identify this validation call. Unlike other POST endpoints, this field is not required and does not enforce deduplication - the validate endpoint is read-only and safe to retry freely.
                  example: '{{request_id}}'
            examples:
              validate:
                summary: Validate a draft campaign
                value:
                  request_id: '{{request_id}}'
      responses:
        '200':
          description: Validation result - always returned regardless of whether the campaign passes or fails validation.
          content:
            application/json:
              schema:
                allOf:
                - $ref: '#/components/schemas/V5SuccessEnvelope'
                - type: object
                  properties:
                    data:
                      $ref: '#/components/schemas/V5ValidateResponse'
              examples:
                valid:
                  summary: Campaign passes validation
                  value:
                    response_id: abc-501
                    type: campaign
                    data:
                      valid: true
                invalid:
                  summary: Campaign fails validation
                  value:
                    response_id: abc-501
                    type: campaign
                    data:
                      valid: false
                      errors:
                      - field: campaign_content.content.push.android.basic_details.title
                        issue: title is required
                      - field: scheduling_details
   

# --- truncated at 32 KB (231 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/moengage/refs/heads/main/openapi/moengage-create-campaigns-api-openapi.yml