Exports are asynchronous. You create a job, the platform verifies addresses and builds the CSV, then you download it. Only deliverable rows are billed.
curl -X POST -H "Authorization: Bearer ag_live_..." \
-H "Content-Type: application/json" \
-d '{"limit": 1000, "filters": {"keywords": "logistics", "country": "Germany", "has_email": "true"}, "exclude_previously_exported": true}' \
https://argorant.com/api/mcp/exports/createBody fields
limit: maximum rows. This is the spend ceiling for the job.filters: the same filter object used by count and preview. The CLI defaultshas_emailto true so exported rows actually carry an address.exclude_previously_exported: skips contacts this account already exported, which keeps refreshed lists clean.
What comes back
- A normal job: a
job_id, plus paths for status and download. - A large job above 50,000 rows: a batch instead, with a
batch_id, a chunk count and a batch status path. Each chunk downloads as its own file.

Poll the status path until the job reports a terminal state, then download. The whole sequence is documented in the status and download article.
Verification runs at this moment, not when the record was collected. Addresses that fail are excluded and cost nothing, and catch-all mailboxes are labelled honestly so you can decide whether to include them.