API referenceLeads
PATCH
/leads/{id}

JavaScript SDK: swarmhit.leads.update(leadId, params)

Edit a lead's fields and/or replace its manual tags.

Authorization

bearerAuth
AuthorizationBearer <token>

An API key created on the Access tokens page.

In: header

Path Parameters

id*string

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Any subset of these fields.

Response Body

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/leads/string" \  -H "Content-Type: application/json" \  -d '{    "jobTitle": "VP Engineering",    "tags": [      "warm",      "q3"    ]  }'
{  "data": {    "id": "string",    "firstName": "string",    "lastName": "string",    "headline": "string",    "jobTitle": "string",    "company": "string",    "email": "string",    "phone": "string",    "emailStatus": "bounced",    "emailOptOut": true,    "location": "string",    "picture": "string",    "notes": "string",    "profileUrl": "string",    "publicIdentifier": "string",    "openProfile": true,    "tags": [      "string"    ],    "autoTags": [      "string"    ],    "listIds": [      "string"    ],    "campaignIds": [      "string"    ],    "customVariables": {      "property1": "string",      "property2": "string"    },    "source": "string",    "lastActivityAt": "2019-08-24T14:15:22Z",    "enrichedAt": "2019-08-24T14:15:22Z",    "enrichment": {      "email": {        "status": "pending",        "at": "2019-08-24T14:15:22Z",        "reason": "no_credits"      },      "phone": {        "status": "pending",        "at": "2019-08-24T14:15:22Z",        "reason": "no_credits"      }    },    "createdAt": "2019-08-24T14:15:22Z",    "updatedAt": "2019-08-24T14:15:22Z"  }}

List leads GET

**JavaScript SDK:** [`swarmhit.leads.list(params?)`](/smart-api/sdk/methods#leads)

Add leads to a campaign POST

**JavaScript SDK:** [`swarmhit.campaigns.leads.add(campaignId, params)`](/smart-api/sdk/methods#campaigns.leads) Adds leads from a `leads` array of `{ profileUrl, ... }` objects (or `{ email, ... }` when the workspace has the email channel, `{ phone, ... }` with the WhatsApp channel, see `LeadInput`), or imports a whole lead list with `listId`. The workspace lead is upserted from the fields you pass and enrolled in one call — you don't need to create leads separately first. Adding makes no LinkedIn call; at first contact, LinkedIn's `firstName`, `lastName`, `headline` and picture replace the values you sent (other fields are kept). Leads already in the campaign are skipped, and so are items with neither a valid `profileUrl` nor (with the email channel) a valid `email` nor (with the WhatsApp channel) a `phone` with its country code. Leads on the workspace blocklist are not enrolled, nor left on the campaign's own list, and count as `blocklisted`; leads an exclusion rule keeps out are not enrolled and count as `excluded`. Max 1000 leads per request. A `leads` array returns `{ inserted, excluded, blocklisted, listId }` (skipped items are not counted); a `listId` import returns `{ inserted, skipped, excluded, blocklisted, listId, listName }`, where `skipped` counts the list's leads already in the campaign. Every enrolled lead is also saved to the campaign's own list, created on the first enrollment and named "<campaign name>'s leads" (exposed as `listId` on the campaign). That list and the campaign stay in step: adding leads to it enrolls them, removing leads from it removes them from the campaign. Leads imported with `listId` keep their source list too. The response's `listId` is the campaign's own list for a `leads` array, or the source list for a `listId` import.