Bulk-import contacts from a JSON array or CSV payload
rows 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.
job_id) within 24 hours.POST /v1/contacts. Provide either rows or csv.has_header is false. Provide either rows or csv.{ "Email Address": "email", "Full Name": "full_name" }). Unknown columns are ignored.true, rows with matching email or phone are updated; when false, they are skipped.X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset, and X-Request-ID. Large imports emit an import.completed webhook event when done.
| 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 |