Skip to main content
Use this reference to configure the request-body components that define campaign content for Push and Email campaigns. It covers basic_details, which carries identifying metadata, platform targeting, and platform-specific delivery flags, and campaign_content, which defines the message payload per channel, platform, and template type, including multi-locale and A/B variation support. Both components are used by Create Campaign and Update Campaign. For audience targeting, scheduling, and delivery controls, see Audience and delivery 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 content payload is a single channel-platform-template combination under campaign_content.content.push (Push) or an html_content or custom_template_id value under campaign_content.content.email (Email).
{
  "campaign_content": {
    "content": {
      "push": {
        "android": {
          "template_type": "BASIC",
          "basic_details": {
            "notification_channel": "general",
            "title": "Your order has shipped",
            "message": "Tap to track it.",
            "default_click_action": "DEEPLINKING",
            "default_click_action_value": "https://example.com/orders"
          }
        }
      }
    }
  }
}
Everything below this section is reference material covering every supported channel, platform, template type, and variation shape.

Page contents

SectionLocation in request body
Push campaign metadatabasic_details on a Push request
Email campaign metadatabasic_details on an Email request
Content payload structurecampaign_content.content
Android push contentcampaign_content.content.push.android
iOS push contentcampaign_content.content.push.ios
Web push contentcampaign_content.content.push.web
Email contentcampaign_content.content.email
A/B test variationscampaign_content.variation_details
Email delivery connectorconnector (Email requests only)
Validation rulesCross-cutting rules enforced at validate or publish
Updating an existing campaignPer-state restrictions for PATCH /v5/campaigns/{campaign_id}

Push campaign metadata

The basic_details object on a Push campaign carries identifying metadata, platform targeting, and platform-specific delivery flags. All fields are optional at creation. A subset becomes required based on campaign_delivery_type.
FieldTypeNotes
namestringThe campaign name shown in the dashboard.
business_eventstringThe business event mapped to the campaign. Required when campaign_delivery_type is BUSINESS_EVENT_TRIGGERED.
tagsarray of stringFree-form context tags.
teamstringThe team collaborating on the campaign. See Teams in MoEngage.
platformsarray of stringTarget platforms. Enum: ANDROID, IOS, WEB.
broadcast_live_activity_idstringThe broadcast Live Activity ID for iOS Live Activities. BROADCAST_LIVE_ACTIVITY is not supported through draft creation. Refer to Validation rules.
geofencesobjectRequired when campaign_delivery_type is LOCATION_TRIGGERED. The full schema is at Geofence targeting.
send_to_triggered_platform_onlybooleanApplicable to event-triggered campaigns. When true, the campaign sends only to the platform that fired the trigger.
platform_specific_detailsobjectPlatform-level delivery flags. See Platform-specific delivery flags.

Platform-specific delivery flags

The platform_specific_details object carries per-platform delivery flags for Push campaigns.
A single Push Amp+ flag is defined for Android.
FieldTypeDefaultNotes
push_amp_plus_enabledbooleanfalseWhether Push Amp+ is enabled for the campaign.
{
  "basic_details": {
    "platforms": ["ANDROID"],
    "platform_specific_details": {
      "android": {
        "push_amp_plus_enabled": false
      }
    }
  }
}

Email campaign metadata

The basic_details object on an Email campaign carries identifying metadata, subscription category, and the recipient-email attribute.
FieldTypeNotes
namestringThe campaign name.
business_eventstringThe business event mapped to the campaign. Required when campaign_delivery_type is BUSINESS_EVENT_TRIGGERED.
content_typestringThe type of content. Enum: PROMOTIONAL, TRANSACTIONAL.
subscription_categorystringThe subscription category for promotional emails. Required when content_type is PROMOTIONAL.
tagsarray of stringFree-form context tags.
teamstringThe team collaborating on the campaign.
user_attribute_identifierstringThe user attribute that stores the recipient email address. Default: Email (Standard). The internal identifier MOE_EMAIL_ID is also accepted.
{
  "basic_details": {
    "name": "Summer Sale Email",
    "content_type": "PROMOTIONAL",
    "subscription_category": "music",
    "tags": ["activation", "summer_sale"],
    "team": "marketing_team",
    "user_attribute_identifier": "Email (Standard)"
  }
}

Content payload structure

The campaign_content.content object accepts two shapes. The shape depends on whether locales or A/B test variations are configured on the campaign.

Flat shape (no locales, no variations)

