Skip to main content
PATCH
Campaign publishing is not yet available in V5. This endpoint only supports updating draft components. To publish campaigns, use the V1 API at PATCH /core-services/v1/campaigns/{campaign_id} in the interim. Publishing via V5 will be available in a future release.
Send a PATCH request without a status key in the body. The API merges each submitted component into the existing draft, then validates the full merged state (DRAFT_PATCH). After all individual components pass validation, cross-component checks run on the combined result. Only the fields you include in the request body are updated. Fields you omit retain their current values. For the full field reference per delivery type, see the Create Campaign API.

Update restrictions by campaign state

For Event-triggered campaigns, updated content is cached and takes up to 30 minutes to take effect.

Rate Limits

Notes
  • Breaching the limits will reject the request.
  • Per-hour and per-day limits use a rolling window of the last 1 hour and last 24 hours respectively.

Authorizations

Authorization
string
header
required

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 SettingsAccountAPI 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.

Send the value in the Authorization header as Basic followed by Base64-encoding of appkey:apisecret (workspace ID and API key).

Headers

MOE-APPKEY
string
required

Your MoEngage Workspace ID (App ID). Find it in the dashboard at Settings > Account > APIs > Workspace ID.

X-MOE-Request-Id
string
required

Correlates with response_id. Supply this header or request_id in the body; if both are set, they must match.

Idempotency-Key
string<uuid>
required

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.

X-MOE-Scopes
string

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_publishcreate_manageview.

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.

Path Parameters

campaign_id
string
required

The unique ID of the campaign to update.

You can fetch the campaign ID using the Get Campaign Details API by filtering with campaign name, channel, or other criteria.

Body

application/json

In this payload, you can include the fields you want to update.

Notes: - Pass only the fields you want to update. You don't need to send the complete payload.

  • If updating a field within an object, you must pass the complete object.
  • If updating a nested field, you must pass the complete parent object. For example, to update the title of a Push notification, pass the complete campaign_content object.
  • Use the tabs below to select your campaign type. The schema will adapt based on the selected channel.

Used for component-level edits on a campaign draft.

request_id
string

A unique identifier for this update request.

Example:

"{{request_id}}"

channel
enum<string>

Must be PUSH for a Push update.

Available options:
PUSH
campaign_delivery_type
enum<string>

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.

Available options:
ONE_TIME,
PERIODIC,
EVENT_TRIGGERED,
BUSINESS_EVENT_TRIGGERED,
DEVICE_TRIGGERED,
LOCATION_TRIGGERED,
BROADCAST_LIVE_ACTIVITY
updated_by
string<email>

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
object

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.

trigger_condition
object

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.

campaign_content
object

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, iOS push content, or Web push content.

segmentation_details
object

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.

scheduling_details
object

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.

delivery_controls
object

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.

advanced
object

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.

conversion_goal_details
object

Configuration for tracking campaign conversion goals.

For runnable single-goal and multi-goal examples, refer to Conversion goal tracking.

control_group_details
object

Configuration for control groups.

For runnable campaign-control-group and global-control-group examples, refer to Control groups.

utm_params
object

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.

campaign_audience_limit
object

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.

Response

Draft updated successfully.

Note: V1 returned 204 No Content for successful updates. V5 returns 200 OK with a response body. Update any integration that checks for 204 to expect 200 instead.

response_id
string
type
string
Example:

"campaign"

data
object

Returned after a successful component PATCH.