ArgorantDocs

Personal lines from a file

posthttps://app.argorant.com/api/v1/campaigns/{campaign_id}/leads/custom-fields/import
POST
/api/v1/campaigns/{campaign_id}/leads/custom-fields/import

The people with their lines, when you send JSON. CSV and NDJSON go as the raw body instead.

In a JSON object, the same as the query parameter.

Send a finished file of personal lines in one go: CSV (header email or lead_id, then one column per {{custom_...}} variable, optional basis, keep_fallback and clear), JSON ([{email or lead_id, values: {...}}] or {"leads": [...], "overwrite": true}) or NDJSON, up to 200,000 rows and 50 MB. Send the file as the body with Content-Type text/csv, application/json or application/x-ndjson, or as multipart form data in a file field. Every row gets the same checks as a single call. Rows that fail are listed by row number and never stop the rest. Up to 5,000 rows are written at once; a bigger file answers with a job to follow. Up to 30 files an hour per workspace.

A line a person already has is kept unless you send overwrite=true (query parameter, a form field, or overwrite in the JSON object). Kept lines are listed in kept_existing with their row. With overwrite, replaced lines are counted in changed and kept as a record, old and new. To clear lines with overwrite, name the variables in the CSV clear column (several separated by spaces, or all), or send them as null in JSON. An empty CSV cell never clears anything. The same file with and without overwrite are two separate uploads.

CostWhat it doesKey scopes
FreeWritesargorant:manage_lists

Authorization

BearerAuth
AuthorizationBearer <token>

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

campaign_id*string

The campaign id from create or list.

Formatuuid

Query Parameters

overwrite?boolean

true replaces or clears lines people already have (default false: they are kept and listed).

Defaultfalse

Header Parameters

Idempotency-Key?string

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.

Lengthlength <= 128
X-Request-Id?string

Your 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.

Match^[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

Shell
curl -X POST "https://app.argorant.com/api/v1/campaigns/7f3a2c1e-9b4d-4e8a-a1c2-5d6e7f8a9b0c/leads/custom-fields/import" \  -H "Idempotency-Key: 6f1c2e7a-run-42" \  -H "Content-Type: application/json" \  -d '{    "leads": [      {        "email": "jane.doe@example-acme.com",        "values": {          "custom_opener": "Congrats on the new Munich office."        }      }    ]  }'
JSON
{  "format": "json",  "total_rows": 1,  "valid_rows": 1,  "invalid_count": 0,  "invalid": [],  "status": "done",  "overwrite": false,  "written": 1,  "kept_fallback": 0,  "unchanged": 0,  "duplicates": 0,  "changed": 0,  "cleared": 0,  "kept_existing_count": 0,  "kept_existing": [],  "not_found_count": 0,  "not_found": [],  "summary": "Saved lines for 1 contact."}