---
title: "Search Campaigns"
method: POST
path: "/campaigns/search"
tags: ["Get Campaign Details"]
---

# Search Campaigns

`POST /campaigns/search`

## Request

- Base URL: `https://api-01.moengage.com/core-services/v1`
- URL: `https://api-01.moengage.com/core-services/v1/campaigns/search`
- Auth: HTTP basic
- TypeScript: <https://skmtc.dev/moengage/apis/moengage-campaigns-api/docs/campaigns/search/post.ts> (a function with typed inputs; its response is checked against the schema)

This API fetches a list of Push, Email, or SMS campaigns with all current fields and status. You can pass multiple filters to find specific campaigns.

## Headers

- `MOE-APPKEY` string, required

## Request body

- CampaignSearchRequest
  - `request_id` string, required: A unique identifier for this search request.
  - `campaign_fields` CampaignSearchFields: Filter criteria for searching campaigns.
    - `channels` string[]: Filter campaigns by channel type.
    - `created_by` string[]: Filter campaigns by the email ID of the user who created them. **Note:** Only email IDs are supported.
    - `created_date` object: Filter campaigns by creation date range.
      - `from_date` string, date: The starting point of the date range. **Recommended format:** YYYY-MM-DD
      - `to_date` string, date: The ending point of the date range. **Recommended format:** YYYY-MM-DD
    - `delivery_type` string[]: Filter campaigns by delivery type.
    - `id` string: Filter by specific campaign ID.
    - `name` string: Filter by campaign name.
    - `status` string[]: Filter campaigns by status.
    - `tags` string[]: Filter campaigns by tags.
  - `include_child_campaigns` boolean: Whether to include child campaigns (flow nodes and periodic children). Set to `true` to fetch details of periodic child campaigns and flow campaign nodes. Flow campaigns can be identified by the presence of `flow_id` and `flow_name` in the response.
  - `include_archive_campaigns` boolean: Whether to include archived campaigns in the results.
  - `limit` integer, required: The number of campaigns to display per page. **Maximum:** 15
  - `page` integer, required: The page number to retrieve. For example, if there are 200 campaigns and the limit is 10, there will be 20 pages.

## Response `200`

Successfully retrieved campaign list

