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.
{
  "segmentation_details": {
    "included_filters": {
      "filter_operator": "and",
      "filters": [
        {
          "filter_type": "custom_segments",
          "name": "High-LTV users",
          "id": "seg_5f1a3b2c"
        }
      ]
    }
  },
  "scheduling_details": {
    "delivery_type": "ASAP"
  }
}
Everything below is reference material covering every supported delivery type, filter primitive, and delivery-control flag.

Page contents

SectionLocation in request body
Trigger conditionstrigger_condition
Filter primitivesincluded_filters.filters[], excluded_filters.filters[], trigger_condition.*_filters.filters[]
Campaign audiencesegmentation_details
Campaign delivery schedulescheduling_details
Delivery controlsdelivery_controls
Conversion goal trackingconversion_goal_details
Control groupscontrol_group_details
UTM parametersutm_params
Campaign audience capcampaign_audience_limit
Advanced Push settingsadvanced (Push only)
Geofence targetingbasic_details.geofences
Validation rulesCross-cutting rules enforced at validate or publish
Updating an existing campaignPer-state restrictions for PATCH /v5/campaigns/{campaign_id}

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.
FieldTypeChannel support
included_filtersFilterGroupPush, Email. The primary condition that must match for the trigger to fire.
secondary_included_filtersFilterGroupPush, Email. Additional filters combined with the primary condition.
trigger_delay_typeenumPush: DELAY, ASAP, INTELLIGENT_DELAY. Email: DELAY, ASAP.
trigger_delay_valueintegerThe numeric delay value. Required when trigger_delay_type is DELAY.
trigger_delay_granularityenumMINUTES, HOURS, or DAYS. Required when trigger_delay_type is DELAY.
trigger_relationenumBEFORE or AFTER. Required when trigger_delay_type is DELAY.
trigger_attrobjectThe attribute used as the time anchor when trigger_relation is BEFORE.
intelligent_delay_optimizationobjectPush only. Required when trigger_delay_type is INTELLIGENT_DELAY. See Intelligent delay optimization (Push).
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.
{
  "trigger_condition": {
    "included_filters": {
      "filter_operator": "and",
      "filters": [
        {
          "filter_type": "actions",
          "action_name": "purchase_completed",
          "execution": { "type": "atleast", "count": 1 },
          "executed": true
        }
      ]
    },
    "trigger_delay_type": "ASAP"
  }
}

Intelligent delay optimization (Push)

The intelligent_delay_optimization object defines the window within which MoEngage selects the optimal send time.
FieldTypeNotes
min_delay_valueintegerThe numeric component of the lower bound.
min_delay_granularityenumMINUTES or HOURS.
max_delay_valueintegerThe numeric component of the upper bound.
max_delay_granularityenumHOURS or DAYS.

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_condition": {
    "included_filters": {
      "filter_operator": "and",
      "filters": [
        {
          "filter_type": "actions",
          "action_name": "purchase_completed",
          "execution": { "type": "atleast", "count": 1 },
          "executed": true
        }
      ]
    },
    "secondary_included_filters": {
      "filter_operator": "and",
      "filters": [
        {
          "filter_type": "user_attributes",
          "data_type": "string",
          "name": "loyalty_tier",
          "operator": "is",
          "value": "gold"
        }
      ]
    },
    "trigger_delay_type": "ASAP"
  }
}

Trigger requirements per delivery type

Delivery typetrigger_conditionbasic_details.business_eventbasic_details.geofences
EVENT_TRIGGERED (Push, Email)Required.
BUSINESS_EVENT_TRIGGERED (Push, Email)Not used.Required.
DEVICE_TRIGGERED (Push)Required.
LOCATION_TRIGGERED (Push)Required.Required. See Geofence targeting.
ONE_TIME (Push, Email)Not applicable.
PERIODIC (Push, Email)Not applicable.

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": "and",
  "filters": [
    /* one or more filter objects */
  ]
}
filter_operator is and or or (lowercase). Filters are objects discriminated by filter_type:
filter_typePurpose
user_attributesMatch on a user attribute (string, double, datetime, bool).
actionsMatch on whether a user performed an event.
custom_segmentsMatch users in a saved custom segment.
{
  "filter_type": "user_attributes",
  "data_type": "string",
  "category": "Tracked Standard Attribute",
  "name": "country",
  "operator": "is",
  "value": "IN",
  "case_sensitive": false,
  "negate": false
}
FieldTypeNotes
filter_typeenumuser_attributes (fixed).
data_typeenumstring, double, datetime, or bool (lowercase).
categorystringThe attribute category (for example, Tracked Standard Attribute).
namestringThe attribute name (for example, country, uid).
operatorstringThe operator depends on data_type. See Operators per data type.
valuevariesThe value to match. Not required for the exists operator.
case_sensitivebooleanWhether the comparison is case-sensitive.
negatebooleanWhether to negate the condition.
project_namestringRequired when the Portfolio feature is enabled in the workspace.

