---
title: "Schedule campaign"
method: POST
path: "/campaigns/{campaignId}/schedule"
tags: ["Campaigns"]
---

# Schedule campaign

`POST /campaigns/{campaignId}/schedule`

Schedules a draft or already scheduled campaign for a future send time. Requires a verified sending domain. Campaigns that require safety review are held in waiting_approval and scheduled after admin approval.

## Path parameters

- `campaignId` string, required

## Request body

- object
  - `scheduledAt` string, date-time, required — Future send time.
  - `targetLists` object — Optional targeting object. Omit to reuse saved targeting or default to all active subscribers.
  - `sendTimeOptimization` boolean — Whether to use send-time optimization.
  - `spreadOverHours` number, nullable — Spread delivery over this many hours. When set, spread delivery takes precedence over send-time optimization.
  - `recurringInterval` 'weekly' | 'monthly', nullable — Repeat the campaign on a cadence starting at scheduledAt. The campaign becomes a recurring template - each run is duplicated and sent automatically, re-evaluating audience membership every time. Omit or send null for a one-shot send; scheduling again without it stops the recurrence.

## Response `200`

Campaign scheduled successfully

- object
  - `success` boolean, required
  - `message` string — Scheduling result message. If the campaign requires review, it is held in waiting_approval instead of queueing a send job.
  - `scheduledAt` string, date-time, required
  - `jobId` string, nullable
  - `previewUrl` string, uri, required
  - `campaign` object, required
    - `id` string
    - `name` string
    - `subject` string
    - `status` 'scheduled' | 'waiting_approval'
    - `labels` string[]
    - `scheduledAt` string, date-time
    - `url` string, uri
    - `previewUrl` string, uri

## Other responses

- `400` — Validation error, invalid schedule time, or unverified sending domain
- `401` — Unauthorized
- `404` — Campaign or sender profile not found
- `409` — Campaign is no longer editable

## Changes

- **2026-07-03** `7264ea552df4` — 1 info
  - added the new optional request property `recurringInterval`
- **2026-05-15** `b040bb8c6608` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/sequenzy/apis/sequenzy-api/changes/campaigns/:campaignId/schedule/post.md)

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/d7ea66dede72/schema)
