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

# Create a campaign

`POST /api/v1/campaigns`

## Request

- Base URL: `https://app.argorant.com`
- URL: `https://app.argorant.com/api/v1/campaigns`
- Auth: HTTP bearer

Creates a draft. Nothing sends until you launch. Takes every setting of the update call. Defaults: 100 emails a day, 08:00 to 17:00 America/New_York, weekdays only, a pause of 60 to 120 minutes between two emails from one mailbox, plain text, no unsubscribe line.

| Cost | What it does | Key scopes |
| --- | --- | --- |
| Free | Writes | `argorant:manage_lists` |

## Headers

- `Idempotency-Key` string
- `X-Request-Id` string

## Request body

- object
  - `name` string, required: Campaign name.
  - `daily_limit` integer: Emails a day for the whole campaign (default 100).
  - `per_mailbox_daily_limit` integer: Most emails a day from one mailbox.
  - `max_active_mailboxes` integer: Rotate between at most this many mailboxes.
  - `timezone` string: Time zone name, for example Europe/Berlin (default America/New_York).
  - `timezone_mode` 'fixed' | 'lead': fixed: the campaign's time zone. lead: each person's local time.
  - `window_start` string: Sending starts, HH:MM (default 08:00).
  - `window_end` string: Sending stops, HH:MM (default 17:00).
  - `skip_weekends` boolean: No emails on Saturday and Sunday (default true).
  - `gap_minutes_min` integer: Shortest pause between two emails from one mailbox (default 60).
  - `gap_minutes_max` integer: Longest pause (default 120).
  - `include_unsubscribe` boolean: Add an opt-out line at the bottom of every email (default false).
  - `stop_on_reply` boolean: A reply ends that person's emails (default true).
  - `planned_start_date` string, date: YYYY-MM-DD. A launch before this date waits.
  - `tags` string[]: Your own tags.
  - `auto_pause` boolean: Pause by itself when bounces are high or the mailboxes are offline.
  - `auto_pause_bounce_rate_pct` number: Bounce share in percent that pauses, 1 to 50 (default 10).
  - `accepted_email_grades` string[]: Which email results may join: valid always; add catch_all, unknown or risky to accept them.

## Response `200`

OK

- object
  - `campaign` object
    - `id` string
    - `name` string
    - `status` string
    - `lead_count` integer
    - `queued_count` integer
    - `sent_count` integer
    - `replied_count` integer
    - `positive_reply_count` integer
    - `bounced_count` integer
    - `step_count` integer
    - `inbox_count` integer
    - `daily_limit` integer
    - `default_timezone` string
    - `created_at` string
    - `updated_at` string
    - `url` string
  - `next` string

## Other responses

- `400`: 400 Bad request. `invalid_request` when a time is not HH:MM, or plain_text is false.
- `401`: 401 Unauthorized. `unauthorized` when the API key is missing, wrong or revoked.
- `403`: 403 Forbidden. `scope_missing` when the key lacks argorant:manage_lists.
- `409`: 409 Conflict. `idempotency_conflict` when the Idempotency-Key was used with another body.
- `422`: 422 Validation error. `validation_error` when a field has the wrong type or is missing.
- `429`: 429 Too many requests. `rate_limited` when too many requests this minute.

---

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