Personal lines from a file
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.
| Cost | What it does | Key scopes |
|---|---|---|
| Free | Writes | 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.
uuidQuery Parameters
true replaces or clears lines people already have (default false: they are kept and listed).
falseHeader 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/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." } } ] }'{ "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."}