---
title: "Utwórz kampanię (szkic)"
method: POST
path: "/campaigns"
tags: ["Kampanie"]
---

# Utwórz kampanię (szkic)

`POST /campaigns`

## Request

- Base URL: `https://outreachpilot.pl/api/v1`
- URL: `https://outreachpilot.pl/api/v1/campaigns`
- Auth: HTTP bearer

Tworzy kampanię w statusie `szkic` z pierwszymi leadami (do 200; kolejne dodasz przez `POST /campaigns/{id}/leads`): NIC nie jest wysyłane. Uruchomienie to osobne wywołanie `POST /campaigns/{id}/status`. Te same walidacje co w aplikacji (poprawność skrzynki, pomijanie leadów odrzuconych i wypisanych). Szkic nie liczy się do limitu kampanii planu: limit sprawdza dopiero uruchomienie.

**Wymagany zakres klucza:** `campaigns:write`.

## Request body

- object
  - `name` string: Nazwa kampanii. Bez niej powstaje nazwa automatyczna (branża, miasto, data).
  - `lead_ids` string[], required: Leady do kampanii (1-200). Resztę dodaj przez POST /campaigns/{id}/leads (do 1000 na żądanie). Odrzuceni, z bounce'em i wypisani są pomijani.
  - `email_account_id` string: Skrzynka nadawcza. Domyślnie pierwsza podłączona.
  - `steps` object[], required: Sekwencja wiadomości (1-10 kroków).
    - `subject` string, required: Temat (obsługuje zmienne jak {{imie}}, {{firma}}).
    - `body` string, required: Treść (obsługuje zmienne).
    - `delay_days` integer: Dni po poprzednim mailu. Domyślnie: 0 dla pierwszego kroku, 3 dla drugiego, 7 dla kolejnych.
    - `condition` 'brak_odpowiedzi' | 'brak_otwarcia' | 'otwarty_bez_odpowiedzi' | 'zawsze': Kiedy wysłać krok. Domyślnie `brak_odpowiedzi`.
  - `daily_limit` integer: Maks. wiadomości dziennie z tej kampanii.
  - `sending_window_start` string: Początek okna wysyłki (HH:MM, czas Warszawy).
  - `sending_window_end` string: Koniec okna wysyłki (HH:MM).
  - `track_opens` boolean
  - `track_clicks` boolean: Śledzenie kliknięć (przepisywanie linków). Domyślnie wyłączone dla nowych kampanii cold: linki przez adres pośredni zwiększają ryzyko spamu.
  - `workspace_id` string: Klient agencji, do którego należy kampania (ID z `GET /workspaces`). Bez pola kampania dziedziczy klienta po swoich leadach (leady z różnych klientów to błąd 422). Leady i skrzynka muszą być tego klienta.

## Response `201`

Utworzono.

- object
  - `data` CampaignDetail, required
    - `id` string, required
    - `name` string, required
    - `status` 'szkic' | 'aktywna' | 'wstrzymana' | 'zakonczona' | 'blad', required
    - `email_account_id` string, nullable, required
    - `daily_limit` integer, required
    - `sending_window_start` string, required
    - `sending_window_end` string, required
    - `track_opens` boolean, required
    - `track_clicks` boolean, required
    - `total_leads` integer, required
    - `total_sent` integer, required
    - `total_opened` integer, required
    - `total_clicked` integer, required
    - `total_replied` integer, required: Uwaga: licznik zbiorczy; odpowiedzi ludzi bez zwrotów daje GET /replies i /campaigns/{id}/stats.
    - `total_bounced` integer, required
    - `started_at` string, nullable, required: Data i czas ISO 8601 (UTC).
    - `completed_at` string, nullable, required: Data i czas ISO 8601 (UTC).
    - `created_at` string, required: Data i czas ISO 8601 (UTC).
    - `updated_at` string, required: Data i czas ISO 8601 (UTC).
    - `steps` object[], required
      - `step_number` integer, required
      - `delay_days` integer, required: Dni po poprzednim mailu.
      - `condition` 'brak_odpowiedzi' | 'brak_otwarcia' | 'otwarty_bez_odpowiedzi' | 'zawsze', required
      - `subject` string, required
      - `body` string, required

## Other responses

- `400`: Nieprawidłowe żądanie. Kody: `invalid_request`.
- `401`: Brak, zły, odwołany lub wygasły klucz (`missing_api_key`, `invalid_api_key`, `api_key_revoked`, `api_key_expired`, `account_inactive`).
- `403`: Błąd. Kody: `plan_upgrade_required`.
- `422`: Błąd walidacji. Kody: `validation_error`, `invalid_request`.
- `429`: Przekroczono limit żądań (`rate_limit_exceeded`). Zobacz nagłówek `Retry-After`.

---

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