---
title: "Create an email campaign"
method: POST
path: "/api/public/email-campaign"
tags: ["email-channel"]
---

# Create an email campaign

`POST /api/public/email-campaign`

Creates a campaign with a list of recipients. If `scheduled_at` is omitted, the campaign is dispatched immediately. The `email_channel_id` must point to a verified channel.

## Headers

- `x-api-key` string, required

## Request body

- CreateEmailCampaignPublicDto
  - `title` string, required
  - `email_template_id` string, uuid, required
  - `email_channel_id` string, uuid, required
  - `scheduled_at` string, date-time
  - `recipients` object[], required
    - `to_emails` object[], required
      - `email` string, email, required
      - `name` string
    - `cc_emails` object[]
      - `email` string, email, required
      - `name` string
    - `bcc_emails` object[]
      - `email` string, email, required
      - `name` string
    - `variables` object
    - `attachments` string[]

## Response `201`

- EmailCampaignResponseDto
  - `id` string, required
  - `title` string, required
  - `status` 'draft' | 'scheduled' | 'sending' | 'sent' | 'failed', required
  - `email_template_id` string, required
  - `email_channel_id` string, required
  - `scheduled_at` string, date-time, nullable, required
  - `sent_at` string, date-time, nullable, required
  - `total_recipients` number, required
  - `created_at` string, date-time, required

## Other responses

- `400` — Invalid request body
- `401` — Unauthorized
- `default`

---

[API](https://skmtc.net/vambe/apis/vambe-ai-api.md) · [All operations](https://skmtc.net/vambe/apis/vambe-ai-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/vambe/vambe-ai-api/revisions/e206709d4be5/schema)
