# Draft campaigns from your assistant

Build and edit a campaign draft, read one person's emails, skip people and watch sends from the API or an assistant. Nothing on this page sends email.

An assistant or a script can do everything to a campaign draft that you can do on the campaign page. Nothing on this page sends email. To approve, start or resume a campaign from an assistant, see [Let your assistant send](/agent/send). It needs a key you allowed to send, a card you saw and a 10-minute wait you can undo.

A **draft** is a campaign that hasn't been started. Only a draft changes from the API or an assistant. A campaign that has started is changed in the app, and the answer says so.

## Build a draft in one call

Ask your assistant to build a campaign. It picks the people, makes the draft, sets the days and hours emails may go, and returns the first emails for up to five people. The email writer runs for those five, which costs us about 0.2 cents a person and costs you nothing. It uses no email lookups and no searches. The assistant shows you a card with that before it runs.

Over the API, `POST /v1/finder/campaigns/start` makes the draft, and the routes below change it.

## What you can change

| Job | API | Assistant tool |
|---|---|---|
| Start, rename, archive, copy | `/campaigns/start`, `/campaigns/{id}/rename`, `/archive`, `/unarchive`, `/duplicate` | `recruit_build_campaign`, `recruit_manage_campaign` |
| Templates | `/campaign-templates`, `/campaigns/{id}/save-template`, `/campaign-templates/{id}/create` | `recruit_campaign_templates`, `recruit_start_from_template` |
| Who is in it | `/campaigns/{id}/audience`, `/audience/people`, `/audience/refresh` | `recruit_campaign_audience` |
| Emails and follow-ups | `/campaigns/{id}/wording` | `recruit_set_campaign_emails` |
| Which wordings, your own line, how many to review | `/campaigns/{id}/sequence` | `recruit_save_sequence` |
| See unsaved copy filled in for real people | `/campaigns/{id}/wording/preview` | `recruit_preview_campaign_wording` |
| Split test of email 1 | `/campaigns/{id}/split`, `/split/clear` | `recruit_set_campaign_split` |
| Send window and mailboxes | `/campaigns/{id}/schedule`, `/mailboxes` | `recruit_set_campaign_window` |
| This campaign's offer | `/campaigns/{id}/offer` | `recruit_set_campaign_offer` |
| One person's email | `/campaigns/{id}/leads/{member_id}`, `/emails/{step}`, `/reset`, `/regenerate` | `recruit_campaign_people`, `recruit_edit_email`, `recruit_regenerate_email` |
| Skip, bring back, take a yes back | `/leads/{member_id}/skip`, `/unskip`, `/campaigns/{id}/pull-back` | `recruit_skip_people` |
| Exclusion rules and writer progress | `/campaigns/{id}/exclusions`, `/drafts` | `recruit_campaign_setup` |
| Watch sends | `/campaigns/{id}/sends` | `recruit_watch_campaign` |
| A message by hand | `/prospects/{id}/hand-send` | `recruit_write_by_hand` |
| One person's draft, outside a campaign | `/prospects/{id}/sequence-draft`, `/sequence-draft/regenerate` | `recruit_save_draft`, `recruit_regenerate_draft_step` |

## Writing an email again

"Write again" runs the email writer and replaces your edits to that email. The person goes back to waiting for a yes. Your own edits are kept until you do this, and **reset** puts an email back to what the writer first wrote.

## Skipping people

Skipping only ever reduces what sends. Skipping someone who is already enrolled stops their emails for good, so the assistant asks first. Bringing someone back works only for people who weren't approved before the skip.

## A message for a person with no email

For someone with no usable email, you get a message to copy and send yourself, through their contact form or a direct message. RecruitAffiliates.ai never sends it.

## A preview before you save

The preview fills in copy you haven't saved for up to 20 real people. You see a chip like `{{name}}` filled in, and any that's missing for someone, before you save. It uses our wordings rather than the AI writer, so it costs nothing and saves nothing.

## One person's draft

The one-person composer works outside a campaign. "Write again" gives you one email again from that person's facts, with the same facts and never a new number. It saves nothing. Saving keeps the emails as a draft with the mailbox it would go from. A draft has no approval, so nothing can start it: you read it and start it in the app. From an assistant, "write again" uses our wordings, not the AI writer.

## The weekly batch

`/batch`, `/batch/settings` and the card routes read and edit the week's batch. Each person still waits for your yes in the app. A setting above 0 for email finds lets the weekly run spend that many lookups on its own, one credit each.

The batch belongs to a campaign that is already running, so its three card edits don't need a draft. Each one only changes a card that is still waiting or takes a send away:

| Job | API | Assistant tool |
|---|---|---|
| Change a card's first email | `/campaigns/{id}/batch/cards/{member_id}/email` | `recruit_edit_batch_card` |
| Take yes answers back | `/campaigns/{id}/batch/pull-back` | `recruit_pull_back_batch` |
| Bring a skipped card back | `/campaigns/{id}/batch/cards/{member_id}/unskip` | `recruit_unskip_batch_card` |

A card that already has your yes can't be edited until you take the yes back. A card skipped after your yes can only come back in the app, because bringing it back would restart its emails.

The assistant tools on this page work with a key connection, such as Claude Code or a script. They aren't part of the set Claude.ai and ChatGPT get when you press Connect and Allow.
