openapi: 3.2.0
info:
title: Moengage Update Campaigns API
version: '2025-11-20'
contact:
name: MoEngage Developer Team
email: support@moengage.com
url: https://developers.moengage.com
description: 'Operations tagged Update Campaigns across 2 of this provider''s published API definitions: moengage-campaign-draft-openapi.yml, moengage-campaigns-openapi.yml. Each path carries the servers of the definition it was published in.'
servers:
- url: https://api-{dc}.moengage.com/
description: MoEngage Campaigns API Server
variables:
dc:
default: '01'
description: Data center (DC) segment in the hostname. Replace `OX` with your workspace DC (01–06 or 101). See [Data centers](/api/introduction#data-centers).
- url: https://api-{dc}.moengage.com/core-services/v1
description: MoEngage Campaigns API Server
variables:
dc:
default: '01'
description: The ‘dc’ in the API Endpoint URL refers to the MoEngage Data Center (DC). MoEngage hosts each customer in a different DC. You can find your DC number and replace the value of ‘dc’ in the URL by referring to the DC and API endpoint mapping [here](/api/introduction#data-centers). Your MoEngage Data Center (DC) can be 01, 02, 03, 04, 05, 06, or 101.
security:
- BasicAuth: []
tags:
- name: Update Campaigns
paths:
/v5/campaigns/{campaign_id}:
patch:
operationId: patch_draft_campaign_v5
summary: Update Campaign (V5)
description: 'Updates individual components of a campaign draft.
'
x-mint:
content: '
Sale ends tonight!
push_update_scheduling: summary: Push - Update Scheduling value: request_id: push_sched_update updated_by: john.doe@example.com scheduling_details: expiry_time: '2026-07-20T13:55:00' responses: '204': $ref: '#/components/responses/NoContent' '400': $ref: '#/components/responses/BadRequest' '401': $ref: '#/components/responses/Unauthorized' '500': $ref: '#/components/responses/InternalServerError' servers: - url: https://api-{dc}.moengage.com/core-services/v1 description: MoEngage Campaigns API Server variables: dc: default: '01' description: The ‘dc’ in the API Endpoint URL refers to the MoEngage Data Center (DC). MoEngage hosts each customer in a different DC. You can find your DC number and replace the value of ‘dc’ in the URL by referring to the DC and API endpoint mapping [here](/api/introduction#data-centers). Your MoEngage Data Center (DC) can be 01, 02, 03, 04, 05, 06, or 101. /campaigns/status: post: operationId: change_campaign_status summary: Change Campaign Status description: 'This API updates the status of campaigns to stop, pause, or resume them. You can only change the status of campaigns created via the [Create Campaign API](https://www.moengage.com/docs/api/create-campaigns/create-campaign) (not dashboard-created campaigns). ' x-mint: content: "
servers:
- url: https://api-{dc}.moengage.com/core-services/v1
description: MoEngage Campaigns API Server
variables:
dc:
default: '01'
description: The ‘dc’ in the API Endpoint URL refers to the MoEngage Data Center (DC). MoEngage hosts each customer in a different DC. You can find your DC number and replace the value of ‘dc’ in the URL by referring to the DC and API endpoint mapping [here](/api/introduction#data-centers). Your MoEngage Data Center (DC) can be 01, 02, 03, 04, 05, 06, or 101.
components:
schemas:
EmailComponentPatchRequest:
title: Update Email Campaign Draft
type: object
description: 'Update one or more components of an Email campaign draft. Only fields you include are changed,
omitted fields retain their current values. When updating a nested field, include its complete
parent object.
'
properties:
request_id:
type: string
description: A unique identifier for this update request.
example: '{{request_id}}'
channel:
type: string
enum:
- EMAIL
description: Must be `EMAIL` for an Email update.
campaign_delivery_type:
type: string
enum:
- ONE_TIME
- PERIODIC
- EVENT_TRIGGERED
- BUSINESS_EVENT_TRIGGERED
description: The delivery type of the campaign being updated.
updated_by:
type: string
format: email
description: 'The email address of the user making this update, used for audit trail purposes.
If omitted, the update is attributed to the authenticated API credential.
'
example: marketer@example.com
basic_details:
$ref: '#/components/schemas/EmailBasicDetailsV5'
connector:
$ref: '#/components/schemas/Connector'
trigger_condition:
$ref: '#/components/schemas/EmailTriggerCondition'
campaign_content:
$ref: '#/components/schemas/EmailCampaignContent'
segmentation_details:
$ref: '#/components/schemas/SegmentationDetails'
scheduling_details:
$ref: '#/components/schemas/SchedulingDetails'
delivery_controls:
$ref: '#/components/schemas/EmailDeliveryControls'
advanced:
$ref: '#/components/schemas/AdvancedDetails'
conversion_goal_details:
$ref: '#/components/schemas/ConversionGoalDetails'
control_group_details:
$ref: '#/components/schemas/ControlGroupDetails'
utm_params:
$ref: '#/components/schemas/UTMParams'
campaign_audience_limit:
allOf:
- $ref: '#/components/schemas/CampaignAudienceLimit'
description: 'Configuration for capping how many users this campaign can reach. **Flag-gated feature** — must be enabled for your workspace by your MoEngage account team before use.
'
GoalEventAttribute:
type: object
description: Attributes associated with the conversion goal event.
properties:
name:
type: string
description: The name of the goal event attribute.
condition:
type: string
description: The condition used while creating the goal (e.g., "is", "contains", "between").
data_type:
type: string
enum:
- STRING
- DOUBLE
- BOOL
- NUMBER
- GEOPOINT
- DATETIME
- ARRAY_DOUBLE
- ARRAY_STRING
- OBJECT
- ARRAY_OBJECT
description: The data type of the attribute.
value:
type: string
description: 'The value of the goal event attribute.
Supported data types: STRING, DOUBLE, BOOL, NUMBER, GEOPOINT, DATETIME, ARRAY_DOUBLE, ARRAY_STRING.
'
value1:
type: string
description: 'A secondary value, used for conditions like ''between''.
Supported data types: STRING, DOUBLE, BOOL, NUMBER, GEOPOINT, DATETIME, ARRAY_DOUBLE, ARRAY_STRING.
'
negate:
type: boolean
description: Whether to negate the filter condition.
value_type:
type: string
description: The type of value being filtered.
array_filter_type:
type: string
description: The logical filter type for array attributes.
filters:
type: array
items:
type: object
description: A list of sub-filters used when data_type is OBJECT or ARRAY_OBJECT.
is_case_sensitive:
type: boolean
description: Whether the goal event attribute is case-sensitive.
EmailCampaignContent:
type: object
description: 'Email content, locales, and A/B variations.
For full `POST /v5/campaigns` request examples that include `campaign_content`, refer to `campaign_delivery_type` on `EmailCampaignCreateV5Request`, `VariationDetails`, and the Create Campaign Draft code samples.
For Email content variants, including `html_content` versus `custom_template_id`, CC/BCC, attachments, and editor selection (`Froala Editor` versus `Ace Editor`), refer to [Email content](/api/campaigns/campaign-content-reference#email-content).
'
properties:
locales:
type: array
items:
type: string
description: 'Additional locale names for multi-language campaigns. List only the non-default locales here (for example, `"en-US"`, `"es-ES"`). The `"default"` locale is always implicitly present and must not be included in this array.
'
example:
- en-US
- es-ES
variation_details:
$ref: '#/components/schemas/VariationDetails'
content:
type: object
description: 'The campaign message payload. Two shapes are accepted:
- **Flat shape (no locales or variations):** Pass a flat `email` object directly under `content`.
- **Locale-keyed and variation-keyed shape:** Key by locale name, then by variation name: `content[locale_name][variation_name] = { email: { ... } }`. The `"default"` locale key is always required and serves as the fallback. Additional locale keys must match values listed in `locales`.
For runnable payloads for both shapes, refer to [Content payload structure](/api/campaigns/campaign-content-reference#content-payload-structure).
'
properties:
email:
$ref: '#/components/schemas/EmailContent'
additionalProperties:
type: object
description: Variation-keyed content blocks for a single locale.
additionalProperties:
type: object
properties:
email:
$ref: '#/components/schemas/EmailContent'
KeyValuePair:
type: object
description: A custom key-value pair attached to the push payload.
properties:
key:
type: string
description: The key name.
value:
type: string
description: The value.
V5SuccessEnvelope:
type: object
properties:
response_id:
type: string
type:
type: string
example: campaign
data:
type: object
Geofences:
type: object
description: 'Geofence location details for location-triggered campaigns.
**Required** for LOCATION_TRIGGERED campaigns.
For per-`triggered_at` runnable payloads (`ENTRY`, `EXIT`, `dwell`) and the casing distinction between `ENTRY`/`EXIT` (uppercase) and `dwell` (lowercase), refer to [Geofence targeting](/api/campaigns/audience-scheduling-delivery-reference#geofence-targeting).
'
required:
- name
- latitude
- longitude
- radius
- response_time_value
- response_time_granularity
- triggered_at
properties:
name:
type: string
description: The unique name of the geofence location being targeted.
latitude:
type: string
description: The latitude coordinate for the center of the geofence area.
longitude:
type: string
description: The longitude coordinate for the center of the geofence area.
radius:
type: string
description: The radius in meters from the center point that defines the boundary of the geofence.
dwell_time_value:
type: string
description: 'The numeric value for the time to wait before sending the message after the trigger condition is met.
**Required** when triggered_at is set to "dwell".
'
dwell_time_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: 'The time unit for the dwell_time_value.
**Required** when triggered_at is set to "dwell".
'
response_time_value:
type: string
description: The numeric value for the time to wait before sending the message after the trigger condition is met.
response_time_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: The time unit for the response_time_value.
triggered_at:
type: string
enum:
- ENTRY
- EXIT
- dwell
description: 'The user action that triggers the campaign (when user enters/exits the geofence).
'
AndroidTimer:
type: object
description: 'Timer configuration for Timer and Timer with Progress Bar templates.
**Required for:** TIMER and TIMER_WITH_PROGRESS_BAR templates
'
properties:
timer_ends_at:
type: string
enum:
- DURATION
- SPECIFIC_TIME_USER_TIMEZONE
- SPECIFIC_TIME_CAMPAIGN_TIMEZONE
description: How the timer's endpoint is determined.
specific_time:
type: string
format: date-time
description: 'The specific time when the timer ends.
**Required** when personalized_value is true.
'
time_period:
type: string
description: 'The time period for the timer.
**Required** when timer_ends_at is SPECIFIC_TIME_USER_TIMEZONE or SPECIFIC_TIME_CAMPAIGN_TIMEZONE.
'
personalized_value:
type: boolean
description: 'Whether the timer duration is personalized per user.
If false, all users get the same duration.
'
duration_hour:
type: string
description: 'The number of hours the timer will run for.
**Required** when personalized_value is false.
'
example: '2'
duration_minute:
type: string
description: 'The number of minutes the timer will run for (in addition to hours).
**Required** when personalized_value is false.
'
example: '30'
AndroidTemplateBackup:
type: object
description: 'Fallback notification content for when the template cannot be rendered.
**Required for:** Stylized Basic, Simple Image Carousel, Image Banner with Text, Timer, and Timer with Progress Bar templates
'
properties:
title:
type: string
description: The title for the fallback notification.
message:
type: string
description: The message body for the fallback notification.
summary:
type: string
description: The summary for the fallback notification.
image_url:
type: string
format: uri
description: The URL of an image for the fallback notification.
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The default click action for the fallback notification.
default_click_action_value:
type: string
description: The URL or deep link for the fallback's click action.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair'
description: Custom key-value pairs specific to the fallback payload.
ConversionGoalDetails:
type: object
description: 'Configuration for tracking campaign conversion goals.
For runnable single-goal and multi-goal examples, refer to [Conversion goal tracking](/api/campaigns/audience-scheduling-delivery-reference#conversion-goal-tracking).
'
properties:
attribution_window_in_hours:
type: integer
description: The attribution window in hours.
example: 36
goals:
type: array
items:
$ref: '#/components/schemas/Goal'
description: List of conversion goals to track.
PeriodicDetails:
type: object
description: 'Configuration for periodic campaigns.
**Required** for PERIODIC campaigns.
For runnable Daily, Weekly, Monthly (specific dates), and Monthly (first Monday) examples, refer to [Periodic schedules](/api/campaigns/audience-scheduling-delivery-reference#periodic-schedules).
'
properties:
sending_frequency:
type: string
enum:
- DAILY
- WEEKLY
- MONTHLY
description: The frequency to send the campaign.
repeat_frequency:
type: integer
description: The repeat frequency of the campaign.
no_of_occurences:
type: integer
description: The number of occurrences of the campaign.
repeat_on_date_of_month:
type: array
items:
type: integer
description: 'The dates of the month on which the campaign should be repeated.
Example: [5, 25] to send on the 5th and 25th of each month.
'
repeat_on_days_of_week:
type: array
items:
type: string
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
description: 'The days of the week on which the campaign should repeat.
'
repeat_on_days_of_week_for_month:
type: array
items:
type: object
properties:
week_granularity:
type: string
enum:
- FIRST
- SECOND
- THIRD
- FOURTH
- LAST
repeat_on_days_of_week:
type: array
items:
type: string
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
description: 'Configuration for repeating on specific weeks of the month.
'
AdvancedDetails:
type: object
description: 'Advanced Push delivery settings, including notification expiration and per-platform priority.
For runnable iOS APNS priority and Android priority examples, refer to [Advanced Push settings](/api/campaigns/audience-scheduling-delivery-reference#advanced-push-settings).
'
properties:
expiration_settings:
type: object
properties:
expire_notification_after_value:
type: integer
description: The numeric value for the notification expiration time.
expire_notification_after_type:
type: string
enum:
- HOUR
- DAY
description: The time unit for notification expiration.
remove_from_inbox_after_value:
type: integer
description: The numeric value for when to remove the message from the inbox.
remove_from_inbox_after_type:
type: string
enum:
- DAY
description: The time unit for removing the message from the inbox.
platform_level_priority:
type: object
properties:
android_specific_priority:
type: object
properties:
send_with_priority:
type: boolean
description: Whether to send with priority.
ios_specific_priority:
type: object
properties:
apns_priority:
type: string
enum:
- '1'
- '5'
- '10'
description: The priority of notification delivery for APNS.
interruption_level:
type: string
enum:
- PASSIVE
- ACTIVE
- TIME_SENSITIVE
- CRITICAL
description: The interruption level for iOS notifications.
relevance_score:
type: number
enum:
- 0
- 0.5
- 1
description: The relevance score for iOS notifications.
PushDeliveryControls:
type: object
description: 'Controls for Push campaign delivery behavior.
For per-delivery-type runnable examples (throttle, event-triggered, device-triggered, location-triggered, queuing), refer to [Push delivery controls](/api/campaigns/audience-scheduling-delivery-reference#push-delivery-controls).
'
properties:
bypass_dnd:
type: boolean
description: 'Whether to bypass Do Not Disturb settings.
Required for event-triggered campaigns.
'
campaign_throttle_rpm:
type: integer
description: 'The campaign throttle in requests per minute.
Not applicable for device-triggered, location-triggered, and event-triggered campaigns.
'
example: 50000
count_for_frequency_capping:
type: boolean
description: Whether to count this campaign for frequency capping.
ignore_frequency_capping:
type: boolean
description: Whether to ignore frequency capping for this campaign.
minimum_delay_between_two_notification_in_hour:
type: integer
description: 'Minimum delay between two notifications in hours.
Applies to event-triggered and device-triggered campaigns.
'
max_time_to_show_message_of_same_camapign:
type: string
description: 'Maximum duration (in hours) that a message from this campaign will be displayed to a user.
Applicable for device-triggered campaigns.
'
expiry_time_of_sync_data_in_hour:
type: string
description: 'Duration (in hours) after which synced campaign data will expire if trigger condition is not met.
Applicable for device-triggered campaigns.
'
send_message_in_offline_mode:
type: boolean
description: 'Whether to store and deliver the message when the device is offline.
Applicable for device-triggered campaigns.
'
send_limit_value:
type: string
description: 'Maximum number of times a user can receive this campaign within the specified time granularity.
Applicable for location-triggered campaigns.
'
send_limit_granularity_in_hours:
type: string
description: 'Time window (in hours) during which the send_limit_value is enforced.
Applicable for location-triggered campaigns.
'
ignore_global_minimum_delay:
type: boolean
description: 'Whether to bypass the global minimum delay setting configured at the workspace level.
When `true`, this campaign ignores the workspace-wide minimum interval between push notifications
and can be delivered to a user regardless of how recently they received another push. Use this
for time-sensitive campaigns (for example, transactional or alert-style messages) where
respecting the global delay would reduce delivery timeliness.
Applies to event-triggered campaigns.
'
queuing_enabled:
type: boolean
description: 'Enables message queuing for this campaign. When set to `true`, messages that are temporarily blocked by DND, frequency capping, or minimum delay restrictions are held in a queue and delivered as soon as the restriction clears, rather than being dropped.
**Supported delivery types:** `ONE_TIME`, `PERIODIC`, `EVENT_TRIGGERED`, `BUSINESS_EVENT_TRIGGERED`. Not applicable to `DEVICE_TRIGGERED` or `LOCATION_TRIGGERED` campaigns.
**DND interaction:**
- When `bypass_dnd` is `false` (DND respected): messages blocked during a DND window are queued and delivered once the window passes.
- When `bypass_dnd` is `true` (DND ignored): queuing applies to frequency capping and minimum delay blocks only.
**Auto-disabled:** When both `ignore_frequency_capping` and `minimum_delay_between_two_notification_in_hour` are configured to bypass all delivery restrictions, queuing is automatically disabled.
**Queue limits:** Up to 10,000,000 messages for `ONE_TIME`, `PERIODIC`, and `BUSINESS_EVENT_TRIGGERED` campaigns; up to 1,000,000 for `EVENT_TRIGGERED` campaigns.
**Delivery order:** Queued messages are delivered in first-in, first-out (FIFO) order.
'
queue_duration:
type: integer
minimum: 0
maximum: 48
description: 'The duration in hours during which a queued message will be retried for delivery. Accepted range: `1`–`48` hours. Set to `0` when `queuing_enabled` is `false`.
If a user does not become eligible for delivery within the configured window, the message is dropped and the outcome is recorded in campaign analytics.
For active `PERIODIC` and triggered campaigns, changes to this value apply only to messages queued after the update. Messages already in the queue retain the original duration.
'
SegmentationDetails:
type: object
description: 'Defines the target audience for the campaign.
For included/excluded filter combinations, filter primitives (`user_attributes`, `actions`, `custom_segments`), and opt-out targeting, refer to [Campaign audience](/api/campaigns/audience-scheduling-delivery-reference#campaign-audience).
'
properties:
included_filters:
$ref: '#/components/schemas/FilterGroup'
excluded_filters:
allOf:
- $ref: '#/components/schemas/FilterGroup'
description: 'Filters that exclude users from the campaign audience.
'
is_all_user_campaign:
type: boolean
description: Whether to include all users in the campaign.
send_campaign_to_opt_out_users:
type: boolean
description: Whether to send the campaign to users who have opted out. For runnable examples, refer to [Campaign audience](/api/campaigns/audience-scheduling-delivery-reference#campaign-audience).
PushComponentPatchRequest:
title: Update Push Campaign Draft
type: object
description: 'Update one or more components of a Push campaign draft. Only fields you include are changed,
omitted fields retain their current values. When updating a nested field, include its complete
parent object.
'
properties:
request_id:
type: string
description: A unique identifier for this update request.
example: '{{request_id}}'
channel:
type: string
enum:
- PUSH
description: Must be `PUSH` for a Push update.
campaign_delivery_type:
type: string
enum:
- ONE_TIME
- PERIODIC
- EVENT_TRIGGERED
- BUSINESS_EVENT_TRIGGERED
- DEVICE_TRIGGERED
- LOCATION_TRIGGERED
- BROADCAST_LIVE_ACTIVITY
description: 'The delivery type of the campaign being updated.
**Note:** `BROADCAST_LIVE_ACTIVITY` is included in this enum for campaigns created via the V1 API or legacy paths. Draft creation via `POST /v5/campaigns` does not support `BROADCAST_LIVE_ACTIVITY`. A draft cannot be transitioned to a Live Activity campaign through V5.
'
updated_by:
type: string
format: email
description: 'The email address of the user making this update, used for audit trail purposes.
If omitted, the update is attributed to the authenticated API credential.
'
example: marketer@example.com
basic_details:
$ref: '#/components/schemas/PushBasicDetailsV5'
trigger_condition:
$ref: '#/components/schemas/PushTriggerCondition'
campaign_content:
$ref: '#/components/schemas/PushCampaignContent'
segmentation_details:
$ref: '#/components/schemas/SegmentationDetails'
scheduling_details:
$ref: '#/components/schemas/SchedulingDetails'
delivery_controls:
$ref: '#/components/schemas/PushDeliveryControls'
advanced:
$ref: '#/components/schemas/AdvancedDetails'
conversion_goal_details:
$ref: '#/components/schemas/ConversionGoalDetails'
control_group_details:
$ref: '#/components/schemas/ControlGroupDetails'
utm_params:
$ref: '#/components/schemas/UTMParams'
campaign_audience_limit:
allOf:
- $ref: '#/components/schemas/CampaignAudienceLimit'
description: 'Configuration for capping how many users this campaign can reach. **Flag-gated feature** — must be enabled for your workspace by your MoEngage account team before use.
'
ControlGroupDetails:
type: object
description: 'Configuration for control groups.
For runnable campaign-control-group and global-control-group examples, refer to [Control groups](/api/campaigns/audience-scheduling-delivery-reference#control-groups).
'
properties:
is_campaign_control_group_enabled:
type: boolean
description: Whether the campaign control group is enabled.
campaign_control_group_percentage:
type: integer
minimum: 0
maximum: 100
description: 'The percentage of users added to the exclusion list.
**Required** if is_campaign_control_group_enabled is true.
'
is_global_control_group_enabled:
type: boolean
description: 'Whether the global control group is enabled.
'
PushBasicDetailsV5:
type: object
description: 'Identifying metadata for the Push campaign, including name, team, tags, and platform targeting.
For field-by-field rules, conditional requirements, and platform-specific delivery flags (Android `push_amp_plus_enabled`, iOS provisional-push audience flags), refer to [Push campaign metadata](/api/campaigns/campaign-content-reference#push-campaign-metadata).
'
properties:
name:
type: string
description: The name of the campaign.
example: Summer Sale Push Notification
business_event:
type: string
description: 'The business event to be mapped to the campaign.
**Required** for BUSINESS_EVENT_TRIGGERED campaigns.
'
example: user_signup
tags:
type: array
items:
type: string
description: Tags that provide context about the campaign's nature or theme.
example:
- activation
- summer_sale
team:
type: string
description: 'The name of the team collaborating on this campaign.
For more information, refer to [Teams in MoEngage](https://help.moengage.com/hc/en-us/articles/360028586211-Teams-in-MoEngage).
'
example: marketing_team
platforms:
type: array
items:
type: string
enum:
- ANDROID
- IOS
- WEB
description: The platforms to target for this Push campaign.
example:
- ANDROID
- IOS
broadcast_live_activity_id:
type: string
description: 'The broadcast live activity ID for iOS Live Activities.
**Required** when platform is iOS and delivery_type is BROADCAST_LIVE_ACTIVITY.
**Not applicable in the draft-based creation flow.** `BROADCAST_LIVE_ACTIVITY` is not supported via POST `/v5/campaigns`.
'
example: live_check123
geofences:
$ref: '#/components/schemas/Geofences'
send_to_triggered_platform_only:
type: boolean
description: Whether to send the campaign only to the platform that triggered the event. Applicable for event-triggered campaigns.
platform_specific_details:
$ref: '#/components/schemas/PlatformSpecificDetails'
BTSDetails:
type: object
description: 'Best Time to Send (BTS) configuration.
BTS selects an optimal send time per user based on historical engagement patterns.
For the field schema and required-when-`SEND_IN_BTS` rule, refer to [Best Time to Send](/api/campaigns/audience-scheduling-delivery-reference#best-time-to-send).
'
properties:
send_in_bts:
type: boolean
description: Whether to send the campaign at the best time.
if_user_bts_is_not_available:
type: string
description: When to send the campaign if the user's best time is not available.
if_user_bts_outside_time_window:
type: string
description: When to send the campaign if the user's best time is outside the time window.
window_end_time:
type: string
description: The window end time.
example: 6:43 am
UserAttributeFilter:
type: object
title: User attributes-based filters
description: Filter based on user attributes.
properties:
filter_type:
type: string
enum:
- user_attributes
data_type:
type: string
enum:
- string
- double
- datetime
- bool
description: The data type of the attribute being filtered.
category:
type: string
description: The category of the attribute (e.g., "Tracked Standard Attribute").
name:
type: string
description: The name of the attribute to filter on (e.g., "uid").
operator:
type: string
description: 'The operator to use in the filter. Allowed values depend on data_type:
- bool: is, exists
- double: in, between, lessThan, greaterThan, exists
- string: in, contains, containsInTheFollowing, startWithInTheFollowing, endsWithInTheFollowing, exists, is
- datetime: inTheLast, on, between, before, after, inTheNext, exists, today
'
value:
description: The value to filter on (not required for 'exists' operator).
case_sensitive:
type: boolean
description: Whether the filter comparison should be case-sensitive.
negate:
type: boolean
description: Whether to negate the filter condition.
is_dynamic_value:
type: boolean
description: 'When `true`, the filter value is treated as a dynamic expression and resolved at send time rather than evaluated as a literal string.
Set this to `true` for Business Event-triggered campaigns where the filter value references a Business Event attribute, for example, `{{BusinessEventAttribute[''season'']}}`.
'
project_name:
type: string
description: 'The name of the project associated with the user attributes.
**Required** if the Portfolio feature is enabled in your workspace.
'
CampaignStatusV5Request:
type: object
description: Changes the status of a single published campaign. One campaign ID per request.
required:
- action
properties:
request_id:
type: string
description: 'A client-supplied identifier for this status change request, echoed back as `response_id` so you can correlate the request and response. This is not a deduplication key — to make a request idempotent, use the `Idempotency-Key` header. Replaying the same `Idempotency-Key` returns the original response.
'
action:
type: string
enum:
- STOP
- PAUSE
- RESUME
description: "Lifecycle action for an already published or scheduled campaign.\n\nEach action applies only to specific delivery types and requires the campaign to be in a valid source state:\n\n| Action | Supported delivery types | Valid source states |\n| :--- | :--- | :--- |\n| `STOP` | `ONE_TIME` | `ACTIVE`, `SCHEDULED`, `PAUSED`, `SENDING` |\n| `PAUSE` | `PERIODIC`, `EVENT_TRIGGERED` | `ACTIVE`, `SCHEDULED`, `SENDING` |\n| `RESUME` | `PERIODIC`, `EVENT_TRIGGERED` | `PAUSED` |\n\n\n `STOP` cannot be used on Periodic campaigns. `PAUSE` and `RESUME` cannot be used on One-time campaigns.\n \n"
UTMParams:
type: object
description: 'UTM parameters for tracking campaign performance. The five standard keys (`utm_source`, `utm_medium`, `utm_campaign`, `utm_term`, `utm_content`) are explicitly defined.
**Custom UTM parameters:** Up to 5 additional custom parameters can be passed as separate keys directly inside the `utm_params` object. Custom keys accept arbitrary names — the `utm_` prefix is a convention, not a requirement (for example, `utm_cust` or `campaign_source` are both accepted).
For runnable examples, refer to [UTM parameters](/api/campaigns/audience-scheduling-delivery-reference#utm-parameters).
'
properties:
utm_source:
type: string
description: 'The source of the traffic (for example, YouTube, Instagram, Google).
**Required** when using UTM parameters.
'
example: '{{utm_source}}'
utm_medium:
type: string
description: 'The channel type (for example, Push, SMS, Email).
**Required** when using UTM parameters.
'
example: '{{utm_medium}}'
utm_campaign:
type: string
description: The name of the campaign (for example, Newyear, Bigbillionday).
example: '{{utm_campaign}}'
utm_term:
type: string
description: Search terms for paid traffic (for example, Mobile+sale).
utm_content:
type: string
description: The content element that differentiates links (for example, banner, video).
utm_custom:
type: string
description: 'A single custom UTM parameter value. For multiple custom parameters, pass them as
separate top-level keys inside the `utm_params` object using arbitrary `utm_`-prefixed
names (for example, `utm_cust`, `utm_c1ust`, `utm_c2ust`). A maximum of 5 custom
parameters is supported in total.
'
additionalProperties:
type: string
description: 'Arbitrary custom UTM parameters with `utm_`-prefixed key names (for example, `utm_cust`,
`utm_c1ust`). Up to 5 custom parameters are supported in total across all custom keys.
'
AndroidPushContent:
type: object
description: Android push notification content.
properties:
template_type:
type: string
enum:
- BASIC
- STYLIZED_BASIC
- SIMPLE_IMAGE_CAROUSEL
- IMAGE_BANNER_WITH_TEXT
- TIMER
- TIMER_WITH_PROGRESS_BAR
- Custom
description: 'The type of Android push template.
**Note:** If you are passing a template ID, set template_type to "Custom" and use `custom_template_id`.
'
custom_template_id:
type: string
description: 'The ID of the custom template.
**Required** when template_type is "Custom".
'
custom_template_version:
type: integer
description: The version of the custom template.
basic_details:
$ref: '#/components/schemas/AndroidBasicDetails'
timer:
$ref: '#/components/schemas/AndroidTimer'
buttons:
type: array
items:
$ref: '#/components/schemas/AndroidButton'
description: Action buttons for the notification.
advanced:
$ref: '#/components/schemas/AndroidAdvanced'
template_backup:
$ref: '#/components/schemas/AndroidTemplateBackup'
IOSButton:
type: object
description: Action button configuration for iOS push notifications.
properties:
button_category:
type: string
description: 'The pre-defined category name for a set of interactive buttons configured in the app.
'
example: MOE_PUSH_TEMPLATE
PushTriggerCondition:
type: object
description: 'Trigger condition details for Push event-triggered, device-triggered, and related campaigns.
**Required** for `EVENT_TRIGGERED`, `DEVICE_TRIGGERED`, and `LOCATION_TRIGGERED` Push campaigns.
For per-delay-type runnable payloads (`ASAP`, `DELAY` with `AFTER`/`BEFORE`, `INTELLIGENT_DELAY`), filter primitives, and primary/secondary filter combinations, refer to [Trigger conditions](/api/campaigns/audience-scheduling-delivery-reference#trigger-conditions).
'
properties:
included_filters:
$ref: '#/components/schemas/FilterGroup'
secondary_included_filters:
allOf:
- $ref: '#/components/schemas/FilterGroup'
description: Additional filters that must also be satisfied for the trigger to fire. For runnable examples, refer to [Primary and secondary trigger filters](/api/campaigns/audience-scheduling-delivery-reference#primary-and-secondary-trigger-filters).
trigger_delay_type:
type: string
enum:
- DELAY
- ASAP
- INTELLIGENT_DELAY
description: 'The type of triggered delay.
When set to DELAY, the following fields are mandatory:
- trigger_delay_value
- trigger_delay_granularity
- trigger_relation
'
trigger_delay_value:
type: integer
minimum: 0
description: The numeric value of the triggered delay.
trigger_delay_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: The time unit for the trigger delay.
trigger_relation:
type: string
enum:
- BEFORE
- AFTER
description: 'The trigger relation with delay.
**Required** when trigger_delay_type is DELAY.
'
trigger_attr:
type: string
description: The attribute value of the trigger. Pass the string `"If Action"` for event-triggered campaigns.
intelligent_delay_optimization:
type: object
description: 'Configuration for intelligent delay optimization.
Used when trigger_delay_type is INTELLIGENT_DELAY. Defines a time window (min/max delay) within which the system finds the optimal moment to send the message.
'
properties:
min_delay_value:
type: integer
description: The numeric component of the lower bound for the intelligent delay window.
min_delay_granularity:
type: string
enum:
- MINUTES
- HOURS
description: The time unit that qualifies the min_delay_value.
max_delay_value:
type: integer
description: The numeric component of the upper bound for the intelligent delay window.
max_delay_granularity:
type: string
enum:
- HOURS
- DAYS
description: The time unit that qualifies the max_delay_value.
IOSAdvanced:
type: object
description: Platform-level advanced settings for push delivery - TTL, priority, badge count, and similar controls.
properties:
coupon_code:
type: string
description: The coupon code to be included in the push payload.
sound_file:
type: string
description: The name of a custom sound file located in the app bundle to play upon receiving the notification.
enable_ios_badge:
type: boolean
description: Whether this campaign allows the notification to increment the app's badge count.
group_key:
type: string
description: 'The group key used to identify and categorize related push notifications.
**Note:**
- Use the same group key for all push notifications you want to group
- MoEngage automatically modifies the group key to ensure it doesn''t exceed 45 characters
- Non-Latin scripts, special characters, and spaces are removed
'
collapse_replace_key:
type: string
description: 'The update key used to identify and update related push notifications.
Ensure you use the same update key for all push notifications intended to update each other.
'
CampaignStatusTransitionData:
type: object
required:
- id
- action
description: Returned after a successful status transition on a published campaign.
properties:
id:
type: string
description: Raw 24-character campaign ObjectId.
example: 64a1b2c3d4e5f6a7b8c9d0e1
action:
type: string
description: The action that was applied (matches the requested action).
enum:
- STOP
- PAUSE
- RESUME
IOSPushContent:
type: object
description: iOS push notification content.
properties:
template_type:
type: string
enum:
- BASIC
- STYLIZED_BASIC
- SIMPLE_IMAGE_CAROUSEL
- Custom
description: 'The type of iOS push template.
'
custom_template_id:
type: string
description: 'The ID of the custom template.
**Required** when template_type is "Custom".
'
custom_template_version:
type: integer
description: The version of the custom template.
basic_details:
$ref: '#/components/schemas/IOSBasicDetails'
buttons:
type: array
items:
$ref: '#/components/schemas/IOSButton'
description: Action buttons for the notification.
advanced:
$ref: '#/components/schemas/IOSAdvanced'
template_backup:
$ref: '#/components/schemas/IOSTemplateBackup'
WebBasicDetails:
type: object
description: Basic details for the Web push notification.
properties:
title:
type: string
description: The title text displayed at the top of the notification.
example: Special Offer
message:
type: string
description: The main body text of the notification.
example: Check out our latest deals!
redirect_url:
type: string
format: uri
description: The URL that the user is redirected to when they click the main body of the notification.
example: https://example.com/offers
image_url:
type: string
format: uri
description: The URL of a large image to be displayed within the notification content.
auto_dismiss_notification:
type: boolean
description: Whether the notification should auto-dismiss.
CustomSegmentFilter:
type: object
title: Custom segments
description: Filter using a custom segment.
properties:
filter_type:
type: string
enum:
- custom_segments
name:
type: string
description: The name of the custom segment.
id:
type: string
description: The ID of the custom segment.
AndroidButton:
type: object
description: Action button configuration for Android push notifications.
properties:
btn_name:
type: string
description: The text to be displayed on the button.
example: Shop Now
click_action_type:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
- CALL
- SHARE
- COPY
- SET_USER_ATTRIBUTE
- TRACK_EVENT
- CUSTOM_ACTION
- SNOOZE
- REMIND_LATER
description: The type of action to perform when the button is clicked.
click_action_name:
type: string
description: The name of the click action.
click_action_value:
type: string
description: The URL or deep link to open for the button's action.
example: https://example.com/product
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair'
description: Custom key-value pairs specific to this button's click event.
CampaignPatchV5Request:
description: Used for component-level edits on a campaign draft.
oneOf:
- $ref: '#/components/schemas/PushComponentPatchRequest'
- $ref: '#/components/schemas/EmailComponentPatchRequest'
IOSTemplateBackup:
type: object
description: 'Fallback notification content for when the template cannot be rendered.
**Required for:** Stylized Basic and Simple Image Carousel templates
'
properties:
title:
type: string
description: The title for the fallback notification.
message:
type: string
description: The message body for the fallback notification.
subtitle:
type: string
description: The subtitle for the fallback notification.
allow_bg_refresh:
type: boolean
description: Whether to enable background app refresh for the fallback notification.
rich_media_type:
type: string
enum:
- Image
- Video
- GIF
description: The type of media attachment for the fallback.
rich_media_value:
type: string
format: uri
description: The URL of the media attachment for the fallback.
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The default click action for the fallback notification.
default_click_action_value:
type: string
description: The URL or deep link for the fallback's click action.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair'
description: Custom key-value pairs specific to the fallback payload.
Connector:
type: object
description: 'Email connector configuration for sending email campaigns. Required for inline Email test requests and before an Email campaign can be published or sent for testing. Not required at draft create time — it can be added later via `PATCH`. For runnable examples, refer to [Email delivery connector](/api/campaigns/campaign-content-reference#email-delivery-connector).
'
required:
- connector_type
- connector_name
properties:
connector_type:
type: string
enum:
- SENDGRID
- AMAZON_SES
- SPARKPOST
- MANDRILL
- CUSTOM_SMTP
- CUSTOM_API
- NETCORE
description: 'The email service provider for this campaign. Must match a connector configured in your MoEngage workspace. Accepted values: `SENDGRID`, `AMAZON_SES`, `SPARKPOST`, `MANDRILL`, `CUSTOM_SMTP`, `CUSTOM_API`, `NETCORE`. To find which connectors are active, go to **Settings** > **Email** > **Connectors** in the MoEngage dashboard.
'
connector_name:
type: string
description: The name of the connector configuration as configured in your MoEngage workspace.
V5ErrorEnvelope:
type: object
properties:
response_id:
type: string
error:
type: object
properties:
code:
type: string
enum:
- VALIDATION_FAILED
- UNPROCESSABLE_ENTITY
- BAD_REQUEST
- RATE_LIMITED
- UNAUTHORIZED
- INTERNAL_ERROR
- FORBIDDEN
message:
type: string
target:
type: string
details:
type: array
items:
type: object
properties:
target:
type: string
message:
type: string
request_id:
type: string
description: 'The `request_id` from the originating request. Use this to correlate a failed response back to the specific call that triggered it, particularly useful in high-volume or retry scenarios.
In V1, `request_id` appeared inside the `error` object. V5 preserves this field in the same location.
'
WebAdvanced:
type: object
description: 'Platform-level advanced settings for push delivery - TTL, priority, badge count, and similar controls.
'
properties:
icon_image_type:
type: string
enum:
- DEFAULT
- ICON_URL
description: The type of icon to use for the notification.
icon_url:
type: string
format: uri
description: The URL for a custom notification icon.
WebPushContent:
type: object
description: Web push notification content.
properties:
template_type:
type: string
enum:
- BASIC
description: The template type for web push (currently only BASIC is supported).
basic_details:
$ref: '#/components/schemas/WebBasicDetails'
buttons:
type: array
items:
$ref: '#/components/schemas/WebButton'
description: 'Action buttons for the notification.
'
advanced:
$ref: '#/components/schemas/WebAdvanced'
CarouselContent:
type: object
description: 'Configuration for image carousel in Simple Image Carousel template.
**Required for:** Simple Image Carousel template
'
properties:
slider_transition:
type: string
enum:
- MANUAL
- AUTOMATIC
description: 'The transition type for the carousel slides.
In earlier versions of this API, the accepted values were `manual` and `automatic` (lowercase). They are now `MANUAL` and `AUTOMATIC` (uppercase). Update any existing integrations that pass lowercase values.
'
slide_data:
type: array
description: Array of slide configurations.
items:
type: object
properties:
image_url:
type: string
format: uri
description: The image URL for this slide.
image_click_action:
type: string
enum:
- DEEPLINKING
- RICH_LANDING
- NAVIGATE_TO_A_SCREEN
description: The click action for this slide's image.
image_click_action_value:
type: string
description: 'The click action value for this slide''s image.
**Required** when image_click_action is provided.
'
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair'
IOSBasicDetails:
type: object
description: Basic details for the iOS push notification.
properties:
background_color_code:
type: string
description: 'The hexadecimal color code for the notification''s background.
**Supported Templates:** Simple Image Carousel, Stylized Basic
'
example: '#a0a0a0'
apply_background_color_in_text_editor:
type: boolean
description: 'Whether to apply the background color within the text editor view.
**Supported Templates:** Simple Image Carousel, Stylized Basic
'
title:
type: string
description: The main title of the push notification.
example: New Message
message:
type: string
description: The main body text of the notification.
example: You have a new message waiting for you
subtitle:
type: string
description: The subtitle displayed below the main title.
allow_bg_refresh:
type: boolean
description: Whether to allow the app to be woken up in the background to refresh content.
rich_media_type:
type: string
enum:
- Image
- Video
- GIF
description: 'The type of rich media to be included in the notification.
**Supported Templates:** Basic
'
rich_media_value:
type: string
format: uri
description: 'The URL of the rich media asset specified in the rich_media_type field.
**Supported Templates:** Basic
'
image_url:
type: string
format: uri
description: 'The URL of a large image to be displayed within the notification content.
**Note:** Required when template_type is SIMPLE_IMAGE_CAROUSEL.
'
input_gif_url:
type: string
format: uri
description: 'The URL for the GIF media used in the push campaign content.
**Supported Templates:** Basic, Stylized Basic
'
carousel_content:
$ref: '#/components/schemas/IOSCarouselContent'
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The action performed when the main body of the notification is tapped.
default_click_action_value:
type: string
description: The URL or deep link associated with the default click action.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair'
description: Custom key-value pairs sent with the push payload for in-app handling.
CampaignAudienceLimit:
type: object
description: "Configuration for capping the number of users a campaign can reach (max-send).\n\nCampaign Audience Limit (also called max-send) caps how many users a single campaign can reach. Use it to control reach on high-volume campaigns and protect users from over-messaging. The cap can apply across the campaign's full lifetime (`frequency: TOTAL`) or per send instance (`frequency: INSTANCE`).\n\nFor runnable `TOTAL` (lifetime cap), `INSTANCE` (per-send cap, Periodic Push only), and disabled-cap examples, refer to [Campaign audience cap](/api/campaigns/audience-scheduling-delivery-reference#campaign-audience-cap).\n\n**Supported channels:** Email, Push.\n\n**Supported delivery types:**\n- All delivery types support `frequency: TOTAL` (lifetime cap).\n- `frequency: INSTANCE` (per-send cap) is supported only for **Periodic Push** campaigns.\n- `campaign_audience_limit` is not supported for `BROADCAST_LIVE_ACTIVITY`.\n\n**Flag-gated feature:** This feature is not enabled by default for any workspace and requires\nexplicit activation by your MoEngage account team. If you include `campaign_audience_limit` in\na request on a workspace where the flag has not been enabled, the API returns a `400` with the\nfollowing error body:\n\n```json\n{\n \"error\": {\n \"code\": \"VALIDATION_FAILED\",\n \"message\": \"Campaign Audience Limit feature is not enabled for this db\",\n \"target\": \"campaign_audience_limit\",\n \"details\": [\n {\n \"target\": \"campaign_audience_limit\",\n \"message\": \"Campaign Audience Limit feature is not enabled for this db\"\n }\n ]\n },\n \"response_id\": \"{{response_id}}\"\n}\n```\n\nWhen `is_campaign_audience_limit_enabled` is `true`, the fields `metric`, `frequency`, and\n`limit` are all required. When set to `false`, those three fields must not be provided.\n\nFor `ONE_TIME` campaigns, only `limit` and `is_campaign_audience_limit_enabled` are supported. Do not pass `metric` or `frequency`, they are only valid for `PERIODIC` and `EVENT_TRIGGERED` campaigns. \nPassing them for a ONE_TIME campaign causes the validate API to fail. \n"
properties:
is_campaign_audience_limit_enabled:
type: boolean
description: 'Whether the campaign audience limit is active. Set to `true` to enforce the cap; `false` to disable.
When `true`, `metric`, `frequency`, and `limit` are all required.
When `false`, `metric`, `frequency`, and `limit` must not be provided.
'
metric:
type: string
description: 'The type of send event counted toward the limit. Must be uppercase.
**Required** when `is_campaign_audience_limit_enabled` is `true`.
'
enum:
- SENT
example: SENT
frequency:
type: string
description: 'The window over which the limit is applied. Must be uppercase.
- `TOTAL` - applies the cap across the full lifetime of the campaign. Supported for all delivery types on both Email and Push.
- `INSTANCE` - applies the cap per campaign instance (for example, per periodic send). **Valid only for Push `PERIODIC` campaigns.** For all other delivery types, use `TOTAL`.
**Required** when `is_campaign_audience_limit_enabled` is `true`.
'
enum:
- TOTAL
- INSTANCE
example: TOTAL
limit:
type: integer
minimum: 1
maximum: 9999999999
description: 'The maximum number of users who can receive this campaign (or per instance, when
`frequency` is `INSTANCE`). Must be between 1 and 9,999,999,999.
**Required** when `is_campaign_audience_limit_enabled` is `true`.
'
example: 100000
EmailBasicDetailsV5:
type: object
description: 'Identifying metadata for the Email campaign, including name, team, tags, and subscription category.
**Conditional requirements:** `name`, `content_type`, `user_attribute_identifier`, and `subscription_category` are strictly required only when using the `/v5/campaigns/test` endpoint in **inline mode**. They are not required at campaign creation time (V5 supports progressive creation, where components are added later via PATCH) and are not needed in **draft mode** tests, where content comes from the saved draft.
'
properties:
name:
type: string
description: Any string name for the test or campaign.
example: Summer Sale Email
business_event:
type: string
description: The business event to be mapped to the campaign.
example: user_signup
content_type:
type: string
enum:
- PROMOTIONAL
- TRANSACTIONAL
description: The type of content in the campaign. "PROMOTIONAL" or "TRANSACTIONAL".
subscription_category:
type: string
description: 'The subscription category for promotional email campaigns. **Must match a valid category configured in your workspace.**
**Required** for PROMOTIONAL email campaigns and inline tests.
'
example: marketing
tags:
type: array
items:
type: string
description: Tags that provide context about the campaign's nature or theme.
example:
- activation
- summer_sale
team:
type: string
description: The name of the team collaborating on this campaign.
example: marketing_team
user_attribute_identifier:
type: string
default: Email (Standard)
description: 'The user attribute that stores the recipient email address. Use "Email (Standard)" for email channels.
'
example: Email (Standard)
Goal:
type: object
description: A single conversion goal configuration.
properties:
goal_name:
type: string
description: The name of the goal.
example: Goal 1
goal_event_name:
type: string
description: The event name associated with this goal.
goal_event_attribute:
$ref: '#/components/schemas/GoalEventAttribute'
is_primary_goal:
type: boolean
description: Whether this is the primary goal.
revenue_attribute:
type: string
description: The revenue attribute to track.
revenue_currency:
type: string
description: The currency for revenue tracking.
ActionFilter:
type: object
title: Action-based filters (with or without attributes)
description: 'Filter based on user actions/events. Use inside `segmentation_details.included_filters.filters` or `trigger_condition.included_filters.filters`.
'
properties:
filter_type:
type: string
enum:
- actions
action_name:
type: string
description: The name of the action/event to filter on.
execution:
type: object
properties:
type:
type: string
enum:
- atleast
- atmost
- exactly
count:
type: integer
executed:
type: boolean
description: Whether the action was executed.
attributes:
$ref: '#/components/schemas/FilterGroup'
condition:
type: string
description: The condition type. Must be passed as the string "IF".
VariationDetails:
type: object
description: 'Configuration for A/B testing variations.
For runnable `MANUAL` (fixed split) and `SHERPA` (auto-optimized) examples, refer to [A/B test variations](/api/campaigns/campaign-content-reference#a-b-test-variations).
'
properties:
distribution_type:
type: string
enum:
- SHERPA
- MANUAL
description: 'The traffic distribution method for A/B test variations.
- `MANUAL` - you specify a fixed percentage split across variations.
- `SHERPA` - MoEngage''s AI-powered optimizer automatically shifts traffic toward the best-performing variation during the campaign run.
'
no_of_variations:
type: integer
minimum: 1
description: The number of A/B test variations.
example: 2
manual_distribution_percentage:
type: object
additionalProperties:
type: integer
description: "Fixed percentage of audience assigned to each variation. \n**Note:** Variation keys must follow the `variation_N` naming format (e.g. `variation_1`, `variation_2`). Keys with any other format like `var_1`, `1`, `2` will be rejected with a validation error.\n\n**Required** when `distribution_type` is `MANUAL`.\n"
example:
variation_1: 50
variation_2: 50
sherpa_campaign_duration:
type: integer
description: 'Duration in hours over which MoEngage Sherpa collects performance data before declaring a winning variation.
**Required** when `distribution_type` is `SHERPA`.
'
sherpa_distribution_metric:
type: string
enum:
- OPEN_RATE
- CLICK_RATE
- BOTH
description: 'The engagement metric Sherpa uses to evaluate and rank variations.
**Required** when `distribution_type` is `SHERPA`.
'
PushCampaignContent:
type: object
description: 'Push message content, locales, and A/B variations.
For full `POST /v5/campaigns` request examples that include `campaign_content`, refer to `campaign_delivery_type` on `PushCampaignCreateV5Request`, `VariationDetails`, and the Create Campaign Draft code samples.
For per-template-type runnable payloads, refer to [Android push content](/api/campaigns/campaign-content-reference#android-push-content), [iOS push content](/api/campaigns/campaign-content-reference#ios-push-content), or [Web push content](/api/campaigns/campaign-content-reference#web-push-content).
'
properties:
locales:
type: array
items:
type: string
description: 'Additional locale names for multi-language campaigns. List only the non-default locales here (for example, `"en-US"`, `"es-ES"`). The `"default"` locale is always implicitly present and must not be included in this array.
'
example:
- en-US
- es-ES
variation_details:
$ref: '#/components/schemas/VariationDetails'
content:
type: object
description: 'The campaign message payload. Two shapes are accepted:
- **Flat shape (no locales or variations):** Pass a flat `push` object directly under `content`.
- **Locale-keyed and variation-keyed shape:** Key by locale name, then by variation name: `content[locale_name][variation_name] = { push: { ... } }`. The `"default"` locale key is always required and serves as the fallback. Additional locale keys must match values listed in `locales`.
If your V1 integration used locale-variation wrapping, you must continue using that structure in V5. The flat format is only valid when no locales or A/B variations are configured on the campaign.
For runnable payloads for both shapes, refer to [Content payload structure](/api/campaigns/campaign-content-reference#content-payload-structure).
'
properties:
push:
$ref: '#/components/schemas/PushContent'
additionalProperties:
type: object
description: Variation-keyed content blocks for a single locale.
additionalProperties:
type: object
properties:
push:
$ref: '#/components/schemas/PushContent'
PlatformSpecificDetails:
type: object
description: 'Platform-specific configuration details for Push.
For runnable Android and iOS examples and the mutual-exclusion rule on iOS audience flags, refer to [Platform-specific delivery flags](/api/campaigns/campaign-content-reference#platform-specific-delivery-flags).
'
properties:
android:
type: object
properties:
push_amp_plus_enabled:
type: boolean
default: false
description: Whether Push Amp+ feature is enabled for this campaign.
ios:
type: object
description: '**Note:** You must pass one of these keys as true for iOS.
'
properties:
send_to_all_eligible_device:
type: boolean
description: Whether to send the campaign to all eligible devices.
exclude_provisional_push_devices:
type: boolean
description: Whether to exclude provisional push devices.
send_to_only_provisional_push_enabled_devices:
type: boolean
description: Whether to send only to provisional push-enabled devices.
AndroidBasicDetails:
type: object
description: "Basic details for the Android push notification. \n\nFields vary by template_type. All templates support common fields like title, message, default_click_action.\n"
properties:
notification_channel:
type: string
description: The Android notification channel where the push will be sent.
example: general
include_app_name_and_time:
type: boolean
description: 'Whether to include the application''s name and timestamp within the banner image.
**Supported Templates:** Image Banner with Text
'
background_color_code:
type: string
description: 'The hex code for the notification''s background color.
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
example: '#9a4444'
app_name_color_code:
type: string
description: 'The hex code for the color of the application''s name text.
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
example: '#dea1a1'
notification_control_color:
type: string
enum:
- LIGHT
- DARK
description: 'The color scheme for the notification''s control elements (action buttons).
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
include_title_and_message:
type: boolean
description: 'Whether to include the notification''s title and message text within the banner image.
**Supported Templates:** Image Banner with Text
'
apply_background_color_in_text_editor:
type: boolean
description: 'Whether to apply the specified background color within the rich text editor for preview.
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
title:
type: string
description: The main title of the push notification.
example: Limited Time Offer!
message:
type: string
description: 'The message body of the push notification.
You can use HTML in the message parameter to apply rich text formatting, including text color and styles.
'
example: Get 50% off on all items. Shop now!
summary:
type: string
description: The summary text for the notification.
image_url:
type: string
format: uri
description: The image URL for the push notification.
example: https://example.com/images/promo.jpg
image_scaling:
type: string
enum:
- FIT_INSIDE_IMAGE_CONTAINER
- FILL_IMAGE_CONTAINER
description: 'The scaling behavior for images within the carousel template.
**Supported Templates:** Simple Image Carousel, Image Banner with Text
'
banner_image_url:
type: string
format: uri
description: 'The URL for the background image used in the Image Banner Text template.
**Required for:** Image Banner with Text template
'
input_gif_url:
type: string
format: uri
description: 'The URL for the GIF media used in the push campaign content.
**Supported Templates:** Basic
'
collapsed_push_notification:
type: string
description: 'The configuration for the notification''s collapsed state (view before user expands it).
**Supported Templates:** Image Banner with Text
'
example: SAME_AS_TEMPLATE_BACKUP
carousel_content:
$ref: '#/components/schemas/CarouselContent'
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The action performed when the main body of the notification is clicked.
default_click_action_value:
type: string
description: The URL or deep link to open when the notification is clicked.
example: https://example.com/sale
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair'
description: Custom key-value pairs for the notification payload.
CampaignPatchAcceptedData:
type: object
required:
- id
description: Returned after a successful component PATCH.
properties:
id:
type: string
description: Raw 24-character campaign ObjectId.
example: 64a1b2c3d4e5f6a7b8c9d0e1
SchedulingDetails:
type: object
description: 'Defines when the campaign should be sent.
For per-delivery-type runnable payloads (`ASAP`, `AT_FIXED_TIME`, `SEND_IN_BTS`, `SEND_IN_USER_TIMEZONE`, and `PERIODIC` with `periodic_details`), refer to [Campaign delivery schedule](/api/campaigns/audience-scheduling-delivery-reference#campaign-delivery-schedule).
'
properties:
delivery_type:
type: string
enum:
- ASAP
- AT_FIXED_TIME
- SEND_IN_BTS
- SEND_IN_USER_TIMEZONE
description: 'When to deliver the campaign.
'
start_time:
type: string
format: date-time
description: 'The start time for the campaign in ISO 8601 format. Interpreted in the timezone specified by the `timezone` field. If `timezone` is not provided, pass this value in UTC.
Example: "2024-06-21T12:59:00"
'
expiry_time:
type: string
format: date-time
description: 'The expiry time for the campaign in ISO 8601 format. Interpreted in the timezone specified by the `timezone` field. If `timezone` is not provided, pass this value in UTC.
'
timezone:
type: string
description: 'IANA timezone string for the campaign schedule (for example, `Asia/Kolkata`). Required when `delivery_type` is `AT_FIXED_TIME` or `SEND_IN_BTS`. Optional for `SEND_IN_USER_TIMEZONE`, where each user''s own timezone is used.
'
example: Asia/Kolkata
periodic_details:
$ref: '#/components/schemas/PeriodicDetails'
bts_details:
$ref: '#/components/schemas/BTSDetails'
user_timezone_details:
$ref: '#/components/schemas/UserTimezoneDetails'
geo_fence_timelimit:
type: object
description: 'Defines the delivery time window for location-triggered campaigns. When configured, notifications are delivered only within the specified schedule.
**Applicable for:** `LOCATION_TRIGGERED` campaigns.
'
properties:
notification_schedule:
type: string
enum:
- ALWAYS
- LIMITED_TIME
description: Controls when delivery is permitted. Set to `ALWAYS` to allow delivery at any time, or `LIMITED_TIME` to restrict delivery to the configured time bounds.
timebounds:
type: array
description: 'One or more start and end time windows within which delivery is permitted.
**Required** when `notification_schedule` is `LIMITED_TIME`.
'
items:
type: object
properties:
start_time:
type: string
format: date-time
description: Start of the delivery window in ISO 8601 format.
example: '2027-06-19T11:02:00'
end_time:
type: string
format: date-time
description: End of the delivery window in ISO 8601 format.
example: '2029-06-20T13:55:00'
EmailDeliveryControls:
type: object
description: 'Controls for Email campaign delivery behavior.
For runnable examples, refer to [Email delivery controls](/api/campaigns/audience-scheduling-delivery-reference#email-delivery-controls).
'
properties:
bypass_dnd:
type: boolean
description: Whether to bypass Do Not Disturb settings.
campaign_throttle_rpm:
type: integer
description: The campaign throttle in requests per minute.
example: 2000
count_for_frequency_capping:
type: boolean
description: Whether to count this campaign for frequency capping.
ignore_frequency_capping:
type: boolean
description: Whether to ignore frequency capping for this campaign.
minimum_delay_between_two_notification_in_hour:
type: integer
description: Minimum delay between two notifications in hours.
EmailContent:
type: object
description: Email campaign content.
properties:
subject:
type: string
description: The subject line of the email.
example: Exclusive Summer Sale - 50% Off!
preview_text:
type: string
description: The preview text shown in email clients.
example: Don't miss out on our biggest sale of the season
sender_name:
type: string
description: The name of the sender that appears in the email.
example: MoEngage Team
from_address:
type: string
format: email
description: The sender's email address.
example: noreply@example.com
reply_to_address:
type: string
format: email
description: The reply-to email address.
example: support@example.com
cc_ids:
type: array
items:
type: string
format: email
description: Email addresses to CC. For runnable examples, refer to [Email content variants](/api/campaigns/campaign-content-reference#email-content-variants).
bcc_ids:
type: array
items:
type: string
format: email
description: Email addresses to BCC. For runnable examples, refer to [Email content variants](/api/campaigns/campaign-content-reference#email-content-variants).
html_content:
type: string
description: 'The HTML content of the email.
**Optional** if custom_template_id is provided.
'
example: Hello {{UserAttribute['First Name']}}
email_editor:
type: string
enum:
- Froala Editor
- Ace Editor
description: 'The HTML editor used for the email campaign.
- **Required** if you want to create the campaign using the `Ace Editor`.
- **Optional** if you want to use the default `Froala Editor`.
'
example: Ace Editor
custom_template_id:
type: string
description: 'The ID of a custom email template.
**Optional** if html_content is provided.
When this field is provided, the following fields are not required:
- subject
- preview_text
- sender_name
'
custom_template_version:
type: integer
description: The version of the custom template.
attachments:
type: array
items:
type: object
properties:
file_type:
type: string
enum:
- URL
- PERSONALIZED_ATTACHMENT
url:
type: string
description: 'Attachments to include in the email.
'
PushContent:
type: object
description: Push notification content for Android, iOS, and Web platforms.
properties:
android:
$ref: '#/components/schemas/AndroidPushContent'
ios:
$ref: '#/components/schemas/IOSPushContent'
web:
$ref: '#/components/schemas/WebPushContent'
AndroidAdvanced:
type: object
description: Platform-level advanced settings for push delivery - TTL, priority, badge count, and similar controls.
properties:
coupon_code:
type: string
description: The coupon code to be included in the push payload.
example: SUMMER50
icon_type_in_notification:
type: string
description: The icon type to be included in the push payload.
example: app_icon
use_large_icon:
type: boolean
description: Whether to use a large icon in the notification.
make_notification_sticky:
type: boolean
description: 'When enabled, the user cannot swipe away the notification.
'
dismiss_button_text:
type: string
description: 'The text to display on the dismiss button.
**Required** when make_notification_sticky is true or auto_dismiss_notification is true.
'
auto_dismiss_notification:
type: boolean
description: Whether the notification can be auto-dismissed.
auto_dismiss_notification_time_value:
type: integer
description: 'The time value after which to auto-dismiss the notification.
**Required** when auto_dismiss_notification is true.
'
auto_dismiss_notification_time_granularity:
type: string
enum:
- DAYS
- HOURS
- MINUTES
description: 'The time unit for auto-dismiss.
**Required** when auto_dismiss_notification is true.
'
group_key:
type: string
description: 'The group key used to identify and categorize related push notifications.
**Note:**
- Use the same group key for all push notifications you want to group
- MoEngage automatically modifies the group key to ensure it doesn''t exceed 45 characters
- Non-Latin scripts, special characters, and spaces are removed
'
collapse_replace_key:
type: string
description: 'The update key used to identify and update related push notifications.
Ensure you use the same update key for all push notifications intended to update each other.
'
UserTimezoneDetails:
type: object
description: 'Configuration for sending in the user''s timezone.
For the field schema and required-when-`SEND_IN_USER_TIMEZONE` rule, refer to [User timezone](/api/campaigns/audience-scheduling-delivery-reference#user-timezone).
'
properties:
send_in_user_timezone:
type: boolean
description: Whether to send the campaign on a specific date and time within the user's timezone.
send_if_user_timezone_has_passed:
type: boolean
description: Whether to send the campaign if the user's timezone has passed.
IOSCarouselContent:
type: object
description: 'Configuration for image carousel in Simple Image Carousel template.
**Required for:** Simple Image Carousel template
'
properties:
slider_transition:
type: string
enum:
- MANUAL
- AUTOMATIC
description: 'The transition type for the carousel slides.
In earlier versions of this API, the accepted values were `manual` and `automatic` (lowercase). They are now `MANUAL` and `AUTOMATIC` (uppercase). Update any existing integrations that pass lowercase values.
'
slide_data:
type: array
description: Array of slide configurations.
items:
type: object
properties:
image_url:
type: string
format: uri
description: The image URL for this slide.
image_click_action:
type: string
enum:
- DEEPLINKING
- RICH_LANDING
- NAVIGATE_TO_A_SCREEN
description: The click action for this slide's image.
image_click_action_value:
type: string
description: The click action value for this slide's image.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair'
WebButton:
type: object
description: Action button configuration for Web push notifications.
properties:
title:
type: string
description: The text displayed on the button.
example: View Offer
icon_url:
type: string
format: uri
description: The URL of an icon to be displayed next to the button text.
url:
type: string
format: uri
description: The destination URL that the user is redirected to when they click this button.
FilterGroup:
type: object
description: 'A group of filters combined with a logical operator.
For detailed segmentation payload and supported fields, refer to [Create Custom Segment](https://developers.moengage.com/hc/en-us/articles/13277936457748).
'
properties:
filter_operator:
type: string
enum:
- and
- or
description: The logical operator to combine filters.
filters:
type: array
items:
oneOf:
- $ref: '#/components/schemas/UserAttributeFilter'
- $ref: '#/components/schemas/ActionFilter'
- $ref: '#/components/schemas/CustomSegmentFilter'
description: 'The list of filters to be combined using the filter operator.
Supported filter types:
- User attributes-based filters
- Action-based filters (with or without attributes)
- Custom segments
'
EmailTriggerCondition:
type: object
description: 'Trigger condition details for Email event-triggered campaigns.
**Required** for EVENT_TRIGGERED campaigns.
For per-delay-type runnable payloads (`ASAP`, `DELAY` with `AFTER`/`BEFORE`), filter primitives, and primary/secondary filter combinations, refer to [Trigger conditions](/api/campaigns/audience-scheduling-delivery-reference#trigger-conditions).
'
properties:
included_filters:
$ref: '#/components/schemas/FilterGroup'
secondary_included_filters:
allOf:
- $ref: '#/components/schemas/FilterGroup'
description: Additional filters that must also be satisfied for the Email trigger to fire. For runnable examples, refer to [Primary and secondary trigger filters](/api/campaigns/audience-scheduling-delivery-reference#primary-and-secondary-trigger-filters).
trigger_delay_type:
type: string
enum:
- DELAY
- ASAP
description: 'The type of triggered delay.
When set to DELAY, the following fields are mandatory:
- trigger_delay_value
- trigger_delay_granularity
- trigger_relation
'
trigger_delay_value:
type: integer
minimum: 0
description: The numeric value of the triggered delay.
trigger_delay_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: The time unit for the trigger delay.
trigger_relation:
type: string
enum:
- BEFORE
- AFTER
description: 'The trigger relation with delay.
**Required** when trigger_delay_type is DELAY.
'
trigger_attr:
type: string
description: The attribute value of the trigger. Pass the string `"If Action"` for event-triggered campaigns.
EmailCampaignContent_2:
type: object
description: Contains the content and variations for the Email campaign.
required:
- content
properties:
locales:
type: array
items:
type: string
description: 'List of locales for multi-language campaigns.
You can send campaigns in multiple languages using locales.
'
example:
- en-US
- es-ES
- default
variation_details:
$ref: '#/components/schemas/VariationDetails_2'
content:
type: object
description: The actual Email campaign content.
required:
- email
properties:
email:
$ref: '#/components/schemas/EmailContent_2'
KeyValuePair_2:
type: object
description: A key-value pair for custom data.
required:
- key
- value
properties:
key:
type: string
description: The key name.
value:
type: string
description: The value.
Geofences_2:
type: object
description: 'Geofence location details for location-triggered campaigns.
**Required** for LOCATION_TRIGGERED campaigns.
'
required:
- name
- latitude
- longitude
- radius
- response_time_value
- response_time_granularity
- triggered_at
properties:
name:
type: string
description: The unique name of the geofence location being targeted.
latitude:
type: string
description: The latitude coordinate for the center of the geofence area.
longitude:
type: string
description: The longitude coordinate for the center of the geofence area.
radius:
type: string
description: The radius in meters from the center point that defines the boundary of the geofence.
dwell_time_value:
type: string
description: 'The numeric value for the time to wait before sending the message after the trigger condition is met.
**Required** when triggered_at is set to "dwell".
'
dwell_time_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: 'The time unit for the dwell_time_value.
**Required** when triggered_at is set to "dwell".
'
response_time_value:
type: string
description: The numeric value for the time to wait before sending the message after the trigger condition is met.
response_time_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: The time unit for the response_time_value.
triggered_at:
type: string
enum:
- ENTRY
- EXIT
- dwell
description: The user action that triggers the campaign (when user enters/exits the geofence).
AndroidTimer_2:
type: object
description: 'Timer configuration for Timer and Timer with Progress Bar templates.
**Required for:** TIMER and TIMER_WITH_PROGRESS_BAR templates
'
required:
- timer_ends_at
- personalized_value
properties:
timer_ends_at:
type: string
enum:
- DURATION
- SPECIFIC_TIME_USER_TIMEZONE
- SPECIFIC_TIME_CAMPAIGN_TIMEZONE
description: How the timer's endpoint is determined.
specific_time:
type: string
format: date-time
description: 'The specific time when the timer ends.
**Required** when personalized_value is true.
'
time_period:
type: string
description: 'The time period for the timer.
**Required** when timer_ends_at is SPECIFIC_TIME_USER_TIMEZONE or SPECIFIC_TIME_CAMPAIGN_TIMEZONE.
'
personalized_value:
type: boolean
description: 'Whether the timer duration is personalized per user.
If false, all users get the same duration.
'
duration_hour:
type: string
description: 'The number of hours the timer will run for.
**Required** when personalized_value is false.
'
example: '2'
duration_minute:
type: string
description: 'The number of minutes the timer will run for (in addition to hours).
**Required** when personalized_value is false.
'
example: '30'
AndroidTemplateBackup_2:
type: object
description: 'Fallback notification content for when the template cannot be rendered.
**Required for:** Stylized Basic, Simple Image Carousel, Image Banner with Text, Timer, and Timer with Progress Bar templates
'
required:
- title
- message
- default_click_action
- default_click_action_value
properties:
title:
type: string
description: The title for the fallback notification.
message:
type: string
description: The message body for the fallback notification.
summary:
type: string
description: The summary for the fallback notification.
image_url:
type: string
format: uri
description: The URL of an image for the fallback notification.
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The default click action for the fallback notification.
default_click_action_value:
type: string
description: The URL or deep link for the fallback's click action.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair_2'
description: Custom key-value pairs specific to the fallback payload.
ConversionGoalDetails_2:
type: object
description: Configuration for tracking campaign conversion goals.
properties:
attribution_window_in_hours:
type: integer
description: The attribution window in hours.
example: 36
goals:
type: array
items:
$ref: '#/components/schemas/Goal'
description: List of conversion goals to track.
PeriodicDetails_2:
type: object
description: 'Configuration for periodic campaigns.
**Required** for PERIODIC campaigns.
'
properties:
sending_frequency:
type: string
enum:
- DAILY
- WEEKLY
- MONTHLY
description: The frequency to send the campaign.
repeat_frequency:
type: integer
description: The repeat frequency of the campaign.
no_of_occurences:
type: integer
description: The number of occurrences of the campaign.
repeat_on_date_of_month:
type: array
items:
type: integer
description: 'The dates of the month on which the campaign should be repeated.
Example: [5, 25] to send on the 5th and 25th of each month.
'
repeat_on_days_of_week:
type: array
items:
type: string
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
description: The days of the week on which the campaign should repeat.
repeat_on_days_of_week_for_month:
type: array
items:
type: object
properties:
week_granularity:
type: string
enum:
- FIRST
- SECOND
- THIRD
- FOURTH
- LAST
repeat_on_days_of_week:
type: array
items:
type: string
enum:
- MONDAY
- TUESDAY
- WEDNESDAY
- THURSDAY
- FRIDAY
- SATURDAY
- SUNDAY
description: Configuration for repeating on specific weeks of the month.
AdvancedDetails_2:
type: object
description: Advanced campaign settings.
properties:
expiration_settings:
type: object
properties:
expire_notification_after_value:
type: integer
description: The numeric value for the notification expiration time.
expire_notification_after_type:
type: string
enum:
- HOUR
- DAY
description: The time unit for notification expiration.
remove_from_inbox_after_value:
type: integer
description: The numeric value for when to remove the message from the inbox.
remove_from_inbox_after_type:
type: string
enum:
- DAY
description: The time unit for removing the message from the inbox.
platform_level_priority:
type: object
properties:
android_specific_priority:
type: object
properties:
send_with_priority:
type: boolean
description: Whether to send with priority.
ios_specific_priority:
type: object
properties:
apns_priority:
type: string
enum:
- '1'
- '5'
- '10'
description: The priority of notification delivery for APNS.
interruption_level:
type: string
enum:
- Passive
- Active
- Time sensitive
- Critical
description: The interruption level for iOS notifications.
relevance_score:
type: number
enum:
- 0
- 0.5
- 1
description: The relevance score for iOS notifications.
PushDeliveryControls_2:
type: object
description: Controls for Push campaign delivery behavior.
properties:
bypass_dnd:
type: boolean
description: 'Whether to bypass Do Not Disturb settings.
Required for event-triggered campaigns.
'
campaign_throttle_rpm:
type: integer
description: 'The campaign throttle in requests per minute.
Not applicable for device-triggered, location-triggered, and event-triggered campaigns.
'
example: 50000
count_for_frequency_capping:
type: boolean
description: Whether to count this campaign for frequency capping.
ignore_frequency_capping:
type: boolean
description: Whether to ignore frequency capping for this campaign.
minimum_delay_between_two_notification_in_hour:
type: integer
description: 'Minimum delay between two notifications in hours.
Applies to event-triggered and device-triggered campaigns.
'
max_time_to_show_message_of_same_camapign:
type: string
description: 'Maximum duration (in hours) that a message from this campaign will be displayed to a user.
Applicable for device-triggered campaigns.
'
expiry_time_of_sync_data_in_hour:
type: string
description: 'Duration (in hours) after which synced campaign data will expire if trigger condition is not met.
Applicable for device-triggered campaigns.
'
send_message_in_offline_mode:
type: boolean
description: 'Whether to store and deliver the message when the device is offline.
Applicable for device-triggered campaigns.
'
send_limit_value:
type: string
description: 'Maximum number of times a user can receive this campaign within the specified time granularity.
Applicable for location-triggered campaigns.
'
send_limit_granularity_in_hours:
type: string
description: 'Time window (in hours) during which the send_limit_value is enforced.
Applicable for location-triggered campaigns.
'
SegmentationDetails_2:
type: object
description: Defines the target audience for the campaign.
properties:
included_filters:
$ref: '#/components/schemas/FilterGroup_2'
excluded_filters:
$ref: '#/components/schemas/FilterGroup_2'
is_all_user_campaign:
type: boolean
description: Whether to include all users in the campaign.
send_campaign_to_opt_out_users:
type: boolean
description: Whether to send the campaign to users who have opted out.
ControlGroupDetails_2:
type: object
description: Configuration for control groups.
properties:
is_campaign_control_group_enabled:
type: boolean
description: Whether the campaign control group is enabled.
campaign_control_group_percentage:
type: integer
description: 'The percentage of users added to the exclusion list.
**Required** if is_campaign_control_group_enabled is true.
'
minimum: 0
maximum: 100
is_global_control_group_enabled:
type: boolean
description: Whether the global control group is enabled.
UserAttributeFilter_2:
type: object
description: Filter based on user attributes.
required:
- filter_type
- data_type
- name
- operator
properties:
filter_type:
type: string
enum:
- user_attributes
data_type:
type: string
enum:
- string
- double
- datetime
- bool
description: The data type of the attribute being filtered.
category:
type: string
description: The category of the attribute (e.g., "Tracked Standard Attribute").
name:
type: string
description: The name of the attribute to filter on (e.g., "uid").
operator:
type: string
description: 'The operator to use in the filter. Allowed values depend on data_type:
- bool: is, exists
- double: in, between, lessThan, greaterThan, exists
- string: in, contains, containsInTheFollowing, startWithInTheFollowing, endsWithInTheFollowing, exists, is
- datetime: inTheLast, on, between, before, after, inTheNext, exists, today
'
value:
description: The value to filter on (not required for 'exists' operator).
case_sensitive:
type: boolean
description: Whether the filter comparison should be case-sensitive.
negate:
type: boolean
description: Whether to negate the filter condition.
project_name:
type: string
description: 'The name of the project associated with the user attributes.
**Required** if the Portfolio feature is enabled in your workspace.
'
BTSDetails_2:
type: object
description: 'Best Time to Send (BTS) configuration.
BTS provides a prescriptive time slot to send a campaign to increase the chance of user interaction.
'
properties:
send_in_bts:
type: boolean
description: Whether to send the campaign at the best time.
if_user_bts_is_not_available:
type: string
description: When to send the campaign if the user's best time is not available.
if_user_bts_outside_time_window:
type: string
description: When to send the campaign if the user's best time is outside the time window.
window_end_time:
type: string
description: The window end time.
example: 6:43 am
GmailAnnotationsProductCarousel:
type: object
description: 'Product Carousel annotation shown in Gmail''s Promotions tab.
Use `MANUAL` to specify products directly in the request, or `PRODUCT_SET` to pull products dynamically from a MoEngage Catalog product set.
'
required:
- type
properties:
type:
type: string
enum:
- MANUAL
- PRODUCT_SET
description: 'The source type for the product carousel.
- `MANUAL`: Specify products directly in the request using `manual_data`.
- `PRODUCT_SET`: Pull products dynamically from a MoEngage Catalog product set using `product_set_data`. Requires the Product Sets feature to be enabled for your workspace.
**Required** when `product_carousel` is present.
'
manual_data:
description: 'Products specified directly in the request.
**Required** when `product_carousel.type` is `MANUAL`.
'
allOf:
- $ref: '#/components/schemas/GmailAnnotationsProductCarouselManualData'
product_set_data:
description: 'Reference to a MoEngage Catalog product set.
**Required** when `product_carousel.type` is `PRODUCT_SET`.
'
allOf:
- $ref: '#/components/schemas/GmailAnnotationsProductCarouselProductSetData'
GmailAnnotationsProductCarouselProductSetData:
type: object
description: 'Product set configuration for the Gmail Annotations product carousel. Pulls products dynamically from a MoEngage Catalog product set.
**Required** when `product_carousel.type` is `PRODUCT_SET`. Requires the Product Sets feature to be enabled for your workspace.
'
required:
- product_set
- image_url
- headline
- promo_url
- product_count
properties:
product_set:
type: string
description: 'Product set ID from MoEngage Catalog. Must be valid and exist in your workspace.
**Required** when `product_set_data` is present.
'
example: product_set_12345
image_url:
type: string
description: 'Fallback image URL if a product set image is unavailable.
**Required** when `product_set_data` is present.
'
example: https://example.com/images/fallback.png
headline:
type: string
description: 'Label shown for the product carousel.
**Required** when `product_set_data` is present.
'
example: Recommended For You
promo_url:
type: string
description: 'Destination URL when the user clicks the annotation.
**Required** when `product_set_data` is present.
'
example: https://example.com/shop
product_count:
type: integer
description: 'Number of products to display.
**Required** when `product_set_data` is present. Minimum 2, maximum 9.
'
minimum: 2
maximum: 9
example: 3
UTMParams_2:
type: object
description: UTM parameters for tracking campaign performance.
required:
- utm_source
- utm_medium
properties:
utm_source:
type: string
description: 'The source of the traffic (e.g., YouTube, Instagram, Google).
**Required** when using UTM parameters.
'
example: google
utm_medium:
type: string
description: 'The channel type (e.g., Push, SMS, Email).
**Required** when using UTM parameters.
'
example: email
utm_campaign:
type: string
description: The name of the campaign (e.g., Newyear, Bigbillionday).
example: summer_sale
utm_term:
type: string
description: Search terms for paid traffic (e.g., Mobile+sale).
utm_content:
type: string
description: The content element that differentiates links (e.g., banner, video).
utm_custom:
type: string
description: Custom UTM parameter (maximum of 5 custom parameters).
GmailAnnotationsProductCarouselManualProduct:
type: object
description: A single product entry in a manual product carousel. All fields below are required for each product.
required:
- id
- headline
- original_price
- discount_value
- discount_type
- promo_url
- product_image
properties:
id:
type: string
description: 'Unique product identifier.
**Required** for each product.
'
example: prod-001
headline:
type: string
description: 'Product name shown in the annotation.
**Required** for each product.
'
example: Wireless Headphones
original_price:
type: string
description: 'Original price of the product as a numeric string.
**Required** for each product.
'
example: '199.99'
discount_value:
type: string
description: 'Discount amount as a numeric string. Interpreted as a percentage or absolute value depending on `discount_type`.
**Required** for each product.
'
example: '30'
discount_type:
type: string
enum:
- PERCENT
- VALUE
description: 'How `discount_value` is interpreted.
- `PERCENT`: `discount_value` is a percentage.
- `VALUE`: `discount_value` is an absolute amount in `currency`.
**Required** for each product.
'
example: PERCENT
promo_url:
type: string
description: 'Product landing page URL. Must be a valid HTTPS URL.
**Required** for each product.
'
example: https://example.com/products/prod-001
product_image:
type: string
description: 'Product image URL. Must be a valid HTTPS URL. Cannot be empty.
**Required** for each product.
'
example: https://example.com/images/prod-001.png
AndroidPushContent_2:
type: object
description: Android push notification content.
required:
- template_type
properties:
template_type:
type: string
enum:
- BASIC
- STYLIZED_BASIC
- SIMPLE_IMAGE_CAROUSEL
- IMAGE_BANNER_WITH_TEXT
- TIMER
- TIMER_WITH_PROGRESS_BAR
- Custom
description: 'The type of Android push template.
**Note:** If you are passing a template ID, set template_type to "Custom".
'
custom_template_id:
type: string
description: 'The ID of the custom template.
**Required** when template_type is "Custom".
'
custom_template_version:
type: integer
description: The version of the custom template.
basic_details:
$ref: '#/components/schemas/AndroidBasicDetails_2'
timer:
$ref: '#/components/schemas/AndroidTimer_2'
buttons:
type: array
description: Action buttons for the notification.
items:
$ref: '#/components/schemas/AndroidButton_2'
advanced:
$ref: '#/components/schemas/AndroidAdvanced_2'
template_backup:
$ref: '#/components/schemas/AndroidTemplateBackup_2'
IOSButton_2:
type: object
description: Action button configuration for iOS push notifications.
required:
- button_category
properties:
button_category:
type: string
description: 'The pre-defined category name for a set of interactive buttons configured in the app.
'
example: MOE_PUSH_TEMPLATE
PushTriggerCondition_2:
type: object
description: 'Trigger condition details for Push event-triggered campaigns.
**Required** for EVENT_TRIGGERED campaigns.
'
properties:
included_filters:
$ref: '#/components/schemas/FilterGroup_2'
secondary_included_filters:
$ref: '#/components/schemas/FilterGroup_2'
trigger_delay_type:
type: string
enum:
- DELAY
- ASAP
- INTELLIGENT_DELAY
description: 'The type of triggered delay.
When set to DELAY, the following fields are mandatory:
- trigger_delay_value
- trigger_delay_granularity
- trigger_relation
'
trigger_delay_value:
type: integer
description: The numeric value of the triggered delay.
trigger_delay_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: The time unit for the trigger delay.
trigger_relation:
type: string
enum:
- BEFORE
- AFTER
description: 'The trigger relation with delay.
**Required** when trigger_delay_type is DELAY.
'
trigger_attr:
type: object
description: The attribute value of the trigger.
intelligent_delay_optimization:
type: object
description: 'Configuration for intelligent delay optimization.
Used when trigger_delay_type is INTELLIGENT_DELAY. Defines a time window (min/max delay) within which the system finds the optimal moment to send the message.
'
properties:
min_delay_value:
type: integer
description: The numeric component of the lower bound for the intelligent delay window.
min_delay_granularity:
type: string
enum:
- MINUTES
- HOURS
description: The time unit that qualifies the min_delay_value.
max_delay_value:
type: integer
description: The numeric component of the upper bound for the intelligent delay window.
max_delay_granularity:
type: string
enum:
- HOURS
- DAYS
description: The time unit that qualifies the max_delay_value.
IOSAdvanced_2:
type: object
description: Advanced configuration options for iOS push notifications.
properties:
coupon_code:
type: string
description: The coupon code to be included in the push payload.
sound_file:
type: string
description: The name of a custom sound file located in the app bundle to play upon receiving the notification.
enable_ios_badge:
type: boolean
description: Whether this campaign allows the notification to increment the app's badge count.
group_key:
type: string
description: 'The group key used to identify and categorize related push notifications.
**Note:**
- Use the same group key for all push notifications you want to group
- MoEngage automatically modifies the group key to ensure it doesn''t exceed 45 characters
- Non-Latin scripts, special characters, and spaces are removed
'
collapse_replace_key:
type: string
description: 'The update key used to identify and update related push notifications.
Ensure you use the same update key for all push notifications intended to update each other.
'
IOSPushContent_2:
type: object
description: iOS push notification content.
required:
- template_type
properties:
template_type:
type: string
enum:
- BASIC
- STYLIZED_BASIC
- SIMPLE_IMAGE_CAROUSEL
- Custom
description: The type of iOS push template.
custom_template_id:
type: string
description: 'The ID of the custom template.
**Required** when template_type is "Custom".
'
custom_template_version:
type: integer
description: The version of the custom template.
basic_details:
$ref: '#/components/schemas/IOSBasicDetails_2'
buttons:
type: array
description: Action buttons for the notification.
items:
$ref: '#/components/schemas/IOSButton_2'
advanced:
$ref: '#/components/schemas/IOSAdvanced_2'
template_backup:
$ref: '#/components/schemas/IOSTemplateBackup_2'
WebBasicDetails_2:
type: object
description: Basic details for the Web push notification.
required:
- title
- message
- redirect_url
properties:
title:
type: string
description: The title text displayed at the top of the notification.
example: Special Offer
message:
type: string
description: The main body text of the notification.
example: Check out our latest deals!
redirect_url:
type: string
format: uri
description: The URL that the user is redirected to when they click the main body of the notification.
example: https://example.com/offers
image_url:
type: string
format: uri
description: The URL of a large image to be displayed within the notification content.
auto_dismiss_notification:
type: boolean
description: Whether the notification should auto-dismiss.
CustomSegmentFilter_2:
type: object
description: Filter using a custom segment.
required:
- filter_type
- id
properties:
filter_type:
type: string
enum:
- custom_segments
name:
type: string
description: The name of the custom segment.
id:
type: string
description: The ID of the custom segment.
AndroidButton_2:
type: object
description: Action button configuration for Android push notifications.
required:
- btn_name
- click_action_type
- click_action_value
properties:
btn_name:
type: string
description: The text to be displayed on the button.
example: Shop Now
click_action_type:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
- CALL
- SHARE
- COPY
- SET_USER_ATTRIBUTE
- TRACK_EVENT
- CUSTOM_ACTION
- SNOOZE
- REMIND_LATER
description: The type of action to perform when the button is clicked.
click_action_name:
type: string
description: The name of the click action.
click_action_value:
type: string
description: The URL or deep link to open for the button's action.
example: https://example.com/product
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair_2'
description: Custom key-value pairs specific to this button's click event.
PushCampaignUpdateRequest:
title: Push Campaign
type: object
required:
- request_id
- updated_by
properties:
request_id:
type: string
description: A unique identifier for this campaign update request.
example: push_update_12345
updated_by:
type: string
format: email
description: The email ID of the user updating this campaign.
example: john.doe@example.com
channel:
type: string
enum:
- PUSH
description: The communication channel (automatically set to PUSH for this tab).
basic_details:
$ref: '#/components/schemas/PushBasicDetails'
trigger_condition:
$ref: '#/components/schemas/PushTriggerCondition_2'
campaign_content:
$ref: '#/components/schemas/PushCampaignContent_2'
segmentation_details:
$ref: '#/components/schemas/SegmentationDetails_2'
scheduling_details:
$ref: '#/components/schemas/SchedulingDetails_2'
delivery_controls:
$ref: '#/components/schemas/PushDeliveryControls_2'
advanced:
$ref: '#/components/schemas/AdvancedDetails_2'
conversion_goal_details:
$ref: '#/components/schemas/ConversionGoalDetails_2'
control_group_details:
$ref: '#/components/schemas/ControlGroupDetails_2'
utm_params:
$ref: '#/components/schemas/UTMParams_2'
IOSTemplateBackup_2:
type: object
description: 'Fallback notification content for when the template cannot be rendered.
**Required for:** Stylized Basic and Simple Image Carousel templates
'
required:
- title
- message
properties:
title:
type: string
description: The title for the fallback notification.
message:
type: string
description: The message body for the fallback notification.
subtitle:
type: string
description: The subtitle for the fallback notification.
allow_bg_refresh:
type: boolean
description: Whether to enable background app refresh for the fallback notification.
rich_media_type:
type: string
enum:
- Image
- Video
- GIF
description: The type of media attachment for the fallback.
rich_media_value:
type: string
format: uri
description: The URL of the media attachment for the fallback.
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The default click action for the fallback notification.
default_click_action_value:
type: string
description: The URL or deep link for the fallback's click action.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair_2'
description: Custom key-value pairs specific to the fallback payload.
Connector_2:
type: object
description: Email connector configuration for sending email campaigns.
required:
- connector_type
- connector_name
properties:
connector_type:
type: string
description: The type of connector service (e.g., SENDGRID, AWS SES, etc.).
example: SENDGRID
connector_name:
type: string
description: The name of the connector configuration.
example: default
WebAdvanced_2:
type: object
description: Advanced configuration options for Web push notifications.
properties:
icon_image_type:
type: string
enum:
- DEFAULT
- ICON_URL
description: The type of icon to use for the notification.
icon_url:
type: string
format: uri
description: The URL for a custom notification icon.
WebPushContent_2:
type: object
description: Web push notification content.
required:
- template_type
- basic_details
properties:
template_type:
type: string
enum:
- BASIC
description: The template type for web push (currently only BASIC is supported).
basic_details:
$ref: '#/components/schemas/WebBasicDetails_2'
buttons:
type: array
description: Action buttons for the notification.
items:
$ref: '#/components/schemas/WebButton_2'
advanced:
$ref: '#/components/schemas/WebAdvanced_2'
CarouselContent_2:
type: object
description: 'Configuration for image carousel in Simple Image Carousel template.
**Required for:** Simple Image Carousel template
'
required:
- slider_transition
- slide_data
properties:
slider_transition:
type: string
enum:
- manual
- automatic
description: The transition type for the carousel slides.
slide_data:
type: array
description: Array of slide configurations.
items:
type: object
required:
- image_url
properties:
image_url:
type: string
format: uri
description: The image URL for this slide.
image_click_action:
type: string
enum:
- DEEPLINKING
- RICH_LANDING
- NAVIGATE_TO_A_SCREEN
description: The click action for this slide's image.
image_click_action_value:
type: string
description: 'The click action value for this slide''s image.
**Required** when image_click_action is provided.
'
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair_2'
IOSBasicDetails_2:
type: object
description: Basic details for the iOS push notification.
required:
- title
- message
properties:
background_color_code:
type: string
description: 'The hexadecimal color code for the notification''s background.
**Supported Templates:** Simple Image Carousel, Stylized Basic
'
example: '#a0a0a0'
apply_background_color_in_text_editor:
type: boolean
description: 'Whether to apply the background color within the text editor view.
**Supported Templates:** Simple Image Carousel, Stylized Basic
'
title:
type: string
description: The main title of the push notification.
example: New Message
message:
type: string
description: The main body text of the notification.
example: You have a new message waiting for you
subtitle:
type: string
description: The subtitle displayed below the main title.
allow_bg_refresh:
type: boolean
description: Whether to allow the app to be woken up in the background to refresh content.
rich_media_type:
type: string
enum:
- Image
- Video
- GIF
description: 'The type of rich media to be included in the notification.
**Supported Templates:** Basic
'
rich_media_value:
type: string
format: uri
description: 'The URL of the rich media asset specified in the rich_media_type field.
**Supported Templates:** Basic
'
image_url:
type: string
format: uri
description: 'The URL of a large image to be displayed within the notification content.
**Note:** Required when template_type is SIMPLE_IMAGE_CAROUSEL.
'
input_gif_url:
type: string
format: uri
description: 'The URL for the GIF media used in the push campaign content.
**Supported Templates:** Basic, Stylized Basic
'
carousel_content:
$ref: '#/components/schemas/IOSCarouselContent_2'
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The action performed when the main body of the notification is tapped.
default_click_action_value:
type: string
description: The URL or deep link associated with the default click action.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair_2'
description: Custom key-value pairs sent with the push payload for in-app handling.
CampaignAudienceLimit_2:
type: object
description: Configuration for limiting campaign audience.
properties:
limit:
type: integer
description: 'The maximum number of times an audience can be included or targeted within the campaign.
'
metrics:
type: string
description: 'The type of measurement being tracked (e.g., impressions, clicks, conversions).
'
frequency:
type: string
description: 'How often the limit and metrics are applied (e.g., daily, weekly, monthly).
'
GmailAnnotations:
type: object
description: 'Gmail Annotations shown in Gmail''s Promotions tab. Two annotation types are supported: `deal_card` and `product_carousel`. These are mutually exclusive — include only one per campaign.
**Note:** `gmail_annotations` is only supported when `content_type` is `PROMOTIONAL`. Using it with `TRANSACTIONAL` returns a `400` error.
'
required:
- send_email_if_personalization_fails
- sender_logo
- sender_logo_type
properties:
send_email_if_personalization_fails:
type: boolean
description: 'Whether to send the email if personalization of any Gmail annotation field fails.
**Required** when `gmail_annotations` is present.
'
example: true
sender_logo:
type: string
description: 'The sender logo shown in the Gmail annotation.
Accepts a valid HTTPS URL or a MoEngage personalization token.
**Required** when `gmail_annotations` is present.
'
example: https://example.com/logo.png
sender_logo_type:
type: string
enum:
- image_url
- uploaded_image
description: 'The source type of the sender logo.
**Required** when `sender_logo` is provided.
'
example: image_url
deal_card:
description: 'The Deal Card annotation.
**Optional.** Use either `deal_card` or `product_carousel` — not both.
'
allOf:
- $ref: '#/components/schemas/GmailAnnotationsDealCard'
product_carousel:
description: 'The Product Carousel annotation.
**Optional.** Use either `product_carousel` or `deal_card` — not both.
'
allOf:
- $ref: '#/components/schemas/GmailAnnotationsProductCarousel'
CampaignUpdateRequest:
oneOf:
- $ref: '#/components/schemas/PushCampaignUpdateRequest'
- $ref: '#/components/schemas/EmailCampaignUpdateRequest'
discriminator:
propertyName: channel
mapping:
PUSH: '#/components/schemas/PushCampaignUpdateRequest'
EMAIL: '#/components/schemas/EmailCampaignUpdateRequest'
GlobalControlGroupRequest:
type: object
description: Request to add or remove users from the Global Control Group (GCG).
required:
- request_id
- file_url
- action_type
- updated_by
properties:
request_id:
type: string
description: Unique identifier of the request to update the Global Control Group.
example: '{{request_id}}'
file_url:
type: string
format: uri
description: 'Publicly accessible URL of the CSV file for processing. The file must contain a single column named `uid` followed by the respective user IDs in new rows. The file must be under 300 MB and downloadable without authentication.
**Note:** Currently, only publicly accessible Amazon S3 URLs are supported.
'
example: https://example.csv
action_type:
type: string
enum:
- add
- remove
description: The operation to perform on users in the Global Control Group.
updated_by:
type: string
format: email
description: The email ID of the user initiating the update.
example: john.doe@xyz.com
ActionFilter_2:
type: object
description: Filter based on user actions/events.
required:
- filter_type
- action_name
properties:
filter_type:
type: string
enum:
- actions
action_name:
type: string
description: The name of the action/event to filter on.
execution:
type: object
properties:
type:
type: string
enum:
- atleast
- atmost
- exactly
count:
type: integer
executed:
type: boolean
description: Whether the action was executed.
attributes:
$ref: '#/components/schemas/FilterGroup_2'
condition:
type: string
description: The condition type (e.g., "IF").
VariationDetails_2:
type: object
description: Configuration for A/B testing variations.
required:
- distribution_type
- no_of_variations
properties:
distribution_type:
type: string
enum:
- SHERPA
- MANUAL
description: The distribution type for variations.
no_of_variations:
type: integer
description: The number of variations for the campaign.
minimum: 1
example: 2
manual_distribution_percentage:
type: object
description: 'Manual percentage distribution for each variation.
**Required** when distribution_type is MANUAL.
'
additionalProperties:
type: string
example:
variation_1: '50'
variation_2: '45'
sherpa_campaign_duration:
type: integer
description: 'The Sherpa campaign duration.
**Required** when distribution_type is SHERPA.
'
sherpa_distribution_metric:
type: string
enum:
- OPEN RATE
- CLICK RATE
- BOTH
description: 'The Sherpa distribution metric.
**Required** when distribution_type is SHERPA.
'
PushCampaignContent_2:
type: object
description: Contains the content and variations for the Push campaign.
required:
- content
properties:
locales:
type: array
items:
type: string
description: 'List of locales for multi-language campaigns.
You can send campaigns in multiple languages using locales.
'
example:
- en-US
- es-ES
- default
variation_details:
$ref: '#/components/schemas/VariationDetails_2'
content:
type: object
description: The actual Push campaign content.
required:
- push
properties:
push:
$ref: '#/components/schemas/PushContent'
AndroidBasicDetails_2:
type: object
description: "Basic details for the Android push notification. \n\nFields vary by template_type. All templates support common fields like title, message, default_click_action.\n"
required:
- notification_channel
- title
- message
- default_click_action
- default_click_action_value
properties:
notification_channel:
type: string
description: The Android notification channel where the push will be sent.
example: general
include_app_name_and_time:
type: boolean
description: 'Whether to include the application''s name and timestamp within the banner image.
**Supported Templates:** Image Banner with Text
'
background_color_code:
type: string
description: 'The hex code for the notification''s background color.
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
example: '#9a4444'
app_name_color_code:
type: string
description: 'The hex code for the color of the application''s name text.
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
example: '#dea1a1'
notification_control_color:
type: string
enum:
- LIGHT
- DARK
description: 'The color scheme for the notification''s control elements (action buttons).
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
include_title_and_message:
type: boolean
description: 'Whether to include the notification''s title and message text within the banner image.
**Supported Templates:** Image Banner with Text
'
apply_background_color_in_text_editor:
type: boolean
description: 'Whether to apply the specified background color within the rich text editor for preview.
**Supported Templates:** Stylized Basic, Simple Image Carousel, Image Banner with Text
'
title:
type: string
description: The main title of the push notification.
example: Limited Time Offer!
message:
type: string
description: 'The message body of the push notification.
You can use HTML in the message parameter to apply rich text formatting, including text color and styles.
'
example: Get 50% off on all items. Shop now!
summary:
type: string
description: The summary text for the notification.
image_url:
type: string
format: uri
description: The image URL for the push notification.
example: https://example.com/images/promo.jpg
image_scaling:
type: string
enum:
- FIT_INSIDE_IMAGE_CONTAINER
- FILL_IMAGE_CONTAINER
description: 'The scaling behavior for images within the carousel template.
**Supported Templates:** Simple Image Carousel, Image Banner with Text
'
banner_image_url:
type: string
format: uri
description: 'The URL for the background image used in the Image Banner Text template.
**Required for:** Image Banner with Text template
'
input_gif_url:
type: string
format: uri
description: 'The URL for the GIF media used in the push campaign content.
**Supported Templates:** Basic
'
collapsed_push_notification:
type: string
description: 'The configuration for the notification''s collapsed state (view before user expands it).
**Supported Templates:** Image Banner with Text
'
example: SAME_AS_TEMPLATE_BACKUP
carousel_content:
$ref: '#/components/schemas/CarouselContent_2'
default_click_action:
type: string
enum:
- DEEPLINKING
- NAVIGATE_TO_A_SCREEN
- RICH_LANDING
description: The action performed when the main body of the notification is clicked.
default_click_action_value:
type: string
description: The URL or deep link to open when the notification is clicked.
example: https://example.com/sale
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair_2'
description: Custom key-value pairs for the notification payload.
PlatformSpecificDetails_2:
type: object
description: Platform-specific configuration details.
properties:
android:
type: object
properties:
push_amp_plus_enabled:
type: boolean
description: Whether Push Amp+ feature is enabled for this campaign.
default: false
ios:
type: object
properties:
send_to_all_eligible_device:
type: boolean
description: Whether to send the campaign to all eligible devices.
exclude_provisional_push_devices:
type: boolean
description: Whether to exclude provisional push devices.
send_to_only_provisional_push_enabled_devices:
type: boolean
description: Whether to send only to provisional push-enabled devices.
description: '**Note:** You must pass one of these keys as true for iOS.
'
SchedulingDetails_2:
type: object
description: Defines when the campaign should be sent. All date-time values must be passed in UTC.
required:
- delivery_type
properties:
delivery_type:
type: string
enum:
- ASAP
- AT_FIXED_TIME
- SEND_IN_BTS
- SEND_IN_USER_TIMEZONE
description: When to deliver the campaign.
start_time:
type: string
format: date-time
description: 'The start time for the campaign in ISO 8601 format. Pass this value in UTC.
Example: "2024-06-21T12:59:00"
'
expiry_time:
type: string
format: date-time
description: The expiry time for the campaign in ISO 8601 format. Pass this value in UTC.
periodic_details:
$ref: '#/components/schemas/PeriodicDetails_2'
bts_details:
$ref: '#/components/schemas/BTSDetails_2'
user_timezone_details:
$ref: '#/components/schemas/UserTimezoneDetails_2'
PushBasicDetails:
type: object
description: Contains the basic information about the Push campaign.
required:
- name
- platforms
- platform_specific_details
properties:
name:
type: string
description: The name of the campaign.
example: Summer Sale Push Notification
business_event:
type: string
description: 'The business event to be mapped to the campaign.
**Required** for BUSINESS_EVENT_TRIGGERED campaigns.
'
example: user_signup
tags:
type: array
items:
type: string
description: Tags that provide context about the campaign's nature or theme.
example:
- activation
- summer_sale
team:
type: string
description: 'The name of the team collaborating on this campaign.
For more information, refer to [Teams in MoEngage](/user-guide/settings/account/team-management/teams-in-moengage).
'
example: marketing_team
platforms:
type: array
items:
type: string
enum:
- ANDROID
- IOS
- WEB
description: The platforms to target for this Push campaign.
example:
- ANDROID
- IOS
broadcast_live_activity_id:
type: string
description: 'The broadcast live activity ID for iOS Live Activities.
**Required** when platform is iOS and delivery_type is BROADCAST_LIVE_ACTIVITY.
'
example: live_check123
geofences:
$ref: '#/components/schemas/Geofences_2'
send_to_triggered_platform_only:
type: boolean
description: Whether to send the campaign only to the platform that triggered the event. Applicable for event-triggered campaigns.
platform_specific_details:
$ref: '#/components/schemas/PlatformSpecificDetails_2'
EmailDeliveryControls_2:
type: object
description: Controls for Email campaign delivery behavior.
properties:
bypass_dnd:
type: boolean
description: Whether to bypass Do Not Disturb settings.
campaign_throttle_rpm:
type: integer
description: The campaign throttle in requests per minute.
example: 50000
count_for_frequency_capping:
type: boolean
description: Whether to count this campaign for frequency capping.
ignore_frequency_capping:
type: boolean
description: Whether to ignore frequency capping for this campaign.
minimum_delay_between_two_notification_in_hour:
type: integer
description: Minimum delay between two notifications in hours.
EmailContent_2:
type: object
description: Email campaign content.
required:
- subject
- sender_name
- from_address
- reply_to_address
properties:
subject:
type: string
description: The subject line of the email.
example: Exclusive Summer Sale - 50% Off!
preview_text:
type: string
description: The preview text shown in email clients.
example: Dont miss out on our biggest sale of the season
sender_name:
type: string
description: The name of the sender that appears in the email.
example: MoEngage Team
from_address:
type: string
format: email
description: The sender's email address.
example: noreply@moengage.com
reply_to_address:
type: string
format: email
description: The reply-to email address.
example: support@moengage.com
cc_ids:
type: array
items:
type: string
format: email
description: Email addresses to CC.
bcc_ids:
type: array
items:
type: string
format: email
description: Email addresses to BCC.
html_content:
type: string
description: 'The HTML content of the email.
**Optional** if custom_template_id is provided.
'
example: Hello {{UserAttribute['First Name']}}
email_editor:
type: string
enum:
- Froala Editor
- Ace Editor
description: 'The HTML editor used for the email campaign.
- **Required** if you want to create the campaign using the `Ace Editor`.
- **Optional** if you want to use the default `Froala Editor`.
'
example: Ace Editor
custom_template_id:
type: string
description: 'The ID of a custom email template.
**Optional** if html_content is provided.
When this field is provided, the following fields are not required:
- subject
- preview_text
- sender_name
'
custom_template_version:
type: integer
description: The version of the custom template.
attachments:
type: array
items:
type: object
properties:
file_type:
type: string
enum:
- URL
- PERSONALIZED_ATTACHMENT
url:
type: string
description: Attachments to include in the email.
gmail_annotations:
$ref: '#/components/schemas/GmailAnnotations'
GmailAnnotationsDealCard:
type: object
description: 'Deal Card annotation shown in Gmail''s Promotions tab. All four fields below are required when `deal_card` is present.
'
required:
- description
- discount_code
- availability_starts
- availability_ends
properties:
description:
type: string
description: 'Short deal description shown in the Gmail annotation.
**Required** when `deal_card` is present.
'
example: Get 20% off on all orders above $50
discount_code:
type: string
description: 'Promo or discount code displayed with the deal.
**Required** when `deal_card` is present.
'
example: SAVE20
availability_starts:
type: string
description: 'ISO 8601 datetime indicating when the deal becomes active. Use the timezone of the promotion, not your server or API caller timezone. Ensure the timezone matches the promotion''s local timezone so the deal displays the correct active and expiry times for your audience.
**Accepted formats:**
- UTC (`Z` suffix): `YYYY-MM-DDTHH:mm:ssZ` (for example, `2026-06-01T00:00:00Z`).
- Positive offset: `YYYY-MM-DDTHH:mm:ss+HH:MM` (for example, `2026-06-01T00:00:00+05:30` for IST).
- Negative offset: `YYYY-MM-DDTHH:mm:ss-HH:MM` (for example, `2026-06-01T00:00:00-07:00` for US Pacific PDT).
**Common offsets:** IST `+05:30`, SGT `+08:00`, GST `+04:00`, CET `+01:00` or `+02:00` (DST), EST `-05:00`, EDT `-04:00`, PST `-08:00`, PDT `-07:00`, UTC `Z` or `+00:00`.
**Required** when `deal_card` is present.
'
example: '2026-06-01T00:00:00Z'
availability_ends:
type: string
description: 'ISO 8601 datetime indicating when the deal expires. Same format as `availability_starts`.
Use the timezone of the promotion, not your server or API caller timezone. Ensure the timezone matches the promotion''s local timezone so the deal displays the correct active and expiry times for your audience.
Must be at least 1 hour after `availability_starts`.
**Required** when `deal_card` is present.
'
example: '2026-06-30T23:59:59Z'
ErrorResponse:
type: object
properties:
error:
type: object
properties:
code:
type: string
description: The error code (e.g., "400 Bad Request").
message:
type: string
description: Description of why the request failed.
target:
type: string
description: The target of the error.
details:
type: array
items:
type: object
properties:
target:
type: string
message:
type: string
request_id:
type: string
description: The request ID associated with this error.
EmailBasicDetails:
type: object
description: Contains the basic information about the Email campaign.
required:
- name
- content_type
- user_attribute_identifier
properties:
name:
type: string
description: The name of the campaign.
example: Summer Sale Email
business_event:
type: string
description: 'The business event to be mapped to the campaign.
**Required** for BUSINESS_EVENT_TRIGGERED campaigns.
'
example: user_signup
content_type:
type: string
enum:
- PROMOTIONAL
- TRANSACTIONAL
description: The type of content in the campaign.
subscription_category:
type: string
description: 'The subscription category for promotional email campaigns.
This targets only users who have opted-in to receive communication about this category.
**Required** for PROMOTIONAL email campaigns.
'
example: music
tags:
type: array
items:
type: string
description: Tags that provide context about the campaign's nature or theme.
example:
- activation
- summer_sale
team:
type: string
description: 'The name of the team collaborating on this campaign.
For more information, refer to [Teams in MoEngage](/user-guide/settings/account/team-management/teams-in-moengage).
'
example: marketing_team
user_attribute_identifier:
type: string
description: 'The user attribute that stores the email address.
Standard identifier is `MOE_EMAIL_ID`.
'
example: MOE_EMAIL_ID
default: MOE_EMAIL_ID
send_only_double_opt_in_users:
type: boolean
description: 'Whether to send the campaign only to users who have completed double opt-in.
When `false` or omitted, the campaign sends to all eligible users.
Ensure the Double Opt-In feature is enabled for your workspace.
'
default: false
example: true
deduplication_attribute:
type: string
description: 'The user attribute used for brand deduplication.
Pass `""` (empty string) or omit the field to treat the campaign as single-brand. For multi-brand deduplication, pass the backend attribute name that stores the brand identifier (for example, `u_em`).
Always use the backend attribute name (for example, `u_em`), not the display label (for example, `Email (Standard)`).
Ensure the Brand Deduplication feature is enabled for your workspace.
'
default: ''
example: u_em
AndroidAdvanced_2:
type: object
description: Advanced configuration options for Android push notifications.
properties:
coupon_code:
type: string
description: The coupon code to be included in the push payload.
example: SUMMER50
icon_type_in_notification:
type: string
description: The icon type to be included in the push payload.
example: app_icon
use_large_icon:
type: boolean
description: Whether to use a large icon in the notification.
make_notification_sticky:
type: boolean
description: 'When enabled, the user cannot swipe away the notification.
'
dismiss_button_text:
type: string
description: 'The text to display on the dismiss button.
**Required** when make_notification_sticky is true or auto_dismiss_notification is true.
'
auto_dismiss_notification:
type: boolean
description: Whether the notification can be auto-dismissed.
auto_dismiss_notification_time_value:
type: integer
description: 'The time value after which to auto-dismiss the notification.
**Required** when auto_dismiss_notification is true.
'
auto_dismiss_notification_time_granularity:
type: string
enum:
- DAYS
- HOURS
- MINUTES
description: 'The time unit for auto-dismiss.
**Required** when auto_dismiss_notification is true.
'
group_key:
type: string
description: 'The group key used to identify and categorize related push notifications.
**Note:**
- Use the same group key for all push notifications you want to group
- MoEngage automatically modifies the group key to ensure it doesn''t exceed 45 characters
- Non-Latin scripts, special characters, and spaces are removed
'
collapse_replace_key:
type: string
description: 'The update key used to identify and update related push notifications.
Ensure you use the same update key for all push notifications intended to update each other.
'
UserTimezoneDetails_2:
type: object
description: Configuration for sending in the user's timezone.
properties:
send_in_user_timezone:
type: boolean
description: Whether to send the campaign on a specific date and time within the user's timezone.
send_if_user_timezone_has_passed:
type: boolean
description: Whether to send the campaign if the user's timezone has passed.
IOSCarouselContent_2:
type: object
description: 'Configuration for image carousel in Simple Image Carousel template.
**Required for:** Simple Image Carousel template
'
required:
- slider_transition
- slide_data
properties:
slider_transition:
type: string
enum:
- MANUAL
- AUTOMATIC
description: The transition type for the carousel slides.
slide_data:
type: array
description: Array of slide configurations.
items:
type: object
required:
- image_url
properties:
image_url:
type: string
format: uri
description: The image URL for this slide.
image_click_action:
type: string
enum:
- DEEPLINKING
- RICH_LANDING
- NAVIGATE_TO_A_SCREEN
description: The click action for this slide's image.
image_click_action_value:
type: string
description: The click action value for this slide's image.
key_value_pairs:
type: array
items:
$ref: '#/components/schemas/KeyValuePair_2'
WebButton_2:
type: object
description: Action button configuration for Web push notifications.
required:
- title
properties:
title:
type: string
description: The text displayed on the button.
example: View Offer
icon_url:
type: string
format: uri
description: The URL of an icon to be displayed next to the button text.
url:
type: string
format: uri
description: The destination URL that the user is redirected to when they click this button.
FilterGroup_2:
type: object
description: 'A group of filters combined with a logical operator.
For detailed segmentation payload and supported fields, refer to [Create Custom Segment](/api/filter-segments/create-filter-segment).
'
required:
- filter_operator
- filters
properties:
filter_operator:
type: string
enum:
- and
- or
description: The logical operator to combine filters.
filters:
type: array
items:
oneOf:
- $ref: '#/components/schemas/UserAttributeFilter_2'
- $ref: '#/components/schemas/ActionFilter_2'
- $ref: '#/components/schemas/CustomSegmentFilter_2'
description: 'The list of filters to be combined using the filter operator.
Supported filter types:
- User attributes-based filters
- Action-based filters (with or without attributes)
- Custom segments
'
GmailAnnotationsProductCarouselManualData:
type: object
description: 'Manual product list for the Gmail Annotations product carousel.
**Required** when `product_carousel.type` is `MANUAL`. Minimum 2 products required.
'
required:
- currency
- products
properties:
currency:
type: string
description: 'ISO 4217 currency code applied to all products in the carousel.
**Required** when `manual_data` is present.
'
example: USD
products:
type: array
description: 'List of products to display in the carousel.
**Required** when `manual_data` is present. Minimum 2 products.
'
minItems: 2
items:
$ref: '#/components/schemas/GmailAnnotationsProductCarouselManualProduct'
CampaignStatusChangeRequest:
type: object
description: You can request to change the status of one or more campaigns.
required:
- request_id
- action
- campaign_ids
properties:
request_id:
type: string
description: A unique identifier for this status change request.
example: status_change_12345
action:
type: string
enum:
- STOP
- PAUSE
- RESUME
description: 'The action to perform on the campaign(s).
- **STOP**: Stop a scheduled One-time campaign (cannot be used for Periodic campaigns). After a One-time campaign moves to Active state, it cannot be stopped.
- **PAUSE**: Pause a running Periodic or Event-triggered campaign. `PAUSE` is not supported for `BUSINESS_EVENT_TRIGGERED`, `DEVICE_TRIGGERED`, or `LOCATION_TRIGGERED` campaigns.
- **RESUME**: Resume a paused Periodic or Event-triggered campaign. `RESUME` is not supported for `BUSINESS_EVENT_TRIGGERED`, `DEVICE_TRIGGERED`, or `LOCATION_TRIGGERED` campaigns.
'
campaign_ids:
type: array
items:
type: string
description: 'Array of campaign IDs whose status you want to change.
**Maximum:** 10 campaign IDs per request
'
minItems: 1
maxItems: 10
example:
- camp_abc123
- camp_def456
EmailCampaignUpdateRequest:
title: Email Campaign
type: object
required:
- request_id
- updated_by
properties:
request_id:
type: string
description: A unique identifier for this campaign update request.
example: email_update_12345
updated_by:
type: string
format: email
description: The email ID of the user updating this campaign.
example: john.doe@example.com
channel:
type: string
enum:
- EMAIL
description: The communication channel (automatically set to EMAIL for this tab).
basic_details:
$ref: '#/components/schemas/EmailBasicDetails'
trigger_condition:
$ref: '#/components/schemas/EmailTriggerCondition_2'
connector:
$ref: '#/components/schemas/Connector_2'
campaign_content:
$ref: '#/components/schemas/EmailCampaignContent_2'
segmentation_details:
$ref: '#/components/schemas/SegmentationDetails_2'
scheduling_details:
$ref: '#/components/schemas/SchedulingDetails_2'
delivery_controls:
$ref: '#/components/schemas/EmailDeliveryControls_2'
conversion_goal_details:
$ref: '#/components/schemas/ConversionGoalDetails_2'
control_group_details:
$ref: '#/components/schemas/ControlGroupDetails_2'
utm_params:
$ref: '#/components/schemas/UTMParams_2'
campaign_audience_limit:
$ref: '#/components/schemas/CampaignAudienceLimit_2'
EmailTriggerCondition_2:
type: object
description: 'Trigger condition details for Email event-triggered campaigns.
**Required** for EVENT_TRIGGERED campaigns.
'
properties:
included_filters:
$ref: '#/components/schemas/FilterGroup_2'
secondary_included_filters:
$ref: '#/components/schemas/FilterGroup_2'
trigger_delay_type:
type: string
enum:
- DELAY
- ASAP
description: 'The type of triggered delay.
When set to DELAY, the following fields are mandatory:
- trigger_delay_value
- trigger_delay_granularity
- trigger_relation
'
trigger_delay_value:
type: integer
description: The numeric value of the triggered delay.
trigger_delay_granularity:
type: string
enum:
- MINUTES
- HOURS
- DAYS
description: The time unit for the trigger delay.
trigger_relation:
type: string
enum:
- BEFORE
- AFTER
description: 'The trigger relation with delay.
**Required** when trigger_delay_type is DELAY.
'
trigger_attr:
type: object
description: The attribute value of the trigger.
responses:
V5InternalError:
description: Unhandled server-side failure.
content:
application/json:
schema:
$ref: '#/components/schemas/V5ErrorEnvelope'
example:
response_id: abc-101
error:
code: INTERNAL_ERROR
message: Internal server error.
details: []
V5Unauthorized:
description: Authentication failure.
content:
application/json:
schema:
$ref: '#/components/schemas/V5ErrorEnvelope'
example:
response_id: abc-101
error:
code: UNAUTHORIZED
message: Invalid or missing credentials.
details: []
V5ValidationError:
description: Request failed schema or component validation.
content:
application/json:
schema:
$ref: '#/components/schemas/V5ErrorEnvelope'
example:
response_id: abc-101
error:
code: VALIDATION_FAILED
message: One or more fields failed validation.
request_id: req-push-001
details:
- target: campaign_delivery_type
message: campaign_delivery_type value is required.
InternalServerError:
description: Internal Server Error - Unexpected system error
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: 500 Internal Server Error
message: Something went wrong. Please contact Moengage team
target: string
details:
- message: 'Expecting value: line 1 column 1 (char 0)'
target: ''
Unauthorized:
description: Authentication Failure - Invalid or missing authentication credentials
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: 401 Authentication error
message: Authentication required
details:
- code: InvalidValue
target: APP_SECRET_KEY
message:
- code: InvalidValue
target: APP_SECRET_KEY
message: Invalid APP_SECRET_KEY is provided.
request_id: ''
NoContent:
description: 'Campaign updated successfully. The server successfully processed the request but is not returning any content.
'
RateLimitExceeded:
description: Rate Limit Breach - Too many requests
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: 429 conflict
message: rate_limit
target: ''
details:
- target: rate_limit
message: Rate limiting breached
request_id: 3UXNNGsqV
BadRequest:
description: Bad Request - Missing or invalid parameters
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
example:
error:
code: 400 Bad Request
message: request_id key is mandatory field
target: request_id
details:
- target: request_id
message: request_id key is mandatory field
request_id: '11'
parameters:
Idempotency-Key-Required:
name: Idempotency-Key
in: header
required: true
description: 'UUID v4. Required on all `POST` and `PATCH` requests except `POST /v5/campaigns/{campaign_id}/validate`. Repeating the same key returns the same response body.
'
schema:
type: string
format: uuid
X-MOE-Scopes:
name: X-MOE-Scopes
in: header
required: false
description: 'Caller''s effective Campaigns permissions. When requests pass through the MoEngage IAM gateway, the gateway injects this header from the permissions tied to your API key, and the service treats it as the source of truth. The service reads only the `campaigns:` entry.
Action vocabulary: `view` (read), `create_manage` (create and edit drafts), and `create_manage_publish` (reserved for future publish support). The hierarchy is `create_manage_publish` ⟹ `create_manage` ⟹ `view`.
Required action by operation:
- `PATCH /v5/campaigns/{campaign_id}` (component edits) requires `create_manage`.
If your effective permissions do not satisfy the required action, the API returns `403`. Other V5 routes are not gated by this header in the current release.
'
schema:
type: string
example: campaigns:create_manage
X-MOE-Request-Id:
name: X-MOE-Request-Id
in: header
required: true
description: 'Correlates with `response_id`. Supply this header or `request_id` in the body; if both are set, they must match.
'
schema:
type: string
MOE-APPKEY:
name: MOE-APPKEY
in: header
required: true
description: 'Your MoEngage Workspace ID (App ID). Find it in the dashboard at **Settings** > **Account** > **APIs** > **Workspace ID**.
'
schema:
type: string
example: '{{workspace_id}}'
MOE-APPKEY_2:
name: MOE-APPKEY
in: header
required: true
description: 'This is the Workspace ID of your MoEngage account that must be passed with the request. You can find it in the MoEngage dashboard at **Settings** > **Account** > **APIs** > **Workspace ID (earlier app id)**.
'
schema:
type: string
example: YOUR_WORKSPACE_ID
securitySchemes:
BasicAuth:
type: http
scheme: basic
description: 'Authentication is done via Basic Auth. This requires a base64-encoded string of your credentials in the format ''username:password''.
- **Username**: Use your MoEngage workspace ID (also known as the App ID). You can find it in the MoEngage dashboard at **Settings** > **Account** > **APIs** > **Workspace ID (earlier app id)**.
- **Password**: On your MoEngage workspace, navigate to **Settings** → **Account** → **API keys** and click **Create new key**. The tab lists every API surface (Data, Segmentation, Push, Email, Campaigns, Templates, and more) and exposes per-resource actions. For Campaigns, ensure the **View**, **Create & Manage**, and **Create, Manage & Publish** checkboxes are selected.
For more information on authentication and getting your credentials, refer to [Getting your credentials](/api/introduction#getting-your-credentials).
Send the value in the `Authorization` header as `Basic` followed by Base64-encoding of `appkey:apisecret` (workspace ID and API key).
'
x-refined-from:
- moengage-campaign-draft-openapi.yml
- moengage-campaigns-openapi.yml