Skip to main content
This reference covers the request-body components that define how a campaign reaches users: trigger_condition, segmentation_details, scheduling_details, delivery_controls, conversion_goal_details, control_group_details, utm_params, campaign_audience_limit, advanced, and basic_details.geofences. Used by Create Campaign and Update Campaign. For basic_details (excluding geofences) and campaign_content per channel, platform, and template type, see Campaign content reference.
The OpenAPI spec at /api/campaigns/campaign-draft.yaml is the authoritative source for field types, enums, and required markers. This page adds runnable variants and conditional rules not expressible in inline schema descriptions.

Quick start

The minimum audience configuration is either segmentation_details.is_all_user_campaign: true or a single filter under segmentation_details.included_filters. The minimum schedule is scheduling_details.delivery_type: ASAP. Event-triggered campaigns also require trigger_condition.
Everything below is reference material covering every supported delivery type, filter primitive, and delivery-control flag.

Page contents

Trigger conditions

The trigger_condition object defines when a triggered campaign fires. It is required for the following delivery types:
  • Push EVENT_TRIGGERED, DEVICE_TRIGGERED, and LOCATION_TRIGGERED.
  • Email EVENT_TRIGGERED.
BUSINESS_EVENT_TRIGGERED campaigns identify the trigger via basic_details.business_event and do not use trigger_condition.
INTELLIGENT_DELAY is supported on Push only. Email trigger_delay_type accepts DELAY or ASAP.

Trigger delay variants

The campaign fires as soon as the trigger condition is met.

Intelligent delay optimization (Push)

The intelligent_delay_optimization object defines the window within which MoEngage selects the optimal send time.

Primary and secondary trigger filters

secondary_included_filters adds an extra filter group that must also match. Useful for triggers of the form “user did X and also Y”.

Trigger requirements per delivery type

Filter primitives

Filters are the primitives used inside included_filters.filters[] and excluded_filters.filters[] on segmentation_details and inside included_filters.filters[] and secondary_included_filters.filters[] on trigger_condition. Every filter group has the shape:
filter_operator is and or or (lowercase). Filters are objects discriminated by filter_type:

Operators per data type

Campaign audience

The segmentation_details object defines who receives the campaign. Two top-level modes are supported: an explicit filter group, or a flag that targets all users.

Campaign delivery schedule

The scheduling_details.delivery_type field selects the send model. Different fields are required based on the value. For PERIODIC campaigns, delivery_type is AT_FIXED_TIME and periodic_details is required.

Schedule variants

Periodic schedules

The periodic_details object is required for PERIODIC campaigns. The repeat_on_days_of_week_for_month entries have the following shape:

Best Time to Send

The bts_details object is required when delivery_type is SEND_IN_BTS.

User timezone

The user_timezone_details object is required when delivery_type is SEND_IN_USER_TIMEZONE.

Delivery controls

The delivery_controls object carries throttling, frequency capping, DND behavior, and offline/queueing flags. The accepted fields differ between Push and Email.

Push delivery controls

Email delivery controls

Conversion goal tracking

The conversion_goal_details object configures the events MoEngage tracks to attribute campaign success.

Goal fields

Goal event attribute fields

Control groups

The control_group_details object configures the campaign-level and global control groups (users held back from the send).

UTM parameters

The utm_params object appends UTM tracking parameters to URLs in the campaign content. The five standard keys are explicitly defined. Up to 5 additional custom keys prefixed with utm_ are also supported.
The cap is 5 custom keys in total. Custom keys not prefixed with utm_ are rejected.

Campaign audience cap

The campaign_audience_limit object caps the number of users a campaign can reach.
Flag-gated feature. Not enabled by default for any workspace. Including campaign_audience_limit on a workspace where the flag is not enabled returns a 400 with error.code: VALIDATION_FAILED and error.message: "Campaign Audience Limit feature is not enabled for this db". Contact the MoEngage account team to enable.
Supported channels: Email, Push. Not supported for BROADCAST_LIVE_ACTIVITY.
Applies to all delivery types on both Push and Email.

Advanced Push settings

The advanced object (Push only) carries notification-expiration settings and per-platform priority.
advanced is part of the Push request body. It is not part of the Email request body.

Expiration settings

Platform-level priority

Geofence targeting

The basic_details.geofences object is required for Push LOCATION_TRIGGERED campaigns. The field lives structurally inside basic_details and is documented here because it works in concert with trigger_condition and delivery_controls.send_limit_* for location-triggered targeting.
The campaign fires when the user enters the geofence.

Validation rules

The following rules span multiple sub-objects on this page.

Updating an existing campaign

PATCH /v5/campaigns/{campaign_id} reuses every schema on this page. Additional rules apply for updates.
  • When a field inside a nested object is updated, the complete parent object must be included in the request. For example, to change a single filter in segmentation_details.included_filters.filters, the full segmentation_details block is included.
  • For campaigns in ACTIVE state, the following fields cannot be edited:
    • trigger_condition
    • segmentation_details
    • conversion_goal_details
    • The scheduling type (delivery_type)
    • The scheduling start date (scheduling_details.start_time)
  • For campaigns in SCHEDULED state, all fields except the scheduling type can be edited.
  • Campaigns in STOPPED or ARCHIVED state cannot be updated.
  • Updates to trigger_condition or campaign_content on event-triggered campaigns can take up to 30 minutes to propagate to users due to content caching.
  • For periodic campaigns, configuration changes apply from the next scheduled run.
  • For one-time campaigns, changes apply to messages not yet dispatched at the time of the update.

See also