---
title: "Trigger an API campaign send"
method: POST
path: "/campaigns/{campaignId}/trigger"
---

# Trigger an API campaign send

`POST /campaigns/{campaignId}/trigger`

Start an API-triggered campaign: send to the given recipients.

## Path parameters

- `campaignId` string, required

## Request body

- StartCampaignRequest — Request body for triggering an API campaign send.
  - `properties` object — Shared personalization properties applied to all recipients. Keys must match the variable names shown in the message editor. Per-recipient `properties` take precedence when a key appears in both.
  - `draft` boolean — When `true`, sends the campaign even if it has not been activated. Intended for test sends against draft campaigns only.
  - `recipients` CampaignRecipient[], required — List of recipients to send to. Each entry must include either a `handle` (delivery address) or an `id` (Personalization API based profile ID).
    - union — A single send target. Provide either `handle` (inline delivery address) or `id` (Personalization API profile ID), but not both.
      - HandleCampaignRecipient — A recipient identified by their delivery address (email or phone number). Personalization data is provided inline in the request.
        - `handle` string — Delivery address for this recipient. Must be a valid email address for email campaigns, or an E.164-formatted phone number for SMS campaigns.
        - `properties` object — Per-recipient personalization properties. Keys must match the variable names shown in the message editor. These are merged with the top-level `properties` and take precedence when a key appears in both.
      - ProfileCampaignRecipient — A recipient identified by their Personalization API Cached profile ID.
        - `id` string — Primary key of the recipient as configured on the Personalization API sync. The delivery address is resolved from the cache at send time.
        - `properties` object — Per-recipient personalization overrides. Merged with the top-level `properties` and the cached profile; these values take precedence when a key appears in multiple sources.

## Response `200`

Ok

- union
  - StartCampaignResponse — Response body for a campaign trigger request. Results are returned in the same order as the input `recipients` array.
    - `results` CampaignSendResult[], required — Per-recipient outcomes. Accepted recipients are queued for delivery; rejected recipients were not sent.
      - `handle` string — Delivery address of the recipient, present for inline (`handle`) recipients.
      - `id` string — Primary key of the recipient as configured on the Personalization API sync, present for profile (`id`) recipients.
      - `status` 'accepted' | 'rejected', required — Whether this recipient was accepted for delivery or rejected at validation time.
      - `sendId` string — Unique identifier for this send, present when `status` is `"accepted"`. Use with `GET /campaigns/{id}/sends/{sendId}` to poll for delivery status.
      - `reason` 'invalid_handle' | 'missing_variables' | 'invalid_id' | 'missing_handle_or_id' — Reason for rejection, present when `status` is `"rejected"`. - `invalid_handle` — the delivery address is not a valid email or phone number - `missing_variables` — one or more required template variables are absent - `invalid_id` — the profile ID is empty or missing - `missing_handle_or_id` — the recipient has neither `handle` nor `id`
      - `missingVariables` string[] — Names of the required template variables absent from the recipient's data, present when `reason` is `"missing_variables"`.
  - TriggerErrorResponse — Body returned on a request-level failure (400/404/409/429) so the caller knows why the request was rejected.
    - `error` string, required — Human-readable description of why the request failed.

## Other responses

- `400` — Bad Request
- `401` — Unauthorized
- `404` — Campaign not found
- `422` — Validation Failed
- `429` — Rate limited
- `500` — Something went wrong

---

[API](https://skmtc.net/hightouch/apis/hightouch-api.md) · [All operations](https://skmtc.net/hightouch/apis/hightouch-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/hightouch/hightouch-api/revisions/24a8012aa8c8/schema)
