---
title: "Campaigns"
description: "Send a template to a segment — now or on a schedule — with server-enforced safety gates."
url: https://www.unitpost.com/guides/campaigns
section: Guides
updated: 2026-07-31
---
# Campaigns

## Campaigns

> Send a template to a segment — now or on a schedule — with server-enforced safety gates.

A campaign is a one-to-many send: a template (content) + a segment (audience) + a from-address on a verified domain, sent immediately or scheduled. Campaigns are the end of the contacts → segments → campaigns pipeline.

### Send-readiness gates

Before a campaign sends, every one of these must hold (enforced on the server):

- The from-domain is verified and sending-allowed (re-checked at send, not just at create).
- There's a non-empty subject (from the campaign or the template default).
- The template is a publishable marketing template — not transactional, not an archived/draft template.
- The segment is not archived and has at least one subscribed member.
- Any schedule is within bounds — not in the past, and no further than 90 days out.

When a send is blocked, the validation dialog lists exactly which gate failed and how to fix it. The API returns the same reasons as a structured 409/422.

### Lifecycle & archiving

A campaign moves through draft → scheduled → sending → sent (or canceled/failed). Terminal campaigns can be archived directly; a non-terminal campaign must be canceled first. Archived campaigns are restorable and auto-pruned after ~30 days.

> **Scheduling semantics:** A schedule in the past is treated as "send now"; a schedule beyond 90 days is rejected at both create and send time. These bounds are consistent across the dashboard and the v1 API.

## Related

- [Emails](https://www.unitpost.com/guides/emails): Every individual message sent — delivery status, opens, clicks, and bounces.
- [Activity](https://www.unitpost.com/guides/activity): A chronological audit log of account events across every resource.
- [API Keys](https://www.unitpost.com/guides/api-keys): Authenticate the API with scoped, least-privilege keys.
