---
title: "Create a campaign"
method: POST
path: "/campaigns"
tags: ["Campaigns"]
---

# Create a campaign

`POST /campaigns`

## Request

- Base URL: `https://api.emailchaser.com/r`
- URL: `https://api.emailchaser.com/r/campaigns`
- Auth: HTTP bearer

Creates a campaign in the API key's workspace. The campaign starts in draft status and is placed in the workspace's default folder. Before it can be launched with POST /campaigns/{id}/resume, it needs four things: a sequence (PUT /campaigns/{id}/sequence), sending days (PUT /campaigns/{id}/schedule; there is no default), at least one email account (POST /campaigns/{id}/sender-emails), and at least one lead (POST /leads with campaignId). Campaigns with flow api can launch without leads.

## Request body

- ModelsCreateCampaignRequest
  - `allowNonBusinessEmails` boolean
  - `dailyLimit` integer: DailyLimit caps the total emails (initial + follow-ups) this campaign may schedule per calendar day in the campaign timezone. Omit for no campaign-level cap; per-inbox limits still apply either way.
  - `emoji` string
  - `flow` 'multiple_leads_scheduled' | 'api': Flow defaults to multiple_leads_scheduled, which is what the app creates, so a campaign made through the API behaves identically to one made in the UI. The api flow skips lead validation and the processing-leads guard at launch; pass it only if you want that.
  - `ignoreOutOfOfficeReplies` boolean
  - `isEnabledCatchallValidated` boolean
  - `isEnabledEmailVerifier` boolean
  - `isEnabledIgnoreHardBouncedLeads` boolean
  - `isEnabledIgnoreLeadsWhoAlreadyResponded` boolean
  - `isEnabledLlm` boolean: Settings - all optional, mirroring UpdateCampaignRequest
  - `isEnabledSkipLeadIfAlreadyExists` boolean
  - `isEnabledStopFollowUpsForSameCompany` boolean
  - `isEnabledStopFollowUpsOnReply` boolean
  - `maximumSendingLimitPerSenderEmail` integer
  - `maximumSendingLimitPerSenderEmailVariation` integer
  - `maximumTimeBetweenEmails` integer
  - `minimumHealthScore` integer: MinimumHealthScore, 1-100, is the lowest email account health score (see healthScore on the sender emails) that may send in this campaign. An account below it, or with no score yet, sends nothing here, first emails and follow-ups alike, until its score is back at or above it; its conversations wait for it and never move to another account. Omit or send 0 for no minimum.
  - `minimumTimeBetweenEmails` integer
  - `name` string, required
  - `timezone` string

## Response `201`

Campaign created successfully

- ModelsCreateCampaignResponse
  - `campaign` ModelsCreatedCampaign
    - `createdAt` string
    - `emoji` string
    - `flow` string
    - `id` integer
    - `name` string
    - `status` string
    - `timezone` string
    - `updatedAt` string
  - `message` string

## Other responses

- `400`: Invalid request body
- `401`: Unauthorized - invalid or missing API key
- `500`: Failed to create campaign

---

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