On this page

POST/campaigns/:campaignId/leads/batch-delete

Credits: 0 (no refund of insert credits)
Destructive: Yes — permanent delete, irreversible
LinkedIn risk: None
Rate limit: 10 / minute (max 100 items)

Optional Idempotency-Key (TTL 24h).


Purpose

Permanently delete up to 100 leads from a campaign. Same outcome as in-app bulk delete (lead removed; campaign totals refreshed). Irreversible — no credit refund.


Request

POST /campaigns/search_abc/leads/batch-delete
X-API-Key: sk_live_...
Idempotency-Key: optional-key
Content-Type: application/json
{
  "leadIds": ["lead_xyz", "lead_abc"]
}
FieldNotes
leadIdsYes — non-empty array, length 1…100 (hard max)

Duplicate ids: first wins; later → item validation_error.

Idempotency: array order matters. Persist 200 only when summary.deleted > 0. Retry of already-deleted ids → not_found (safe).


Response 200

{
  "results": [
    { "index": 0, "leadId": "lead_xyz", "status": "deleted" }
  ],
  "summary": {
    "total": 1,
    "deleted": 1,
    "not_found": 0,
    "validation_error": 0,
    "failed": 0
  },
  "creditsCharged": 0,
  "reconciliationFailed": false
}

Statuses: deleted · not_found · validation_error · failed.

Per-item soft failures may include an error object (code, message).

reconciliationFailed: true means deletes succeeded but campaign totals/stats refresh failed — retry is usually unnecessary for the delete itself.


Errors

error.codeWhen
unauthorizedMissing/invalid API key
validation_errorBad envelope / empty leadIds / unknown keys
not_foundCampaign missing before any delete
conflictCampaign still finding/importing leads (409), or idempotency conflict
rate_limitedBatch-delete RPM (10/min) or global RPM
upstream_unavailableIdempotency reserve fail — no deletes

MCP

Tool: delete_leads_batch (destructiveHint: true, idempotentHint: true — confirm first; retry of gone ids → not_found). Outbound REST timeout 300s.

See also