---
name: "outreach_save_campaign"
area: "outreach"
title: "Save an outreach campaign"
price: "free"
method: "POST"
url: "https://api.conecto.chat/v1/tools/outreach_save_campaign"
mcp_server: "https://api.conecto.chat/mcp/outreach"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/outreach/outreach_save_campaign"
---

# Save an outreach campaign (`outreach_save_campaign`)

Create or change an outreach campaign: its mailboxes, the emails you write, the audience, a first line per person and when it sends.

Create an outreach campaign, or change one (pass campaign_id): its name, the mailboxes it sends from (they share the load, each within its own daily limit), the emails (a first email and up to four follow-ups, each with delay_days), the audience, a first line for each person, the sending days and hours in a time zone, and its own daily limit. The audience is one of: a prospect search's people with a working email (prospect_search_id), a CRM segment, or everyone with a tag; people who unsubscribed, bounced, said no, replied before or are in another campaign are left out, and the reply says who. You write every email; Conecto writes nothing. Placeholders: {first_name} (the person's first name), {name} (the person's full name), {company} (their company), {first_line} (the first line you wrote for them in first_lines), {sender_name} (the name of the mailbox that sends it), {sender_first_name} (that name's first word). Every step passes Conecto's writing check before a campaign can start, and a refusal names each fix: no em dashes; no stock openers ("I hope this email finds you well", "I'm reaching out") or closers ("Best regards", "Looking forward to hearing from you"); no "not X, but Y" contrasts or slogans; no hype or filler words ("seamless", "game-changer", "I'd love to"); at most 120 words an email and 60 characters a subject; one link and one ask at most; no "Re:" on a first email; no unsubscribe line of your own (Conecto adds one); and every placeholder filled for every person. The reply has the writing check's fixes; show the person outreach_preview, then start it with outreach_start. While it is a draft everything can change; once it started, only its name, mailboxes, schedule and daily limit, while it is paused.

Price: Free. A call that fails costs nothing.

## Use it when

When the person wants to write to a list of people, after the mailbox is connected.