Operators per data type

data_typeAllowed operator values
boolis, exists
doublein, between, lessThan, greaterThan, exists
stringin, contains, containsInTheFollowing, startWithInTheFollowing, endsWithInTheFollowing, exists, is
datetimeinTheLast, on, between, before, after, inTheNext, exists, today

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.
FieldTypeNotes
included_filtersFilterGroupFilters that include users in the audience.
excluded_filtersFilterGroupFilters that exclude users from the audience.
is_all_user_campaignbooleanWhen true, all users are targeted (subject to opt-in status).
send_campaign_to_opt_out_usersbooleanWhen true, users who have opted out are also targeted.
{
  "segmentation_details": {
    "is_all_user_campaign": true
  }
}

Campaign delivery schedule

The scheduling_details.delivery_type field selects the send model. Different fields are required based on the value.
delivery_typeSend behaviorRequired companion fields
ASAPAs soon as the campaign is published.None.
AT_FIXED_TIMEAt a specific timestamp.start_time (ISO 8601).
SEND_IN_BTSAt each user’s optimal time within a window.start_time and bts_details.
SEND_IN_USER_TIMEZONEAt a fixed wall-clock time in each user’s local timezone.start_time and user_timezone_details.
For PERIODIC campaigns, delivery_type is AT_FIXED_TIME and periodic_details is required.
FieldTypeNotes
delivery_typeenumASAP, AT_FIXED_TIME, SEND_IN_BTS, or SEND_IN_USER_TIMEZONE.
start_timedate-time (ISO 8601)The campaign start time.
expiry_timedate-time (ISO 8601)The campaign expiry time. Used on triggered campaigns to bound activity.
periodic_detailsobjectRequired for PERIODIC campaigns. See Periodic schedules.
bts_detailsobjectRequired when delivery_type is SEND_IN_BTS. See Best Time to Send.
user_timezone_detailsobjectRequired when delivery_type is SEND_IN_USER_TIMEZONE. See User timezone.

Schedule variants

{
  "scheduling_details": {
    "delivery_type": "ASAP"
  }
}

Periodic schedules

The periodic_details object is required for PERIODIC campaigns.
FieldTypeNotes
sending_frequencyenumDAILY, WEEKLY, or MONTHLY.
repeat_frequencyintegerThe repeat interval (for example, 1 for every week, 2 for every two weeks).
no_of_occurencesintegerThe total number of times the campaign sends.
repeat_on_date_of_montharray of integerDates of the month to send on (1–31). Used with MONTHLY.
repeat_on_days_of_weekarray of enumOne or more of MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY. Used with WEEKLY or MONTHLY.
repeat_on_days_of_week_for_montharray of { week_granularity, repeat_on_days_of_week }Used with MONTHLY to target specific weeks of the month.
The repeat_on_days_of_week_for_month entries have the following shape:
FieldTypeNotes
week_granularityenumFIRST, SECOND, THIRD, FOURTH, or LAST.
repeat_on_days_of_weekarray of enumOne or more day names.
{
  "scheduling_details": {
    "delivery_type": "AT_FIXED_TIME",
    "start_time": "2026-07-15T09:00:00",
    "periodic_details": {
      "sending_frequency": "DAILY",
      "repeat_frequency": 1,
      "no_of_occurences": 10
    }
  }
}

Best Time to Send

The bts_details object is required when delivery_type is SEND_IN_BTS.
FieldTypeNotes
send_in_btsbooleanWhether to send at the best time.
if_user_bts_is_not_availablestringFallback behavior when a user’s best time is unknown.
if_user_bts_outside_time_windowstringFallback behavior when a user’s best time falls outside the window.
window_end_timestringThe end of the BTS window.

User timezone

The user_timezone_details object is required when delivery_type is SEND_IN_USER_TIMEZONE.
FieldTypeNotes
send_in_user_timezonebooleanWhether to send in each user’s local timezone.
send_if_user_timezone_has_passedbooleanWhether to still send to users whose local time has already passed start_time.

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

