---
title: "Validate a campaign"
method: GET
path: "/email/campaigns/{id}/validate"
tags: ["Campaigns"]
---

# Validate a campaign

`GET /email/campaigns/{id}/validate`

## Request

- Base URL: `https://www.unitpost.com/api/v1`
- URL: `https://www.unitpost.com/api/v1/email/campaigns/{id}/validate`
- Auth: HTTP bearer

Run a non-mutating pre-send check and get the full readiness report: how many contacts will receive the campaign, how many are suppressed or excluded, which contacts are missing template variables, and a final `can_send` verdict. Nothing is sent or changed. Fix reported variable gaps with [Update a campaign](#patch-email-campaigns-id) (`variable_fallbacks` / `excluded_contact_ids`), then launch with [Send a campaign](#post-email-campaigns-id-send). Requires the `campaigns:read` capability.

## Response `200`

The validation report.

- object
  - `object` 'campaign_validation', required
  - `total_members` integer, required
  - `sendable` integer, required
  - `suppressed` integer, required
  - `excluded` integer, required
  - `missing_data` object[], required
    - `contact_id` string, required
    - `email` string, required
    - `missing` string[], required
  - `unresolved_variables` string[], required
  - `can_send` boolean, required
  - `warnings` object[], required: Deliverability warnings: advice that never blocks `can_send` (a young sending domain, a send far above your usual volume, no DMARC, recipients mailed in the last few days, credits that may run short). Most severe first, at most three. Show them to whoever is about to send.
    - `code` 'QUOTA_OVERSUBSCRIBED' | 'DOMAIN_YOUNG' | 'VOLUME_JUMP' | 'DMARC_MISSING' | 'RECENTLY_MAILED', required
    - `severity` 'info' | 'warn', required
    - `title` string, required
    - `message` string, required
    - `guide_url` string, required: Guide that explains the practice.
    - `fix_url` string, nullable, required: Dashboard page that opens the fix, when there is one.

## Other responses

- `202`: Accepted: the campaign has a large audience and its recipients are being counted in the background (a `job`). Poll this endpoint; it answers `200` with the report once the job completes.
- `401`: Missing or invalid API key.
- `404`: Campaign not found.

---

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