A flat object directly under content: push for Push campaigns, email for Email campaigns.
{
  "campaign_content": {
    "content": {
      "push": {
        "android": {
          "template_type": "BASIC",
          "basic_details": {
            "title": "Your order has shipped",
            "message": "Tap to track it.",
            "notification_channel": "general",
            "default_click_action": "DEEPLINKING",
            "default_click_action_value": "https://example.com"
          }
        },
        "ios": {
          "template_type": "BASIC",
          "basic_details": {
            "title": "Your order has shipped",
            "message": "Tap to track it.",
            "default_click_action": "DEEPLINKING",
            "default_click_action_value": "https://example.com"
          }
        }
      }
    }
  }
}

Locale-keyed and variation-keyed shape

When locales or A/B test variations are configured, content is keyed first by locale name and then by variation name. The shape is content[locale_name][variation_name] = { push: { ... } } for Push, and content[locale_name][variation_name] = { email: { ... } } for Email.
  • The "default" locale key is always required. It serves as the fallback for users not matched to a named locale.
  • Additional locale keys must each match a value listed in campaign_content.locales (for example, "en-US", "es-ES"). The "default" locale is implicitly present and must not be listed in campaign_content.locales.
  • The variation key (for example, "variation_1") corresponds to the count in variation_details.no_of_variations. When no A/B test is configured, "variation_1" is used as the only key.
{
  "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": "Summer Sale", "message": "Shop now" } } } },
        "variation_2": { "push": { "android": { "template_type": "BASIC", "basic_details": { "title": "Big Discounts", "message": "Save more" } } } }
      },
      "es-ES": {
        "variation_1": { "push": { "android": { "template_type": "BASIC", "basic_details": { "title": "Oferta de Verano", "message": "Compra ahora" } } } },
        "variation_2": { "push": { "android": { "template_type": "BASIC", "basic_details": { "title": "Grandes Descuentos", "message": "Ahorra más" } } } }
      }
    }
  }
}

Android push content

campaign_content.content.push.android (flat shape) or content[locale][variation].push.android (locale/variation shape). Accepted template_type values for Android: BASIC, STYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT, TIMER, TIMER_WITH_PROGRESS_BAR, Custom.
Custom is mixed case (not CUSTOM). Submitting CUSTOM fails validation.
Sub-objectSchemaWhen used
basic_detailsAndroid basic details fieldsAlways. Title, message, image, click action, and template-specific fields.
timerAndroid timer fieldsRequired for TIMER and TIMER_WITH_PROGRESS_BAR.
buttonsarray of Android button fieldsOptional. Action buttons.
advancedAndroid advanced fieldsOptional. TTL, sticky/dismiss behavior, group key.
template_backupAndroid template backup fieldsRequired for STYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT, TIMER, TIMER_WITH_PROGRESS_BAR.
custom_template_idstringRequired when template_type is Custom.
custom_template_versionintegerOptional. The custom template version.

Android template variants

The default template. Carries title, message, and an optional image or GIF.
{
  "campaign_content": {
    "content": {
      "push": {
        "android": {
          "template_type": "BASIC",
          "basic_details": {
            "notification_channel": "general",
            "title": "Limited Time Offer!",
            "message": "Get 50% off on all items. Shop now!",
            "default_click_action": "DEEPLINKING",
            "default_click_action_value": "https://example.com/sale"
          }
        }
      }
    }
  }
}
input_gif_url is supported on BASIC to render a GIF in place of a static image.

Android basic details fields

