Add people
Adds a saved list (list_id), people of a search (record_ids, the same ids a saved list takes), people already in another campaign of your workspace (lead_ids with from_campaign_id, their own fields come along) or your own rows. A row whose address Argorant knows gets its empty name, title and company filled in (filled_from_argorant). People you took out of this campaign earlier come back when you add them again by rows, record_ids or lead_ids, as long as nobody emailed them (restored). Adding a saved list again keeps them out (removed_kept_out) unless you send restore_removed: true. People who were emailed, replied, bounced, unsubscribed or are blocked never come back. The same person under two addresses joins once: when a better address takes the place of the one in the campaign the answer counts it in swapped (swapped_samples), and a second address left out is in alternate_skipped (alternate_skipped_samples). Send keep_given_address: true to add the addresses exactly as given. Every address is checked before it joins. When a source holds anything besides confirmed addresses and you did not say which to take, the answer is needs_choice with the count per result and adds nothing yet: ask the user, then call again with grades: ["valid"] (recommended) or ["valid", "catch_all"]. Invalid addresses never join. People from Argorant's data cost 1 credit each the first time; your own rows, repeats and people you already unlocked are free. Any extra key on a row, such as plan or city, becomes a variable like {{plan}}. Private addresses (free mail, home internet) are added like any other unless you send exclude_private_emails: true (business emails only); the answer then says how many were left out (skipped_private_email).
| Cost | What it does | Key scopes |
|---|---|---|
| 1 credit per new person from Argorant's data; your own rows, repeats and already unlocked people are free | Spends credits | argorant:manage_lists |
Authorization
BearerAuth Your API key from app.argorant.com/profile, sent as Authorization: Bearer <key>. A connector sign-in token (ag_mcp_...) works the same way.
In: header
Path Parameters
The campaign id from create or list.
uuidHeader Parameters
Any unique text up to 128 characters. A retry with the same key and the same body within 24 hours returns the first answer (with the header Idempotent-Replayed: true) instead of doing the work twice. The same key with another body answers 409 idempotency_conflict.
length <= 128Your own id for this request, 8 to 64 letters, digits, dot, dash or underscore. Returned as X-Request-Id; one is made for you when you send none.
^[A-Za-z0-9._-]{8,64}$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://app.argorant.com/api/v1/campaigns/7f3a2c1e-9b4d-4e8a-a1c2-5d6e7f8a9b0c/leads" \ -H "Idempotency-Key: 6f1c2e7a-run-42" \ -H "Content-Type: application/json" \ -d '{ "list_id": 312, "grades": [ "valid" ] }'{ "needs_choice": true, "added": 0, "question": "Add only the 1,188 valid addresses (recommended)? Or also 28 catch-all, at a higher bounce risk?", "recommended": [ "valid" ], "options": [ { "grade": "valid", "label": "Valid", "count": 1188, "recommended": true }, { "grade": "catch_all", "label": "Catch-all", "count": 28, "recommended": false } ]}