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 undercampaign_content.content.push (Push) or an html_content or custom_template_id value under campaign_content.content.email (Email).
Page contents
Push campaign metadata
Thebasic_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
Theplatform_specific_details object carries per-platform delivery flags for Push campaigns.
- Android
- iOS
A single Push Amp+ flag is defined for Android.
Email campaign metadata
Thebasic_details object on an Email campaign carries identifying metadata, subscription category, and the recipient-email attribute.
Content payload structure
Thecampaign_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 undercontent: 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 incampaign_content.locales. - The variation key (for example,
"variation_1") corresponds to the count invariation_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.
Android template variants
- BASIC
- STYLIZED_BASIC
- SIMPLE_IMAGE_CAROUSEL
- TIMER
- TIMER_WITH_PROGRESS_BAR
- Custom
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.
Android carousel content
Configuration for the image carousel used bySIMPLE_IMAGE_CAROUSEL on Android.
Android timer fields
AndroidTimer is required for TIMER and TIMER_WITH_PROGRESS_BAR.
Android button fields
Each entry inbuttons 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 template variants
- BASIC
- STYLIZED_BASIC
- SIMPLE_IMAGE_CAROUSEL
- Custom
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 carousel content
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 forSTYLIZED_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 inbuttons 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
- HTML content
- Saved template
- Ace Editor
- CC and BCC
Email attachments
Each entry inattachments 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.
- MANUAL (50/50)
- SHERPA (auto-optimized)
Email delivery connector
Theconnector 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.androidblock 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
ACTIVEstate, the following fields cannot be edited:trigger_condition,segmentation_details,conversion_goal_details, the scheduling type, and the scheduling start date.campaign_contentandbasic_details.platformscan be edited. The full per-state matrix is at Update Campaign. - Updates to
campaign_contenton event-triggered campaigns can take up to 30 minutes to propagate due to content caching. - The Update Push schema accepts
BROADCAST_LIVE_ACTIVITYas acampaign_delivery_typevalue, but draft creation does not. A draft cannot be transitioned to a Live Activity campaign through V5.
- campaign_content (Push)
- campaign_content (Email)
- platform_specific_details
- control_group_details (Push)
- control_group_details (Email)
See also
- Audience and delivery reference —
trigger_condition,segmentation_details,scheduling_details,delivery_controls,conversion_goal_details,control_group_details,utm_params,campaign_audience_limit,advanced, andgeofences. - Create Campaign — required fields, happy-path cURLs, error responses.
- Update Campaign — per-state edit restrictions, publish action.
- Update Campaign Status —
STOP,PAUSE,RESUMEtransitions. - Validate Campaign — pre-publish validation check.
- Campaign drafts overview — lifecycle, channels, supported delivery types.