AndroidBasicDetails collects template-specific styling and click-action fields. Several fields apply only to specific templates.
FieldTypeSupported templates
notification_channelstringAll. The Android notification channel where the push is delivered.
titlestringAll. The notification title.
messagestringAll. The body. HTML formatting is allowed.
summarystringAll. Summary text below the body.
image_urlURIAll (where supported by the template).
input_gif_urlURIBASIC. A GIF rendered in the notification body.
default_click_actionenumAll. DEEPLINKING, NAVIGATE_TO_A_SCREEN, or RICH_LANDING.
default_click_action_valuestringAll. The URL or deep link target for the click action.
key_value_pairsarray of { key, value }All. Custom payload keys forwarded to the SDK.
background_color_codehex stringSTYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT.
app_name_color_codehex stringSTYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT.
notification_control_colorenumSTYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT. LIGHT or DARK.
apply_background_color_in_text_editorbooleanSTYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT.
include_app_name_and_timebooleanIMAGE_BANNER_WITH_TEXT. Renders the app name and timestamp on the banner.
include_title_and_messagebooleanIMAGE_BANNER_WITH_TEXT. Overlays the title and message on the banner.
banner_image_urlURIRequired for IMAGE_BANNER_WITH_TEXT.
collapsed_push_notificationstringIMAGE_BANNER_WITH_TEXT. Configuration for the collapsed view.
image_scalingenumSIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT. FIT_INSIDE_IMAGE_CONTAINER or FILL_IMAGE_CONTAINER.
carousel_contentobjectRequired for SIMPLE_IMAGE_CAROUSEL. See Android carousel content.
Configuration for the image carousel used by SIMPLE_IMAGE_CAROUSEL on Android.
FieldTypeNotes
slider_transitionenummanual or automatic (lowercase).
slide_data[].image_urlURIThe image for the slide.
slide_data[].image_click_actionenumDEEPLINKING, RICH_LANDING, or NAVIGATE_TO_A_SCREEN.
slide_data[].image_click_action_valuestringRequired when image_click_action is provided.
slide_data[].key_value_pairsarray of { key, value }Optional per-slide custom payload keys.

Android timer fields

AndroidTimer is required for TIMER and TIMER_WITH_PROGRESS_BAR.
FieldTypeNotes
timer_ends_atenumDURATION, SPECIFIC_TIME_USER_TIMEZONE, or SPECIFIC_TIME_CAMPAIGN_TIMEZONE.
specific_timedate-timeRequired when personalized_value is true.
time_periodstringRequired when timer_ends_at is SPECIFIC_TIME_USER_TIMEZONE or SPECIFIC_TIME_CAMPAIGN_TIMEZONE.
personalized_valuebooleanWhen false, the same duration applies to all users.
duration_hourstringThe number of hours the timer runs. Required when personalized_value is false.
duration_minutestringThe additional number of minutes the timer runs. Required when personalized_value is false.

Android button fields

Each entry in buttons is an AndroidButton.
FieldTypeNotes
btn_namestringThe visible button label.
click_action_typeenumOne of DEEPLINKING, NAVIGATE_TO_A_SCREEN, RICH_LANDING, CALL, SHARE, COPY, SET_USER_ATTRIBUTE, TRACK_EVENT, CUSTOM_ACTION, SNOOZE, REMIND_LATER.
click_action_namestringThe named action for SET_USER_ATTRIBUTE, TRACK_EVENT, or CUSTOM_ACTION.
click_action_valuestringThe URL, deep link, attribute value, or event name (depending on click_action_type).
key_value_pairsarray of { key, value }Per-button custom payload keys.

Android advanced fields

AndroidAdvanced collects platform-level delivery flags.
FieldTypeNotes
coupon_codestringCoupon code carried in the payload.
icon_type_in_notificationstringThe icon type label.
use_large_iconbooleanWhether to use the large icon.
make_notification_stickybooleanWhen true, the user cannot swipe the notification away.
dismiss_button_textstringRequired when make_notification_sticky is true or auto_dismiss_notification is true.
auto_dismiss_notificationbooleanWhether the notification can be auto-dismissed.
auto_dismiss_notification_time_valueintegerRequired when auto_dismiss_notification is true.
auto_dismiss_notification_time_granularityenumDAYS, HOURS, or MINUTES. Required when auto_dismiss_notification is true.
group_keystringThe group key for related notifications. MoEngage truncates to 45 characters and strips non-Latin scripts, special characters, and spaces.
collapse_replace_keystringThe update key for notifications that replace each other.

Android template backup fields

AndroidTemplateBackup defines the fallback notification rendered when the template cannot be displayed (for example, on older Android versions). Required for STYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT, TIMER, and TIMER_WITH_PROGRESS_BAR.
FieldTypeNotes
titlestringFallback title.
messagestringFallback body.
summarystringFallback summary.
image_urlURIFallback image.
default_click_actionenumDEEPLINKING, NAVIGATE_TO_A_SCREEN, or RICH_LANDING.
default_click_action_valuestringFallback click action target.
key_value_pairsarray of { key, value }Per-fallback custom payload keys.

iOS push content