- CampaignDetailsResponse[]
  - `campaign_id` string: The unique ID of the campaign.
  - `status` 'ACTIVE' | 'SCHEDULED' | 'PAUSED' | 'SENT' | 'STOPPED' | 'ARCHIVED': The current status of the campaign.
  - `channel` 'PUSH' | 'EMAIL' | 'SMS': The communication channel.
  - `campaign_delivery_type` 'ONE_TIME' | 'PERIODIC' | 'EVENT_TRIGGERED' | 'BUSINESS_EVENT_TRIGGERED' | 'DEVICE_TRIGGERED' | 'LOCATION_TRIGGERED' | 'BROADCAST_LIVE_ACTIVITY': The delivery type of the campaign.
  - `created_by` string, email: The email ID of the user who created the campaign.
  - `updated_by` string, email: The email ID of the user who last updated the campaign.
  - `created_at` string: The timestamp when the campaign was created, in UTC.
  - `updated_at` string: The timestamp when the campaign was last updated, in UTC.
  - `sent_time` string: The timestamp when the campaign was sent, in UTC.
  - `flow_id` string: The flow ID (only for flow campaigns). Only applicable when `include_child_campaigns` is true.
  - `flow_name` string: The flow name (only for flow campaigns). Only applicable when `include_child_campaigns` is true.
  - `parent_id` string: The campaign ID of the parent campaign. Only applicable for periodic child campaigns when `include_child_campaigns` is true.
  - `basic_details` object: Basic details of the campaign. Structure varies by channel (Push/Email/SMS).
  - `campaign_content` object: The campaign content including locales and variations.
  - `trigger_condition` object: Trigger condition details for event-triggered campaigns. Structure varies by channel (Push supports INTELLIGENT_DELAY, Email does not).
  - `segmentation_details` SegmentationDetailsResponse: Defines the target audience for the campaign.
    - `included_filters` FilterGroup: A group of filters combined with a logical operator. For detailed segmentation payload and supported fields, refer to [Create Custom Segment](/api/filter-segments/create-filter-segment).
      - `filter_operator` 'and' | 'or', required: The logical operator to combine filters.
      - `filters` union[], required: 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
        - union
          - UserAttributeFilter: Filter based on user attributes.
            - `filter_type` 'user_attributes', required
            - `data_type` 'string' | 'double' | 'datetime' | 'bool', required: The data type of the attribute being filtered.
            - `category` string: The category of the attribute (e.g., "Tracked Standard Attribute").
            - `name` string, required: The name of the attribute to filter on (e.g., "uid").
            - `operator` string, required: 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` unknown
            - `case_sensitive` boolean: Whether the filter comparison should be case-sensitive.
            - `negate` boolean: Whether to negate the filter condition.
            - `project_name` string: The name of the project associated with the user attributes. **Required** if the Portfolio feature is enabled in your workspace.
          - ActionFilter: Filter based on user actions/events.
            - `filter_type` 'actions', required
            - `action_name` string, required: The name of the action/event to filter on.
            - `execution` object
              - …
            - `executed` boolean: Whether the action was executed.
            - `attributes` FilterGroup (recursive)
            - `condition` string: The condition type (e.g., "IF").
          - CustomSegmentFilter: Filter using a custom segment.
            - `filter_type` 'custom_segments', required
            - `name` string: The name of the custom segment.
            - `id` string, required: The ID of the custom segment.
    - `excluded_filters` FilterGroup: A group of filters combined with a logical operator. For detailed segmentation payload and supported fields, refer to [Create Custom Segment](/api/filter-segments/create-filter-segment).
      - `filter_operator` 'and' | 'or', required: The logical operator to combine filters.
      - `filters` union[], required: 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
        - union
          - UserAttributeFilter: Filter based on user attributes.
            - `filter_type` 'user_attributes', required
            - `data_type` 'string' | 'double' | 'datetime' | 'bool', required: The data type of the attribute being filtered.
            - `category` string: The category of the attribute (e.g., "Tracked Standard Attribute").
            - `name` string, required: The name of the attribute to filter on (e.g., "uid").
            - `operator` string, required: 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` unknown
            - `case_sensitive` boolean: Whether the filter comparison should be case-sensitive.
            - `negate` boolean: Whether to negate the filter condition.
            - `project_name` string: The name of the project associated with the user attributes. **Required** if the Portfolio feature is enabled in your workspace.
          - ActionFilter: Filter based on user actions/events.
            - `filter_type` 'actions', required
            - `action_name` string, required: The name of the action/event to filter on.
            - `execution` object
              - …
            - `executed` boolean: Whether the action was executed.
            - `attributes` FilterGroup (recursive)
            - `condition` string: The condition type (e.g., "IF").
          - CustomSegmentFilter: Filter using a custom segment.
            - `filter_type` 'custom_segments', required
            - `name` string: The name of the custom segment.
            - `id` string, required: The ID of the custom segment.
    - `is_all_user_campaign` boolean: Whether to include all users in the campaign.
    - `send_campaign_to_opt_out_users` boolean: Whether to send the campaign to users who have opted out.
  - `scheduling_details` SchedulingDetails: Defines when the campaign should be sent. All date-time values must be passed in UTC.
    - `delivery_type` 'ASAP' | 'AT_FIXED_TIME' | 'SEND_IN_BTS' | 'SEND_IN_USER_TIMEZONE', required: When to deliver the campaign.
    - `start_time` string, date-time: The start time for the campaign in ISO 8601 format. Pass this value in UTC. Example: "2024-06-21T12:59:00"
    - `expiry_time` string, date-time: The expiry time for the campaign in ISO 8601 format. Pass this value in UTC.
    - `periodic_details` PeriodicDetails: Configuration for periodic campaigns. **Required** for PERIODIC campaigns.
      - `sending_frequency` 'DAILY' | 'WEEKLY' | 'MONTHLY': The frequency to send the campaign.
      - `repeat_frequency` integer: The repeat frequency of the campaign.
      - `no_of_occurences` integer: The number of occurrences of the campaign.
      - `repeat_on_date_of_month` integer[]: 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` string[]: The days of the week on which the campaign should repeat.
      - `repeat_on_days_of_week_for_month` object[]: Configuration for repeating on specific weeks of the month.
        - `week_granularity` 'FIRST' | 'SECOND' | 'THIRD' | 'FOURTH' | 'LAST'
        - `repeat_on_days_of_week` string[]
    - `bts_details` BTSDetails: Best Time to Send (BTS) configuration. BTS provides a prescriptive time slot to send a campaign to increase the chance of user interaction.
      - `send_in_bts` boolean: Whether to send the campaign at the best time.
      - `if_user_bts_is_not_available` string: When to send the campaign if the user's best time is not available.
      - `if_user_bts_outside_time_window` string: When to send the campaign if the user's best time is outside the time window.
      - `window_end_time` string: The window end time.
    - `user_timezone_details` UserTimezoneDetails: Configuration for sending in the user's timezone.
      - `send_in_user_timezone` boolean: Whether to send the campaign on a specific date and time within the user's timezone.
      - `send_if_user_timezone_has_passed` boolean: Whether to send the campaign if the user's timezone has passed.
  - `delivery_controls` object: Delivery control settings for the campaign.
  - `advanced` object: Advanced campaign settings (for Push campaigns).
  - `conversion_goal_details` ConversionGoalDetails: Configuration for tracking campaign conversion goals.
    - `attribution_window_in_hours` integer: The attribution window in hours.
    - `goals` Goal[]: List of conversion goals to track.
      - `goal_name` string: The name of the goal.
      - `goal_event_name` string: The event name associated with this goal.
      - `goal_event_attribute` GoalEventAttribute: Attributes associated with the conversion goal event.
        - `name` string: The name of the goal event attribute.
        - `condition` string: The condition used while creating the goal (e.g., "is", "contains", "between").
        - `data_type` 'STRING' | 'DOUBLE' | 'BOOL' | 'NUMBER' | 'GEOPOINT' | 'DATETIME' | 'ARRAY_DOUBLE' | 'ARRAY_STRING' | 'OBJECT' | 'ARRAY_OBJECT': The data type of the attribute.
        - `value` string: The value of the goal event attribute. Supported data types: STRING, DOUBLE, BOOL, NUMBER, GEOPOINT, DATETIME, ARRAY_DOUBLE, ARRAY_STRING.
        - `value1` string: A secondary value, used for conditions like 'between'. Supported data types: STRING, DOUBLE, BOOL, NUMBER, GEOPOINT, DATETIME, ARRAY_DOUBLE, ARRAY_STRING.
        - `negate` boolean: Whether to negate the filter condition.
        - `value_type` string: The type of value being filtered.
        - `array_filter_type` string: The logical filter type for array attributes.
        - `filters` object[]: A list of sub-filters used when data_type is OBJECT or ARRAY_OBJECT.
        - `is_case_sensitive` boolean: Whether the goal event attribute is case-sensitive.
      - `is_primary_goal` boolean: Whether this is the primary goal.
      - `revenue_attribute` string: The revenue attribute to track.
      - `revenue_currency` string: The currency for revenue tracking.
  - `control_group_details` ControlGroupDetails: Configuration for control groups.
    - `is_campaign_control_group_enabled` boolean: Whether the campaign control group is enabled.
    - `campaign_control_group_percentage` integer: The percentage of users added to the exclusion list. **Required** if is_campaign_control_group_enabled is true.
    - `is_global_control_group_enabled` boolean: Whether the global control group is enabled.
  - `utm_params` UTMParams: UTM parameters for tracking campaign performance.
    - `utm_source` string, required: The source of the traffic (e.g., YouTube, Instagram, Google). **Required** when using UTM parameters.
    - `utm_medium` string, required: The channel type (e.g., Push, SMS, Email). **Required** when using UTM parameters.
    - `utm_campaign` string: The name of the campaign (e.g., Newyear, Bigbillionday).
    - `utm_term` string: Search terms for paid traffic (e.g., Mobile+sale).
    - `utm_content` string: The content element that differentiates links (e.g., banner, video).
    - `utm_custom` string: Custom UTM parameter (maximum of 5 custom parameters).
  - `connector` object: Connector configuration (for Email and SMS campaigns).
    - `connector_type` string
    - `connector_name` string
  - `sender_name` string: The sender name configured for the campaign. Only applicable for SMS campaigns.
  - `campaign_audience_limit` CampaignAudienceLimit: Configuration for limiting campaign audience.
    - `limit` integer: The maximum number of times an audience can be included or targeted within the campaign.
    - `metrics` string: The type of measurement being tracked (e.g., impressions, clicks, conversions).
    - `frequency` string: How often the limit and metrics are applied (e.g., daily, weekly, monthly).

## Other responses

- `400`: Bad Request - Missing or invalid parameters
- `401`: Authentication Failure - Invalid or missing authentication credentials
- `500`: Internal Server Error - Unexpected system error

---

[API](https://skmtc.dev/moengage/apis/moengage-campaigns-api.md) - [All operations](https://skmtc.dev/moengage/apis/moengage-campaigns-api/llms.txt) - [OpenAPI document](https://skmtc.dev/moengage/apis/moengage-campaigns-api/revisions/7fc8a931584f?raw)