FieldTypeNotes
bypass_dndbooleanWhether to bypass Do Not Disturb. Required for event-triggered campaigns.
campaign_throttle_rpmintegerThe throttle in requests per minute. Not applicable for device-triggered, location-triggered, and event-triggered campaigns.
count_for_frequency_cappingbooleanWhether sends from this campaign count toward workspace frequency caps.
ignore_frequency_cappingbooleanWhether this campaign bypasses workspace frequency caps.
minimum_delay_between_two_notification_in_hourintegerMinimum hours between two pushes from this campaign. Applies to event-triggered and device-triggered campaigns.
max_time_to_show_message_of_same_camapignstringMaximum hours the message is shown to a user. Applies to device-triggered campaigns. (Field name retains the spec typo camapign.)
expiry_time_of_sync_data_in_hourstringHours after which synced campaign data expires if the trigger condition is not met. Applies to device-triggered campaigns.
send_message_in_offline_modebooleanWhether to store and deliver the message while the device is offline. Applies to device-triggered campaigns.
send_limit_valuestringMaximum times a user can receive the campaign within the window. Applies to location-triggered campaigns.
send_limit_granularity_in_hoursstringThe window in hours for send_limit_value. Applies to location-triggered campaigns.
ignore_global_minimum_delaybooleanWhether to bypass the workspace-wide minimum interval between pushes. Applies to event-triggered campaigns.
queuing_enabledbooleanWhether undeliverable messages are queued for later delivery. Flag-gated. Contact the MoEngage account team to enable.
queue_durationintegerThe hours to keep messages queued. Must be greater than 0 when queuing_enabled is true. Flag-gated.
{
  "delivery_controls": {
    "campaign_throttle_rpm": 50000,
    "count_for_frequency_capping": true,
    "ignore_frequency_capping": false
  }
}

Email delivery controls

FieldTypeNotes
bypass_dndbooleanWhether to bypass Do Not Disturb.
campaign_throttle_rpmintegerThe throttle in requests per minute.
count_for_frequency_cappingbooleanWhether the campaign counts toward frequency caps.
ignore_frequency_cappingbooleanWhether to bypass frequency capping.
minimum_delay_between_two_notification_in_hourintegerMinimum hours between two emails from this campaign.
{
  "delivery_controls": {
    "campaign_throttle_rpm": 2000,
    "count_for_frequency_capping": true,
    "ignore_frequency_capping": false,
    "minimum_delay_between_two_notification_in_hour": 24
  }
}

Conversion goal tracking

The conversion_goal_details object configures the events MoEngage tracks to attribute campaign success.
FieldTypeNotes
attribution_window_in_hoursintegerThe lookback window in hours for attributing goal events to the campaign.
goalsarray of Goal fieldsThe list of goals tracked.

Goal fields

FieldTypeNotes
goal_namestringThe display name of the goal.
goal_event_namestringThe event tracked as a conversion.
goal_event_attributeobjectOptional. See Goal event attribute fields.
is_primary_goalbooleanWhether the goal is the primary goal.
revenue_attributestringThe event attribute used to track revenue.
revenue_currencystringThe currency for revenue tracking.

Goal event attribute fields

FieldTypeNotes
namestringThe attribute name.
conditionstringThe condition (for example, is, contains, between).
data_typeenumSTRING, DOUBLE, BOOL, NUMBER, GEOPOINT, DATETIME, ARRAY_DOUBLE, ARRAY_STRING, OBJECT, or ARRAY_OBJECT. (Uppercase, differs from filter data_type.)
valuestringThe match value.
value1stringA secondary value (used with between).
negatebooleanWhether to negate the condition.
value_typestringThe type of value being filtered.
array_filter_typestringThe logical filter type for array attributes.
filtersarray of objectSub-filters used when data_type is OBJECT or ARRAY_OBJECT.
is_case_sensitivebooleanWhether the comparison is case-sensitive.
{
  "conversion_goal_details": {
    "attribution_window_in_hours": 36,
    "goals": [
      {
        "goal_name": "Purchase",
        "goal_event_name": "purchase_completed",
        "is_primary_goal": true,
        "goal_event_attribute": {
          "name": "category",
          "condition": "is",
          "data_type": "STRING",
          "value": "electronics"
        }
      }
    ]
  }
}

Control groups

