---
title: "Update Campaign Recipient"
method: PUT
path: "/api/v1/campaigns/{campaign_id}/recipients/{recipient_id}"
tags: ["campaigns"]
---

# Update Campaign Recipient

`PUT /api/v1/campaigns/{campaign_id}/recipients/{recipient_id}`

## Request

- Base URL: `https://api.getanana.com` (the document declares no server; this is the origin it was published from)
- URL: `https://api.getanana.com/api/v1/campaigns/{campaign_id}/recipients/{recipient_id}`
- Auth: none declared

Edit a recipient's draft / email and set a review status.

## Path parameters

- `campaign_id` string, uuid, required
- `recipient_id` string, uuid, required

## Request body

- CampaignRecipientUpdate: Full update of a recipient's editable review fields (PUT semantics). ``status`` may only be set to a review-controllable value (drafted / approved / skipped / pending); delivery statuses are system-driven.
  - `draft_subject` string, nullable
  - `draft_body` string, nullable
  - `email` string, nullable
  - `status` 'pending' | 'drafting' | 'drafted' | 'approved' | 'skipped' | 'sending' | 'sent' | 'delivered' | 'opened' | 'clicked' | 'replied' | 'bounced' | 'failed', required: Per-recipient progress from enrollment through delivery.

## Response `200`

Successful Response

- CampaignRecipientRead: One recipient of a campaign, with its target resolved for display.
  - `id` string, uuid, required
  - `campaign_id` string, uuid, required
  - `kind` 'customer' | 'business', required
  - `customer_profile_id` string, uuid, nullable
  - `business_id` string, uuid, nullable
  - `name` string, nullable
  - `email` string, nullable
  - `status` 'pending' | 'drafting' | 'drafted' | 'approved' | 'skipped' | 'sending' | 'sent' | 'delivered' | 'opened' | 'clicked' | 'replied' | 'bounced' | 'failed', required: Per-recipient progress from enrollment through delivery.
  - `skip_reason` string, nullable
  - `draft_subject` string, nullable
  - `draft_body` string, nullable
  - `grounding_summary` string, nullable
  - `review_flags` string[]
  - `artifact_id` string, uuid, nullable
  - `resend_message_id` string, nullable
  - `error_message` string, nullable
  - `created_at` string, date-time, required
  - `updated_at` string, date-time, required

## Other responses

- `404`: Campaign not found
- `422`: Validation Error

## Changes

> 55 revisions in range; 1 not diffed.

- **2026-09-03** `d65b8fefae34`: 2 info
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status

[Operation history](https://skmtc.dev/getanana/apis/cleon-api/changes/api/v1/campaigns/:campaign_id/recipients/:recipient_id/put.md)

---

[API](https://skmtc.dev/getanana/apis/cleon-api.md) · [All operations](https://skmtc.dev/getanana/apis/cleon-api/llms.txt) · [OpenAPI document](https://skmtc.dev/getanana/apis/cleon-api/revisions/4d9d38769a75?raw)