campaign_content.content.push.ios. Accepted template_type values for iOS: BASIC, STYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, Custom.
iOS does not support IMAGE_BANNER_WITH_TEXT, TIMER, or TIMER_WITH_PROGRESS_BAR. Submitting any of these for iOS fails validation.
Sub-objectSchemaWhen used
basic_detailsiOS basic details fieldsAlways.
buttonsarray of iOS button fieldsOptional. iOS button categories.
advancediOS advanced fieldsOptional. Custom sound, badge, group key.
template_backupiOS template backup fieldsRequired for STYLIZED_BASIC and SIMPLE_IMAGE_CAROUSEL.
custom_template_idstringRequired when template_type is Custom.
custom_template_versionintegerOptional.

iOS template variants

{
  "campaign_content": {
    "content": {
      "push": {
        "ios": {
          "template_type": "BASIC",
          "basic_details": {
            "title": "New Message",
            "message": "You have a new message waiting for you",
            "subtitle": "Inbox update",
            "default_click_action": "DEEPLINKING",
            "default_click_action_value": "https://example.com/inbox"
          }
        }
      }
    }
  }
}
Optional rich media: rich_media_type (Image, Video, or GIF, in title case) with rich_media_value (the URL). input_gif_url is supported on BASIC and STYLIZED_BASIC.

iOS basic details fields

FieldTypeSupported templates
titlestringAll.
messagestringAll.
subtitlestringAll. Rendered below the title.
default_click_actionenumAll. DEEPLINKING, NAVIGATE_TO_A_SCREEN, or RICH_LANDING.
default_click_action_valuestringAll.
key_value_pairsarray of { key, value }All.
allow_bg_refreshbooleanAll. Whether the app can be woken in the background to refresh content.
rich_media_typeenumBASIC. Image, Video, or GIF (title case).
rich_media_valueURIBASIC. The media asset URL.
input_gif_urlURIBASIC, STYLIZED_BASIC. A GIF URL.
image_urlURIAll. Required when template_type is SIMPLE_IMAGE_CAROUSEL.
background_color_codehex stringSTYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL.
apply_background_color_in_text_editorbooleanSTYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL.
carousel_contentobjectRequired for SIMPLE_IMAGE_CAROUSEL. See iOS carousel content.
FieldTypeNotes
slider_transitionenumMANUAL or AUTOMATIC (uppercase, differs from Android).
slide_data[].image_urlURIThe image for the slide.
slide_data[].image_click_actionenumDEEPLINKING, RICH_LANDING, or NAVIGATE_TO_A_SCREEN.
slide_data[].image_click_action_valuestringThe target for the slide click.
slide_data[].key_value_pairsarray of { key, value }Per-slide custom payload keys.

iOS button fields

iOS buttons use a category-based model. Buttons are pre-defined in the app, and the campaign references the category by name.
FieldTypeNotes
button_categorystringThe pre-defined category name configured in the app (for example, MOE_PUSH_TEMPLATE).

iOS advanced fields

FieldTypeNotes
coupon_codestringCoupon code carried in the payload.
sound_filestringThe name of a custom sound file in the app bundle.
enable_ios_badgebooleanWhether the campaign increments the app’s badge count.
group_keystringThe group key for related notifications. Truncated to 45 characters; non-Latin scripts, special characters, and spaces are stripped.
collapse_replace_keystringThe update key for notifications that replace each other.

iOS template backup fields

Required for STYLIZED_BASIC and SIMPLE_IMAGE_CAROUSEL.
FieldTypeNotes
titlestringFallback title.
messagestringFallback body.
subtitlestringFallback subtitle.
allow_bg_refreshbooleanWhether to enable background app refresh for the fallback.
rich_media_typeenumImage, Video, or GIF.
rich_media_valueURIThe media URL.
default_click_actionenumDEEPLINKING, NAVIGATE_TO_A_SCREEN, or RICH_LANDING.
default_click_action_valuestringThe click target.
key_value_pairsarray of { key, value }Per-fallback custom payload keys.

Web push content

campaign_content.content.push.web. Web push currently supports only template_type: BASIC.
{
  "campaign_content": {
    "content": {
      "push": {
        "web": {
          "template_type": "BASIC",
          "basic_details": {
            "title": "Special Offer",
            "message": "Check out our latest deals!",
            "redirect_url": "https://example.com/offers",
            "image_url": "https://example.com/hero.jpg",
            "auto_dismiss_notification": false
          },
          "buttons": [
            { "title": "View Offer", "url": "https://example.com/offers", "icon_url": "https://example.com/icons/offer.png" }
          ],
          "advanced": {
            "icon_image_type": "ICON_URL",
            "icon_url": "https://example.com/icon.png"
          }
        }
      }
    }
  }
}

