---
title: "Draft an outbound calling campaign (campaigns scope required). Never places calls."
method: POST
path: "/api/v1/campaigns"
---

# Draft an outbound calling campaign (campaigns scope required). Never places calls.

`POST /api/v1/campaigns`

## Request

- Base URL: `https://salestick-backend-647994203646.europe-central2.run.app`
- URL: `https://salestick-backend-647994203646.europe-central2.run.app/api/v1/campaigns`
- Auth: one of:
  - HTTP bearer
  - API key in header `x-api-key`

Creates a DISABLED campaign draft that a human team manager must review and launch in the Canarics dashboard (Outbound tab); no calls are placed by this endpoint. The brief becomes the calling agent's only context, so ground it in what the company actually wants from these calls. Audience is either an existing lead pool (poolId) or up to 200 numbers the company already has a lawful basis to call. Once launched by the manager, calls run through the normal outbound loop: daily limit, local calling window, retries, spacing.

## Request body

- object
  - `name` string, required: Short campaign name the manager will recognize in the dashboard
  - `brief` string, required: Why these people are being called and what a good call achieves, in plain words grounded in the company's own request
  - `agentId` string: Which voice agent places the calls, needed only when the team has several
  - `poolId` string: Existing lead pool to call from. Pass either this or numbers, not both
  - `numbers` object[]: Ad-hoc audience. Only numbers the company may lawfully call
    - `number` string, required: E.164
    - `name` string
    - `note` string: Short per-person context, e.g. what they asked about
  - `language` string: Opening language, defaults to the agent's language
  - `timezone` string: IANA timezone for the calling window, default Europe/Riga
  - `callsPerDay` integer: Daily call limit once launched, default 20
  - `allowedHours` object: Local calling window, default 9-20
    - `startHour` integer
    - `endHour` integer

## Response `201`

Draft created, waiting for a manager to launch

- object
  - `campaignId` string
  - `status` 'draft'
  - `poolId` string
  - `audience` object
    - `added` integer
    - `poolRemaining` integer
    - `rejected` object[]
  - `callsPerDay` integer
  - `reviewUrl` string
  - `note` string

## Other responses

- `400`: Missing name/brief, no valid audience, or invalid settings
- `403`: Key lacks the campaigns scope, team not on the outbound plan, or pool dial policy blocks calling
- `404`: Pool not found on this team
- `429`: Daily draft limit reached (10 per team)

---

[API](https://skmtc.dev/canarics/apis/canarics-api-for-ai-agents.md) · [All operations](https://skmtc.dev/canarics/apis/canarics-api-for-ai-agents/llms.txt) · [OpenAPI document](https://skmtc.dev/canarics/apis/canarics-api-for-ai-agents/revisions/e89711c2f1ba?raw)