The control_group_details object configures the campaign-level and global control groups (users held back from the send).
FieldTypeNotes
is_campaign_control_group_enabledbooleanWhether the campaign control group is enabled.
campaign_control_group_percentageinteger (0–100)The percentage of the audience held back. Required when is_campaign_control_group_enabled is true.
is_global_control_group_enabledbooleanWhether the workspace global control group applies to the campaign.
{
  "control_group_details": {
    "is_campaign_control_group_enabled": true,
    "campaign_control_group_percentage": 10,
    "is_global_control_group_enabled": false
  }
}

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.
FieldTypeNotes
utm_sourcestringThe source of the traffic. Required when UTM parameters are used.
utm_mediumstringThe channel type. Required when UTM parameters are used.
utm_campaignstringThe campaign name.
utm_termstringSearch terms for paid traffic.
utm_contentstringThe content element that differentiates links.
Custom utm_* keysstringUp to 5 additional keys prefixed with utm_ (for example, utm_cust, utm_c1ust).
{
  "utm_params": {
    "utm_source": "google",
    "utm_medium": "push",
    "utm_campaign": "summer_sale",
    "utm_term": "mobile+sale",
    "utm_content": "banner",
    "utm_cust": "value1",
    "utm_c1ust": "value2"
  }
}
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.
FieldTypeNotes
is_campaign_audience_limit_enabledbooleanWhether the cap is enforced. When true, metric, frequency, and limit are all required. When false, those three fields must not be provided.
metricenumSENT (the only value currently supported). Required when enabled.
frequencyenumTOTAL (lifetime cap, all delivery types on Push and Email) or INSTANCE (per-send cap, Periodic Push only). Required when enabled.
limitinteger (1–9,999,999,999)The maximum number of users. Required when enabled.
Supported channels: Email, Push. Not supported for BROADCAST_LIVE_ACTIVITY.
{
  "campaign_audience_limit": {
    "is_campaign_audience_limit_enabled": true,
    "metric": "SENT",
    "frequency": "TOTAL",
    "limit": 100000
  }
}
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

FieldTypeNotes
expire_notification_after_valueintegerThe numeric value for notification expiration.
expire_notification_after_typeenumHOUR or DAY.
remove_from_inbox_after_valueintegerThe numeric value for inbox removal.
remove_from_inbox_after_typeenumDAY (the only accepted value).
{
  "advanced": {
    "expiration_settings": {
      "expire_notification_after_value": 24,
      "expire_notification_after_type": "HOUR",
      "remove_from_inbox_after_value": 7,
      "remove_from_inbox_after_type": "DAY"
    }
  }
}

Platform-level priority

FieldTypeNotes
android_specific_priority.send_with_prioritybooleanWhether to send with priority on Android.
ios_specific_priority.apns_priorityenum1, 5, or 10 (strings). The APNS priority.
ios_specific_priority.interruption_levelenumPassive, Active, Time sensitive, or Critical.
ios_specific_priority.relevance_scorenumber0, 0.5, or 1.
{
  "advanced": {
    "platform_level_priority": {
      "ios_specific_priority": {
        "apns_priority": "10",
        "interruption_level": "Time sensitive",
        "relevance_score": 1
      }
    }
  }
}

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.
FieldTypeNotes
namestringThe unique name of the geofence. Required.
latitudestringThe center latitude. Required.
longitudestringThe center longitude. Required.
radiusstringThe radius in meters. Required.
dwell_time_valuestringThe numeric dwell time. Required when triggered_at is dwell.
dwell_time_granularityenumMINUTES, HOURS, or DAYS. Required when triggered_at is dwell.
response_time_valuestringThe numeric response time before sending after the trigger condition is met. Required.
response_time_granularityenumMINUTES, HOURS, or DAYS. Required.
triggered_atenumENTRY, EXIT, or dwell (note: dwell is lowercase). Required.
The campaign fires when the user enters the geofence.
{
  "basic_details": {
    "platforms": ["ANDROID", "IOS"],
    "geofences": {
      "name": "Downtown Store",
      "latitude": "40.758",
      "longitude": "-73.985",
      "radius": "500",
      "response_time_value": "5",
      "response_time_granularity": "MINUTES",
      "triggered_at": "ENTRY"
    }
  }
}

Validation rules