Web basic details fields

FieldTypeNotes
titlestringThe notification title.
messagestringThe notification body.
redirect_urlURIThe URL opened on click of the notification body.
image_urlURIOptional large image.
auto_dismiss_notificationbooleanWhether the notification auto-dismisses.

Web button fields

Each entry in buttons is a WebButton.
FieldTypeNotes
titlestringThe button label.
icon_urlURIOptional icon displayed next to the label.
urlURIThe destination opened on click of the button.

Web advanced fields

FieldTypeNotes
icon_image_typeenumDEFAULT or ICON_URL.
icon_urlURIThe custom icon URL. Required when icon_image_type is ICON_URL.

Email content

campaign_content.content.email carries the email message. Two mutually compatible content sources are supported: raw HTML in html_content, or a saved template referenced by custom_template_id. At least one of these must be present.
FieldTypeNotes
subjectstringThe subject line.
preview_textstringThe preview text shown in inbox listings.
sender_namestringThe display name of the sender.
from_addressemailThe sender email address.
reply_to_addressemailThe reply-to address.
cc_idsarray of emailCC recipients.
bcc_idsarray of emailBCC recipients.
html_contentstringThe raw HTML body. Optional when custom_template_id is provided.
email_editorenumFroala Editor or Ace Editor. Required when the campaign uses Ace Editor.
custom_template_idstringA saved email template ID. When provided, subject, preview_text, and sender_name are not required.
custom_template_versionintegerOptional template version.
attachmentsarray of { file_type, url }See Email attachments.

Email content variants

{
  "campaign_content": {
    "content": {
      "email": {
        "subject": "Welcome to our store",
        "sender_name": "Example Team",
        "preview_text": "Get started in seconds",
        "from_address": "[email protected]",
        "reply_to_address": "[email protected]",
        "html_content": "<!DOCTYPE html><html><body><p>Hello {{UserAttribute['First Name']}}</p></body></html>"
      }
    }
  }
}

Email attachments

Each entry in attachments is { file_type, url }.
file_typeBehavior
URLA static file hosted at a fixed URL. Every recipient receives the same file.
PERSONALIZED_ATTACHMENTA personalized file generated per recipient via a URL that includes personalization expressions.
{
  "campaign_content": {
    "content": {
      "email": {
        "subject": "Latest brochure",
        "from_address": "[email protected]",
        "html_content": "<p>See the attached brochure.</p>",
        "attachments": [
          { "file_type": "URL", "url": "https://example.com/brochure.pdf" }
        ]
      }
    }
  }
}

A/B test variations

campaign_content.variation_details configures A/B testing.
FieldTypeNotes
distribution_typeenumMANUAL or SHERPA.
no_of_variationsinteger (≥ 1)The number of variations.
manual_distribution_percentageobjectA map of variation name to integer percentage. Values must be positive integers that sum to 100. Required when distribution_type is MANUAL.
sherpa_campaign_durationinteger (hours)The window over which Sherpa collects performance data before declaring a winning variation. Required when distribution_type is SHERPA.
sherpa_distribution_metricenumOPEN RATE, CLICK RATE, or BOTH. Required when distribution_type is SHERPA.
When variation_details is set, campaign_content.content must use the locale-keyed and variation-keyed shape. See Content payload structure.
{
  "campaign_content": {
    "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": "Variant A", "message": "Try us today" } } } },
        "variation_2": { "push": { "android": { "template_type": "BASIC", "basic_details": { "title": "Variant B", "message": "Save 20% today" } } } }
      }
    }
  }
}

Email delivery connector

The connector object is part of the Email request body (not the Email campaign_content) and identifies the delivery provider configured in the workspace.
connector is required on Email Create requests and Email inline test requests. It is not part of the Push request body.
FieldTypeNotes
connector_typestringThe connector service (for example, SENDGRID, AWS SES).
connector_namestringThe connector configuration name in the MoEngage workspace.
{
  "connector": {
    "connector_type": "SENDGRID",
    "connector_name": "Sendgrid1"
  }
}

Validation rules

