---
title: "Send a feedback email campaign"
method: POST
path: "/feedback/campaign/send"
tags: ["Feedback Management"]
---

# Send a feedback email campaign

`POST /feedback/campaign/send`

Validates the sender email, validates recipients, and sends a feedback email campaign to the provided recipient list.

Use the [Get campaign requirements](/api-reference/feedback-management/get-campaign-requirements) endpoint
to retrieve the variables each recipient must provide.

The sender email domain must be authorized for your organization and validated for email sending.
If sender validation fails, the entire campaign is rejected and the response includes `sender_validation` details.

If any recipient fails validation, the entire campaign is rejected and **no emails are sent**.
The response body details every validation error.

Set `is_dry_run: true` to validate recipients without sending any emails.

## Request body

- SendCampaignRequest
  - `feedback_form_id` string, required — ID of the feedback form to associate with this campaign
  - `feedback_email_template_id` integer, required — ID of the email template to use for this campaign
  - `sender_email` string, email, required — Email address displayed as the sender. <Warning> The domain of this address must be authorized for your organization and validated for email sending. If this check fails, the campaign is rejected with `status: failed` and the response includes `sender_validation` details. </Warning>
  - `sender_name` string, required — Name displayed as the sender
  - `recipients` FeedbackEmailCampaignRecipient[], required — List of recipients for the campaign. Maximum 1000 recipients per call. For larger lists, split them into batches and call this endpoint multiple times.
    - `email_address` string, email, required — Recipient email address
    - `unsubscribe_url` string, uri, nullable — URL that allows the recipient to unsubscribe from future campaigns. If omitted, Partoo will generate and inject a default unsubscribe link automatically. Opt-out records are stored by Partoo and can be exported from the Partoo interface as an XLSX file (columns: `email_address`, `opt_out_date`). <Warning> It is your responsibility to honour opt-outs and exclude opted-out recipients from future campaign sends. Partoo does not suppress opted-out addresses automatically. </Warning>
    - `variables` object, required — Key-value pairs for template variable substitution
  - `is_dry_run` boolean — When `true`, validates the recipients without actually sending the emails. Use this to verify your recipient list before triggering a real send.

## Response `200`

Campaign accepted or failed validation. Check the `status` field to distinguish the two outcomes.

- SendCampaignResponse
  - `status` 'accepted' | 'failed', required — `accepted` — validation passed; emails have been enqueued (or skipped if `is_dry_run` was `true`). `failed` — sender or recipient validation failed; no emails were sent. Check the error fields for details.
  - `feedback_email_campaign_id` integer, nullable — ID of the created campaign. `null` when `status` is `failed` or `is_dry_run` is `true`
  - `feedback_form_id` string, required — ID of the feedback form associated with this campaign
  - `feedback_email_template_id` integer, required — ID of the email template used for this campaign
  - `recipient_count` integer, required — Total number of recipients provided in the request
  - `duplicate_emails` string[], nullable — Email addresses that appear more than once in the recipients list. Populated when `status` is `failed`
  - `invalid_emails` string[], nullable — Email addresses that are not valid. Populated when `status` is `failed`
  - `missing_variables` array[], nullable — List of `[email_address, missing_variable_names]` pairs identifying recipients who are missing one or more required template variables. Populated when `status` is `failed`
    - unknown[]
      - unknown
  - `empty_variables` array[], nullable — List of `[email_address, empty_variable_names]` pairs identifying recipients who have one or more required template variables set to an empty string. Populated when `status` is `failed`
    - unknown[]
      - unknown
  - `sender_validation` SenderValidation
    - `sender_email` string, email, required — Sender email submitted in the request
    - `domain` string, required — Domain extracted from `sender_email`
    - `status` 'validated' | 'not_validated', required — `validated` — the domain is authorized for the organization and validated for email sending. `not_validated` — the domain is not authorized for the organization or not validated for email sending.

## Other responses

- `401` — You are not authenticated
- `403` — You are not allowed to perform this action
- `404` — Feedback form or email template not found
- `422` — Request body validation error

---

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