HappierleadsDocs
MCP server

add_prospect_to_campaign

Add one contact to an existing email campaign so it receives the sequence, like Manual Entry in the app.

Add contact to campaign · Changes data · Acts outside your account

Add one contact to an existing email campaign so it receives the sequence, like Manual Entry in the app. The first step is scheduled inside the campaign's sending window and then sent to the contact by real email. Confirm with the user before calling. campaignId comes from list_campaigns or create_campaign; the campaign must be active and have at least one step. Each added contact uses 1 from the account's prospecting allowance (remaining.prospectorHardLimit in get_account), not lead credits; it is used even when the contact lands in error-sending, and neither stop_prospect nor remove_prospect_from_campaign gives it back. The address is not verified at this point. Returns scheduled: true and the prospectId, or scheduled: false with a reason: already-in-campaign (HTTP 409, nothing used), campaign-inactive, company-excluded, contact-not-found, error-sending (a prospect row was kept, prospectId returned so you can remove it) or error.

ConnectionAccount URL, team member URL or OAuth

Parameters

ParameterTypeRequiredDescription
campaignIdstringYesEmail campaign id from list_campaigns or create_campaign.
emailstringYesThe contact's email address. Must be a valid address.
domainstringNoOptional company domain of the contact, e.g. acme.example. Used for company merge fields and exclusion checks.
firstNamestringNoOptional first name, used by {{ first_name }}.
lastNamestringNoOptional last name.
positionstringNoOptional job title, used by {{ position }}.
phonestringNoOptional phone number.
scheduledForstringNoOptional ISO 8601 date/time for the first step, e.g. 2026-11-03T09:30:00Z. Omit to send at the next free slot.
emailAccountIdsstring[]NoOptional mailbox ids from list_email_accounts to send from. Leave empty and the connected mailboxes with the most remaining daily capacity are used.
validationstring[]NoOptional, accepted for compatibility. Contacts are not verified when added to a campaign, so this does not filter anything today. Values: valid, catch-all, risky.
customobjectNoOptional object of extra merge fields for this contact, e.g. { "industry": "SaaS" }.

Tool definition

What your assistant receives from tools/list:

{
  "name": "add_prospect_to_campaign",
  "title": "Add contact to campaign",
  "annotations": {
    "title": "Add contact to campaign",
    "readOnlyHint": false,
    "destructiveHint": false,
    "idempotentHint": true,
    "openWorldHint": true
  },
  "inputSchema": {
    "type": "object",
    "properties": {
      "campaignId": {
        "type": "string",
        "description": "Email campaign id from list_campaigns or create_campaign."
      },
      "email": {
        "type": "string",
        "description": "The contact's email address. Must be a valid address."
      },
      "domain": {
        "type": "string",
        "description": "Optional company domain of the contact, e.g. acme.example. Used for company merge fields and exclusion checks."
      },
      "firstName": {
        "type": "string",
        "description": "Optional first name, used by {{ first_name }}."
      },
      "lastName": {
        "type": "string",
        "description": "Optional last name."
      },
      "position": {
        "type": "string",
        "description": "Optional job title, used by {{ position }}."
      },
      "phone": {
        "type": "string",
        "description": "Optional phone number."
      },
      "scheduledFor": {
        "type": "string",
        "description": "Optional ISO 8601 date/time for the first step, e.g. 2026-11-03T09:30:00Z. Omit to send at the next free slot."
      },
      "emailAccountIds": {
        "type": "array",
        "items": {
          "type": "string"
        },
        "description": "Optional mailbox ids from list_email_accounts to send from. Leave empty and the connected mailboxes with the most remaining daily capacity are used."
      },
      "validation": {
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "valid",
            "catch-all",
            "risky"
          ]
        },
        "description": "Optional, accepted for compatibility. Contacts are not verified when added to a campaign, so this does not filter anything today. Values: valid, catch-all, risky."
      },
      "custom": {
        "type": "object",
        "description": "Optional object of extra merge fields for this contact, e.g. { \"industry\": \"SaaS\" }."
      }
    },
    "required": [
      "campaignId",
      "email"
    ]
  }
}

Used in

On this page