---
title: "Add people"
method: POST
path: "/api/v1/campaigns/{campaign_id}/leads"
tags: ["Campaigns"]
---

# Add people

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

## Request

- Base URL: `https://app.argorant.com`
- URL: `https://app.argorant.com/api/v1/campaigns/{campaign_id}/leads`
- Auth: HTTP bearer

Adds a saved list (`list_id`) or your own `rows`. 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}}.

| 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` |

## Path parameters

- `campaign_id` string, uuid, required

## Headers

- `Idempotency-Key` string
- `X-Request-Id` string

## Request body

- object
  - `list_id` integer: A saved list to enroll.
  - `rows` object[]: Your own people, each with an email and any of first_name, last_name, company, title and your own columns.
    - `email` string, email, required
    - `first_name` string
    - `last_name` string
    - `company` string
    - `title` string
  - `grades` string[]: The results to take, valid alone or valid and catch_all.

## Response `200`

Asks first or OK

- object
  - `needs_choice` boolean
  - `added` integer
  - `question` string
  - `recommended` string[]
  - `options` object[]
    - `grade` string
    - `label` string
    - `count` integer
    - `recommended` boolean

## Other responses

- `401`: 401 Unauthorized. `unauthorized` when the API key is missing, wrong or revoked.
- `402`: 402 Payment required. `insufficient_credits` when credits ran out; the people that fit were added.
- `403`: 403 Forbidden. `scope_missing` when the key lacks argorant:manage_lists.
- `404`: 404 Not found. `not_found` when the item does not exist in your workspace.
- `409`: 409 Conflict. `idempotency_conflict` when the Idempotency-Key was used with another body.
- `422`: 422 Validation error. `validation_error` when a field has the wrong type or is missing.
- `429`: 429 Too many requests. `rate_limited` when too many requests this minute.

---

[API](https://skmtc.dev/argorant/apis/argorant-api.md) · [All operations](https://skmtc.dev/argorant/apis/argorant-api/llms.txt) · [OpenAPI document](https://skmtc.dev/argorant/apis/argorant-api/revisions/4bc28c0085b6?raw)
