Add leads to campaign
add_leads_to_campaignMove leads this account owns into a campaign this account owns, by explicit id. Updates membership only: this call sends nothing. But leads moved into an ACTIVE campaign with drip on or Auto Outreach running are texted or emailed on that campaign's next run, with no new review or approval (opt-outs, suppression, quiet hours and caps still apply); do that only when the operator wants those people contacted. Opted-out and suppressed leads are REJECTED with per-lead skip reasons even when listed explicitly; leads already in the target are deduplicated; the response includes the campaign's final lead count read back from the database. To pick the audience by filter instead of by id, use select_and_attach_leads (same attach semantics, driven by search_leads filters). If the target campaign was already reviewed, its earlier approval is stale (the launch step recounts recipients and refuses a token approved for a smaller audience), so a fresh review_campaign_readiness is required before launching.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"campaign_id": "<campaign_id>",
"lead_ids": "<lead_ids>"
},
"name": "add_leads_to_campaign"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| lead_ids | Yes | Lead ids to move (from find_lead, list_leads or search_leads). | |
| campaign_id | Yes | The destination campaign. | |
| idempotency_key | No | Optional but recommended. Retrying the same key returns the same result instead of re-running the move; reusing it with different arguments is rejected as idempotency_conflict. |