Import Contacts
Import & Export
Import Contacts
Bulk-import contacts from a JSON array or CSV payload
POST
Import Contacts
Request
Supply either a structuredrows array or a raw csv string. When CSV is provided, supply a mapping that maps CSV column names to contact fields. Imports are processed synchronously for up to 500 rows; larger imports are queued and can be tracked via the returned job_id.
Headers
Strongly recommended for imports. Same key returns the original result (including
job_id) within 24 hours.Body Parameters
Array of contact objects. Each object accepts the same fields as
POST /v1/contacts. Provide either rows or csv.Raw CSV text. First line is treated as headers unless
has_header is false. Provide either rows or csv.Applies only to CSV imports.
CSV-only. Maps CSV header names to contact field names (e.g.
{ "Email Address": "email", "Full Name": "full_name" }). Unknown columns are ignored.When
true, rows with matching email or phone are updated; when false, they are skipped.Optional array of tag strings applied to every imported row.
Response
X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-Request-ID. Large imports emit an import.completed webhook event when done.
Example Response
Errors
| Status | Code | Description |
|---|---|---|
| 400 | validation_error | Neither rows nor csv provided, or mapping is malformed |
| 401 | invalid_key | Invalid or expired API key |
| 403 | insufficient_permissions | Missing write:contacts permission |
| 413 | payload_too_large | Payload exceeds 20 MB |
| 429 | rate_limited | Rate limit exceeded |