# Enroll leads

### Enroll leads

`POST /api/v1/campaigns/{campaignId}/leads`

Operation ID: `enrollCampaignLeads`

Enrolls leads that already exist, by id — create them first with POST /leads or POST /leads/bulk. A lead is skipped rather than enrolled when it has no handle for a channel the campaign sends on (missing_identity), has an empty lead field that a message uses, or one with a {{...}} inside it (missing_personalization, the detail names the field), is already live in another campaign (enrolled_elsewhere), is on the do-not-contact list (suppressed), was contacted too recently (recently_contacted), did not reply to previous outreach (unresponsive), or the id does not name a lead in this workspace (lead_not_found). Results come back in request order.

**Path parameters**

- `campaignId` (string · uuid, required): Campaign id

**Request body** (required)

- `leadIds` (string · uuid[], required): Leads to enroll, by id. Create them first with POST /api/v1/leads or POST /api/v1/leads/bulk.

**201**: One result per submitted lead id, in request order.

- `results` (object[], required)
- `requestId` (string · uuid, required): Id of this request, for support and troubleshooting

**Errors**

- `400`: Bad request
- `401`: Unauthorized: missing or invalid API key
- `403`: Forbidden
- `404`: Not found
- `422`: Invalid request payload