The following rules span multiple sub-objects on this page. Each is enforced at validate or publish time.
RuleSource
For Push template_type: Custom, custom_template_id is required (Android, iOS).AndroidPushContent.custom_template_id, IOSPushContent.custom_template_id
iOS supports only BASIC, STYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, and Custom. Submitting IMAGE_BANNER_WITH_TEXT, TIMER, or TIMER_WITH_PROGRESS_BAR for iOS fails.IOSPushContent.template_type enum
Web push supports only BASIC.WebPushContent.template_type enum
For Android STYLIZED_BASIC, SIMPLE_IMAGE_CAROUSEL, IMAGE_BANNER_WITH_TEXT, TIMER, and TIMER_WITH_PROGRESS_BAR, template_backup is required.AndroidTemplateBackup description
For iOS STYLIZED_BASIC and SIMPLE_IMAGE_CAROUSEL, template_backup is required.IOSTemplateBackup description
For Android IMAGE_BANNER_WITH_TEXT, banner_image_url is required.AndroidBasicDetails.banner_image_url
For iOS SIMPLE_IMAGE_CAROUSEL, image_url is required (used as the cover image before the carousel loads).IOSBasicDetails.image_url
For Android TIMER and TIMER_WITH_PROGRESS_BAR, timer is required. When personalized_value is false, both duration_hour and duration_minute are required. When personalized_value is true, specific_time is required.AndroidTimer.duration_hour, AndroidTimer.duration_minute, AndroidTimer.specific_time
For Android STYLIZED_BASIC and SIMPLE_IMAGE_CAROUSEL, the slider transition is lowercase (manual or automatic). For iOS SIMPLE_IMAGE_CAROUSEL, the slider transition is uppercase (MANUAL or AUTOMATIC). Mismatched casing fails validation.CarouselContent.slider_transition, IOSCarouselContent.slider_transition
For Android, when make_notification_sticky is true or auto_dismiss_notification is true, dismiss_button_text is required. When auto_dismiss_notification is true, auto_dismiss_notification_time_value and auto_dismiss_notification_time_granularity are also required.AndroidAdvanced.dismiss_button_text
For iOS, exactly one of send_to_all_eligible_device, exclude_provisional_push_devices, or send_to_only_provisional_push_enabled_devices must be true inside basic_details.platform_specific_details.ios.PlatformSpecificDetails.ios description
For Email content_type: PROMOTIONAL, subscription_category is required.EmailBasicDetailsV5.subscription_category
For Email, html_content is optional when custom_template_id is provided. When custom_template_id is provided, subject, preview_text, and sender_name are not required.EmailContent.html_content, EmailContent.custom_template_id
For an A/B test with distribution_type: MANUAL, manual_distribution_percentage values must sum to 100. For SHERPA, sherpa_campaign_duration and sherpa_distribution_metric are both required.VariationDetails description
For multi-locale or multi-variation campaigns, the "default" locale key is always required and serves as the fallback. Additional locale keys must match values listed in campaign_content.locales.PushCampaignContent.content, EmailCampaignContent.content
connector is required on Email Create requests and Email inline test requests.Connector description
BROADCAST_LIVE_ACTIVITY is not supported through draft creation. The V1 Campaigns API is used to send a Live Activity broadcast.PushCampaignCreateV5Request.campaign_delivery_type description
business_event (inside basic_details) is required when campaign_delivery_type is BUSINESS_EVENT_TRIGGERED.PushBasicDetailsV5.business_event, EmailBasicDetailsV5.business_event
geofences (inside basic_details) is required when campaign_delivery_type is LOCATION_TRIGGERED. The full schema is at Geofence targeting.Geofences description

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 only the title of an Android push, the full campaign_content.content.push.android block is included.
  • The Update request body includes updated_by (the editing user’s email, for audit purposes). When omitted, the update is attributed to the authenticated API credential.
  • For campaigns in ACTIVE state, the following fields cannot be edited: trigger_condition, segmentation_details, conversion_goal_details, the scheduling type, and the scheduling start date. campaign_content and basic_details.platforms can be edited. The full per-state matrix is at Update Campaign.
  • Updates to campaign_content on event-triggered campaigns can take up to 30 minutes to propagate due to content caching.
  • The Update Push schema accepts BROADCAST_LIVE_ACTIVITY as a campaign_delivery_type value, but draft creation does not. A draft cannot be transitioned to a Live Activity campaign through V5.
{
  "channel": "PUSH",
  "campaign_delivery_type": "{{campaign_delivery_type}}",
  "updated_by": "{{user_email}}",
  "campaign_content": {
    "content": {
      "push": {
        "android": {
          "template_type": "BASIC",
          "basic_details": {
            "title": "{{notification_title}}",
            "message": "{{notification_message}}"
          }
        }
      }
    }
  }
}

See also