The following rules span multiple sub-objects on this page.
RuleSource
trigger_condition is required for Push EVENT_TRIGGERED, DEVICE_TRIGGERED, LOCATION_TRIGGERED, and Email EVENT_TRIGGERED.PushTriggerCondition, EmailTriggerCondition descriptions
basic_details.business_event is required for BUSINESS_EVENT_TRIGGERED (Push and Email). For BUSINESS_EVENT_TRIGGERED, trigger_condition is not used.PushBasicDetailsV5.business_event, EmailBasicDetailsV5.business_event
basic_details.geofences is required for LOCATION_TRIGGERED. LOCATION_TRIGGERED is Push only.Geofence targeting
geofences.triggered_at: dwell requires dwell_time_value and dwell_time_granularity. The value dwell is lowercase. ENTRY and EXIT are uppercase.Geofences.triggered_at
trigger_delay_type: DELAY requires trigger_delay_value, trigger_delay_granularity, and trigger_relation.PushTriggerCondition.trigger_delay_type, EmailTriggerCondition.trigger_delay_type
trigger_delay_type: INTELLIGENT_DELAY is Push only. Requires intelligent_delay_optimization (with min_delay_value, min_delay_granularity, max_delay_value, max_delay_granularity). min_delay_granularity accepts MINUTES or HOURS. max_delay_granularity accepts HOURS or DAYS.PushTriggerCondition description
trigger_relation: BEFORE requires trigger_attr.name (the time-attribute used as the anchor for the send).PushTriggerCondition.trigger_relation
filter_operator is lowercase, and or or.FilterGroup.filter_operator
UserAttributeFilter.data_type values are lowercase (string, double, datetime, bool). GoalEventAttribute.data_type values are uppercase (STRING, DOUBLE, …). The schemas are distinct.UserAttributeFilter.data_type, GoalEventAttribute.data_type
UserAttributeFilter.operator allowed values depend on data_type. Refer to Operators per data type.UserAttributeFilter.operator
UserAttributeFilter.project_name is required when the Portfolio feature is enabled in the workspace.UserAttributeFilter.project_name
For PERIODIC campaigns, scheduling_details.periodic_details is required, and scheduling_details.delivery_type is AT_FIXED_TIME.PeriodicDetails description
For SEND_IN_BTS, bts_details is required. For SEND_IN_USER_TIMEZONE, user_timezone_details is required.BTSDetails, UserTimezoneDetails descriptions
delivery_controls.bypass_dnd is required for Push event-triggered campaigns.PushDeliveryControls.bypass_dnd
delivery_controls.campaign_throttle_rpm is not applicable for Push device-triggered, location-triggered, and event-triggered campaigns.PushDeliveryControls.campaign_throttle_rpm
delivery_controls.queuing_enabled and queue_duration are flag-gated. queue_duration must be greater than 0 when queuing_enabled is true.PushDeliveryControls.queuing_enabled
delivery_controls.send_limit_value and send_limit_granularity_in_hours apply to location-triggered campaigns.PushDeliveryControls.send_limit_value
delivery_controls.max_time_to_show_message_of_same_camapign, expiry_time_of_sync_data_in_hour, and send_message_in_offline_mode apply to device-triggered campaigns.PushDeliveryControls
control_group_details.campaign_control_group_percentage is required when is_campaign_control_group_enabled is true. The percentage must be between 0 and 100.ControlGroupDetails.campaign_control_group_percentage
campaign_audience_limit is flag-gated. Including it on a workspace where the feature is not enabled returns a 400 VALIDATION_FAILED. When enabled, metric, frequency, and limit are all required. When disabled, those three fields must not be provided. frequency: INSTANCE is Periodic Push only.CampaignAudienceLimit description
utm_params accepts the 5 standard keys plus up to 5 additional utm_-prefixed custom keys. utm_source and utm_medium are required when UTM parameters are used.UTMParams description
advanced.expiration_settings.remove_from_inbox_after_type accepts only DAY. Other granularities fail.AdvancedDetails.expiration_settings
advanced.platform_level_priority.ios_specific_priority.apns_priority values are strings ("1", "5", "10"). relevance_score values are numbers (0, 0.5, 1). interruption_level accepts Passive, Active, Time sensitive, Critical (note the space and casing of Time sensitive).AdvancedDetails.platform_level_priority

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.
The full FAQ on per-state restrictions is at Update Campaign.
{
  "channel": "EMAIL",
  "campaign_delivery_type": "{{campaign_delivery_type}}",
  "updated_by": "{{user_email}}",
  "segmentation_details": {
    "included_filters": {
      "filter_operator": "and",
      "filters": [
        {
          "filter_type": "user_attributes",
          "data_type": "string",
          "name": "city",
          "operator": "in",
          "value": "{{city_value}}"
        }
      ]
    }
  }
}

See also