---
title: "Update campaign"
method: PATCH
path: "/v3/user-api/mail-campaigns/{id}"
tags: ["Campaigns"]
---

# Update campaign

`PATCH /v3/user-api/mail-campaigns/{id}`

## Request

- Base URL: `https://api.nureply.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.nureply.com/v3/user-api/mail-campaigns/{id}`
- Auth: none declared. Required headers: `x-personal-api-key`

Partially update campaign configuration, settings, sequences, and state. Supports all updates including: campaign settings, sequences/variations, pause/resume (isPaused), archive (isArchived), completion (isCompleted), and email account membership (userEmailAccounts). Note: leadList field is immutable and cannot be updated.

## Path parameters

- `id` string, required

## Headers

- `x-personal-api-key` string, required

## Request body

- UpdateMailcampaignDto
  - `name` string: Campaign name
  - `intervalMin` number: Minimum interval between emails in minutes
  - `intervalRandomUpTo` number: Random interval to add (0 to this value in minutes)
  - `sequences` SequenceDto[]: Email sequences for the campaign
    - `name` string, required: Name of the email sequence step
    - `variations` union[], required: Array of sequence variation IDs or variation objects to create
      - union
        - string: MongoDB ObjectId of existing variation
        - object: New variation to create
    - `waitDaysBeforeNextStep` number, required: Days to wait before sending next sequence step
    - `selectionStrategy` 'random' | 'roundRobin' | 'weighted': Strategy for selecting variations
  - `stopSendingAfterReply` boolean: Stop sending emails after receiving a reply
  - `stopSendingFollowUpAfterReply` boolean: Stop sending follow-up emails after receiving a reply
  - `stopSendingAfterClick` boolean: Stop sending emails after a link is clicked
  - `dailySendingLimit` number: Maximum emails to send per day
  - `isPaused` boolean: Whether the campaign is paused
  - `isCompleted` boolean: Whether the campaign is completed
  - `isDeleted` boolean: Whether the campaign is deleted
  - `isArchived` boolean: Whether the campaign is archived
  - `openTrackingEnabled` boolean: Enable email open tracking
  - `clickTrackingEnabled` boolean: Enable link click tracking
  - `botFiltering` boolean: Enable bot filtering using global IP blocklist
  - `unsubscribeEnabled` boolean: Enable unsubscribe functionality
  - `timeZone` string: Campaign timezone (IANA timezone identifier)
  - `allowedDays` string[]: Days when emails can be sent
  - `hourStart` string: Start hour for sending emails (HH:mm format)
  - `hourEnd` string: End hour for sending emails (HH:mm format)
  - `cc` string[]: CC email addresses
  - `bcc` string[]: BCC email addresses
  - `followUpPercentage` number: Percentage of leads to follow up with (0-100)
  - `winningMetric` 'replyRate' | 'clickRate' | 'openRate' | '': Metric to optimize for in A/B testing
  - `tags` string[]: Campaign tags for organization
  - `bounceThreshold` number, nullable: Bounce rate threshold to pause campaign (null for no threshold)
  - `subsequences` array[]: Draft subsequences to create alongside the campaign
    - unknown[]
      - unknown
  - `customESPRules` CustomESPRuleDto[]: Rules restricting which sender ESPs may mail which recipient ESPs
  - `emailDeliveryOptimization` EmailDeliveryOptimizationDto
  - `userEmailAccounts` string[]: Array of user email account IDs to send from. Can be empty if campaign has tags.

## Response `200`

- UpdateCampaignResponseDto
  - `message` string, required
  - `data` CampaignDto, required
    - `_id` string, required
    - `name` string, required
    - `intervalMin` number, required
    - `intervalRandomUpTo` number, required
    - `sequences` SequenceDto[], required
      - `name` string, required: Name of the email sequence step
      - `variations` union[], required: Array of sequence variation IDs or variation objects to create
        - union
          - string: MongoDB ObjectId of existing variation
          - object: New variation to create
      - `waitDaysBeforeNextStep` number, required: Days to wait before sending next sequence step
      - `selectionStrategy` 'random' | 'roundRobin' | 'weighted': Strategy for selecting variations
    - `userEmailAccounts` string[], required
    - `tags` string[], required
    - `customESPRules` string[], required
    - `stopSendingAfterReply` boolean, required
    - `stopSendingFollowUpAfterReply` boolean, required
    - `stopSendingAfterClick` boolean, required
    - `dailySendingLimit` number, required
    - `dailySendingLimitRemaining` number, required
    - `isPaused` boolean, required
    - `isCompleted` boolean, required
    - `isDeleted` boolean, required
    - `isArchived` boolean, required
    - `leadList` string, required
    - `openTrackingEnabled` boolean, required
    - `clickTrackingEnabled` boolean, required
    - `unsubscribeEnabled` boolean, required
    - `emailDeliveryOptimization` EmailDeliveryOptimizationDto, required
    - `user` string, required
    - `organization` string, required
    - `timeZone` string, required
    - `allowedDays` string[], required
    - `hourStart` string, required
    - `hourEnd` string, required
    - `createdAt` string, required
    - `updatedAt` string, required
    - `id` string, required

## Other responses

- `400`
- `401`
- `404`
- `422`: Invalid field

---

[API](https://skmtc.dev/nureply/apis/nureply-api.md) - [All operations](https://skmtc.dev/nureply/apis/nureply-api/llms.txt) - [OpenAPI document](https://skmtc.dev/nureply/apis/nureply-api/revisions/a754b8b5eb0a?raw)