- For one email to one person from a Conecto inbox, use [email_send](https://conecto.chat/tools/email/email_send.md).
- For finding the people to write to, use [prospects_prepare](https://conecto.chat/tools/prospects/prospects_prepare.md).

## Say this to your agent

> Write to the hotels we tagged about renting our guest bikes, two follow-ups, Tuesday to Thursday mornings.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `campaign_id` | string | no | The campaign_id outreach_save_campaign answered with. Exactly 36 characters. |  |  |
| `name` | string | no | 1 to 160 characters. |  |  |
| `mailbox_ids` | array of integers | no | Mailboxes from outreach_mailboxes, in the order they take turns. 1 to 50 items. |  |  |
| `steps` | array of objects | no | 1 to 5 items. |  |  |
| `steps[].subject` | string | no | One line. A follow-up without one goes as "Re:" the first email's subject, in the same thread. Up to 200 characters. |  |  |
| `steps[].text` | string | yes, in each item of `steps` | Plain text. Conecto adds the unsubscribe line at the end. 1 to 5,000 characters. |  |  |
| `steps[].delay_days` | integer | no | A follow-up: days after the step before it, when nobody replied (3 if left out). 1 to 60. |  |  |
| `audience` | object | no | One of tag, segment or prospect_search_id. |  |  |
| `audience.tag` | string | no | 1 to 60 characters. |  |  |
| `audience.segment` | string | no | A saved contact segment, by name or id. 1 to 80 characters. |  |  |
| `audience.prospect_search_id` | string | no | Exactly 36 characters. |  |  |
| `first_lines` | object | no | A first line you wrote for each person, by their email: {first_line} in an email. |  |  |
| `schedule` | object | no | When emails go: Monday to Friday, 9 to 17, in the account's time zone unless given. |  |  |
| `schedule.days` | array | no | 1 to 7 items. | `"mon"`, `"tue"`, `"wed"`, `"thu"`, `"fri"`, `"sat"`, `"sun"` |  |
| `schedule.start_hour` | integer | no | 0 to 23. |  |  |
| `schedule.end_hour` | integer | no | 1 to 24. |  |  |
| `schedule.time_zone` | string | no | 1 to 64 characters. |  |  |
| `daily_limit` | integer | no | Emails a day for this campaign; its mailboxes' own limits still hold. 1 to 1,000. |  |  |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

MCP: call `outreach_save_campaign` on the MCP server `https://api.conecto.chat/mcp/outreach` with these arguments:

```json
{
  "name": "Guest bikes for Portland hotels",
  "mailbox_ids": [
    4105
  ],
  "steps": [
    {
      "subject": "Guest bikes for {company}",
      "text": "Hi {first_name},\n\n{first_line}\n\nWe rent city bikes to hotels in Portland and service them every week, so your front desk never deals with a flat tire. Guests ride to the waterfront in ten minutes.\n\nCould I bring two bikes by on Thursday so your staff can try them?\n\n{sender_name}\nHalverson Cycle & Repair"
    },
    {
      "subject": "",
      "delay_days": 3,
      "text": "Hi {first_name}, the two trial bikes for {company} are still yours this month. Should I hold a pair for you?\n\n{sender_first_name}"
    }
  ],
  "audience": {
    "tag": "hotel"
  },
  "first_lines": {
    "maya@alderstreethotel.example": "Your new rooftop bar makes the Alder Street Hotel a stop for every visitor downtown.",
    "owen@hawthornehotel.example": "Guests at the Hawthorne Hotel already ask your front desk where to rent bikes."
  },
  "schedule": {
    "days": [
      "tue",
      "wed",
      "thu"
    ],
    "start_hour": 9,
    "end_hour": 12,
    "time_zone": "America/Los_Angeles"
  }
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/outreach_save_campaign \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Guest bikes for Portland hotels", "mailbox_ids": [4105], "steps": [{"subject": "Guest bikes for {company}", "text": "Hi {first_name},\n\n{first_line}\n\nWe rent city bikes to hotels in Portland and service them every week, so your front desk never deals with a flat tire. Guests ride to the waterfront in ten minutes.\n\nCould I bring two bikes by on Thursday so your staff can try them?\n\n{sender_name}\nHalverson Cycle & Repair"}, {"subject": "", "delay_days": 3, "text": "Hi {first_name}, the two trial bikes for {company} are still yours this month. Should I hold a pair for you?\n\n{sender_first_name}"}], "audience": {"tag": "hotel"}, "first_lines": {"maya@alderstreethotel.example": "Your new rooftop bar makes the Alder Street Hotel a stop for every visitor downtown.", "owen@hawthornehotel.example": "Guests at the Hawthorne Hotel already ask your front desk where to rent bikes."}, "schedule": {"days": ["tue", "wed", "thu"], "start_hour": 9, "end_hour": 12, "time_zone": "America/Los_Angeles"}}'
```

## Response

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "outreach_save_campaign",
  "status": "succeeded",
  "replayed": false,
  "cost_usd": "$0.00",
  "balance_usd": "$19.75",
  "result": {
    "campaign": {
      "campaign_id": "020f9c84-26ca-4cea-a857-454746de20f1",
      "name": "Guest bikes for Portland hotels",
      "status": "draft",
      "paused_reason": null,
      "mailboxes": [
        {
          "mailbox_id": 4101,
          "email": "dana@halversoncycle.example"
        }
      ],
      "steps": [
        {
          "subject": "Guest bikes for {company}",
          "text": "Hi {first_name},\n\n{first_line}\n\nWe rent city bikes to hotels in Portland and service them every week, so your front desk never deals with a flat tire. Guests ride to the waterfront in ten minutes.\n\nCould I bring two bikes by on Thursday so your staff can try them?\n\n{sender_name}\nHalverson Cycle & Repair"
        },
        {
          "subject": "",
          "text": "Hi {first_name}, the two trial bikes for {company} are still yours this month. Should I hold a pair for you?\n\n{sender_first_name}",
          "delay_days": 3
        }
      ],
      "audience": {
        "tag": "hotel"
      },
      "schedule": {
        "days": [
          "tue",
          "wed"
        ],
        "start_hour": 9,
        "end_hour": 12,
        "time_zone": "America/Los_Angeles"
      },
      "daily_limit": 30,
      "people": 2,
      "by": "Pip",
      "created_at": "2026-10-14T08:00:00+00:00",
      "started_at": null
    },
    "audience": {
      "people": 2,
      "left_out_counts": {},
      "left_out": []
    },
    "writing": {
      "passed": true,
      "fixes": []
    }
  }
}
```

`result`: campaign (campaign_id, name, status, paused_reason, mailboxes, steps, audience, schedule, daily_limit, people, by, created_at, started_at); audience (people, left_out_counts and left_out: who won't be emailed and why); writing (passed, and fixes: each with step, part, rule, found, fix, and the people it is about).

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No campaign, segment or prospect search on this account has that id or name. | Use outreach_campaigns, crm_list_segments or prospects_list. |
| `campaign_running` | 409 | The campaign is sending. | Pause it with outreach_pause first. |
| `not_draft` | 409 | The campaign started, so its emails, audience and first lines are fixed. | Save a new campaign to change them. |
| `campaign_ended` | 409 | The campaign was stopped or has finished. | Save a new campaign. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [outreach_connect_mailbox](https://conecto.chat/tools/outreach/outreach_connect_mailbox.md): A one-hour link for the owner to connect their own mailbox for outreach, typing its password on a Conecto page. Free.
- [outreach_mailboxes](https://conecto.chat/tools/outreach/outreach_mailboxes.md): The business's mailboxes connected for outreach, each with its state, daily limit, what it sent today and its bounce rate; never a password. Free up to 1,000,000 reads a month.
- [outreach_update_mailbox](https://conecto.chat/tools/outreach/outreach_update_mailbox.md): Rename an outreach mailbox, change its daily limit, pause or resume its sending, or disconnect it. Free.
- [outreach_preview](https://conecto.chat/tools/outreach/outreach_preview.md): One step of an outreach campaign as it will go, for real people: to, from, the subject and the text with the unsubscribe line. Free up to 1,000,000 reads a month.
- [outreach_start](https://conecto.chat/tools/outreach/outreach_start.md): Start an outreach campaign the person approved; $0.01 per person when their first email leaves. Free.
- [outreach_campaigns](https://conecto.chat/tools/outreach/outreach_campaigns.md): The business's outreach campaigns, newest first, each with its status and numbers. Free up to 1,000,000 reads a month.
- [outreach_get_campaign](https://conecto.chat/tools/outreach/outreach_get_campaign.md): An outreach campaign with its numbers, each step's emails and replies, and its people page by page with their status. Free up to 1,000,000 reads a month.
- [outreach_replies](https://conecto.chat/tools/outreach/outreach_replies.md): The replies to the business's outreach campaigns, newest first, with who wrote, the text and their status now. Free up to 1,000,000 reads a month.
- [outreach_set_status](https://conecto.chat/tools/outreach/outreach_set_status.md): Keep in the CRM whether someone outreach reached is interested or not; their pending emails stop. Free.
- [outreach_pause](https://conecto.chat/tools/outreach/outreach_pause.md): Pause a running outreach campaign; replies are still read and resuming carries on. Free.
- [outreach_resume](https://conecto.chat/tools/outreach/outreach_resume.md): Resume a paused outreach campaign once what paused it is fixed. Free.
- [outreach_stop](https://conecto.chat/tools/outreach/outreach_stop.md): End an outreach campaign for good; nobody it hasn't emailed is emailed or charged. Free.
