---
title: "Create Campaign"
method: POST
path: "/api/v3/admin/campaigns/"
tags: ["admin", "campaigns"]
---

# Create Campaign

`POST /api/v3/admin/campaigns/`

## Request

- Base URL: `https://api.endless.health` (the document declares no server; this is the origin it was published from)
- URL: `https://api.endless.health/api/v3/admin/campaigns/`
- Auth: none declared

Create a campaign in one call: creates the underlying Organization row
(organization_type=CAMPAIGN) and its CampaignDetails extension, then
commits both together.

## Request body

- CampaignCreateRequestSchema
  - `name` string, required: Campaign name
  - `identifier` string, required: Campaign identifier in UPPER_SNAKE_CASE format. Unique across all organizations.
  - `parent_id` integer, required: Id of the sponsoring organization (must not itself be a CAMPAIGN).
  - `configs` object, nullable: Organization configurations for this campaign (validated against OrganizationConfigSchema when the Organization row is created)
  - `api_key` string, nullable: API key for this campaign (auto-generated if not provided)
  - `active` boolean: Whether the campaign is active on creation. Defaults to inactive.
  - `status` 'DRAFT' | 'ACTIVE' | 'PAUSED' | 'COMPLETED' | 'ARCHIVED'
  - `start_date` string, date, nullable
  - `end_date` string, date, nullable
  - `goal_screened` integer, nullable
  - `description` string, nullable

## Response `201`

Successful Response

- CampaignResponseSchema
  - `id` integer, required
  - `name` string, required
  - `identifier` string, required
  - `parent_id` integer, nullable, required
  - `active` boolean, required
  - `api_key` string, nullable, required
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required
  - `campaign` CampaignDetailsResponseSchema, required
    - `status` 'DRAFT' | 'ACTIVE' | 'PAUSED' | 'COMPLETED' | 'ARCHIVED', required
    - `start_date` string, date, nullable, required
    - `end_date` string, date, nullable, required
    - `goal_screened` integer, nullable, required
    - `description` string, nullable, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required

## Other responses

- `404`: Not found
- `422`: Validation Error

---

[API](https://skmtc.dev/endless/apis/eh-core-v3-api-prod.md) - [All operations](https://skmtc.dev/endless/apis/eh-core-v3-api-prod/llms.txt) - [OpenAPI document](https://skmtc.dev/endless/apis/eh-core-v3-api-prod/revisions/9046a1eb2d0c?raw)
