> ## Documentation Index
> Fetch the complete documentation index at: https://docs.senderz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Campaigns

> One-off sends to a segment, with best-time and throttled scheduling, and an optional approval workflow.

A **campaign** is a one-time send to an audience on a single channel. Newsletters, promotions, announcements — anything you send once.

## Building a campaign

<Steps>
  <Step title="Channel & audience">
    Choose email, SMS or push, then a segment (or everyone subscribed).
    Suppressed and unsubscribed contacts are removed automatically.
  </Step>

  <Step title="Content">
    Start from a gallery template, one of your own, or build fresh. Email
    opens the block builder; SMS opens the composer with a sender-ID picker.
  </Step>

  <Step title="Schedule">
    Send now, schedule for later, or use best-time / throttled (below).
  </Step>

  <Step title="Review">
    The review step shows the frozen audience size and a send-test. Confirm
    to send.
  </Step>
</Steps>

## Scheduling modes

<CardGroup cols={2}>
  <Card title="Immediate" icon="bolt">
    Fan out now (or at the scheduled time).
  </Card>

  <Card title="Best time" icon="clock">
    Per-recipient send-time optimisation. Each contact gets their most-engaged
    local hour from the last 90 days, within your bounds.
  </Card>

  <Card title="Throttled rollout" icon="gauge">
    Split the audience into percentage batches (must sum to 100%, ≤12
    batches) with per-batch delays.
  </Card>
</CardGroup>

<Info>
  Best-time and throttled only change *when* the send job runs. Every gate —
  suppression, consent, frequency caps, quiet hours, Shabbat, the SMS wallet —
  still runs at fire time.
</Info>

## Durable scheduling

A scheduled campaign persists its intent in the database, not just in the job queue. A reconciler re-creates any missing job every minute, so a queue restart can't silently drop a send.

## Approval workflow (optional)

Workspaces can require campaigns to pass owner/admin sign-off before sending. It's a plan-gated, opt-in toggle in **Settings → Workflow**.

<Steps>
  <Step title="Submit">
    A non-approver submits the campaign for approval with a note.
  </Step>

  <Step title="Decide">
    An owner or admin approves, rejects, or requests changes. The submitter
    can't self-approve.
  </Step>

  <Step title="Guard">
    An unapproved campaign can't reach the send path. Editing content after
    approval revokes it — you can't get sign-off then swap the message.
  </Step>
</Steps>

The approval queue lives at **Approvals**, with in-app and email notifications on every decision.

## Analytics

Every campaign has a report — sends, delivered, opens, clicks, bounces, unsubscribes — at `campaigns/<id>`. Money values are in agorot internally and shown in shekels. Deferred analytics tabs (MTA, cost, funnel, cohort) show an "Available in Pro" hint rather than fabricated numbers.

## Sending via the API

Campaigns are a UI construct. For programmatic sends, use transactional messages ([`POST /public/messages/*`](/en/api-reference/messages)) or trigger flows via [event ingest](/en/api-reference/events).
