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).
Everything below this section is reference material covering every supported channel, platform, template type, and variation shape.

Page contents

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.

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.

Email campaign metadata

The basic_details object on an Email campaign carries identifying metadata, subscription category, and the recipient-email attribute.

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.

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.

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.

Android template variants

The default template. Carries title, message, and an optional image or GIF.
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. Configuration for the image carousel used by SIMPLE_IMAGE_CAROUSEL on Android.

Android timer fields

AndroidTimer is required for TIMER and TIMER_WITH_PROGRESS_BAR.

Android button fields

Each entry in buttons is an AndroidButton.

Android advanced fields

AndroidAdvanced collects platform-level delivery flags.

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.

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.

iOS template variants

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

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.

iOS advanced fields

iOS template backup fields

Required for STYLIZED_BASIC and SIMPLE_IMAGE_CAROUSEL.

Web push content

campaign_content.content.push.web. Web push currently supports only template_type: BASIC.

Web basic details fields

Web button fields

Each entry in buttons is a WebButton.

Web advanced fields

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.

Email content variants

Email attachments

Each entry in attachments is { file_type, url }.

A/B test variations

campaign_content.variation_details configures A/B testing. When variation_details is set, campaign_content.content must use the locale-keyed and variation-keyed shape. See Content payload structure.

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.

Validation rules

The following rules span multiple sub-objects on this page. Each is enforced at validate or publish time.

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.

See also