Create contacts in bulk
MillionSend extension: creates up to 1000 contacts in one request (Resend imports contacts only via CSV). Each item is a CreateContactRequest. on_conflict decides what happens to an email that already belongs to a contact — error (default), skip, or upsert. An upsert updates first_name/last_name only when provided, merges properties (provided keys overwrite), adds segments and upserts topics. unsubscribed: true opts the contact out; unsubscribed: false on an already unsubscribed contact is ignored — a batch never re-subscribes anyone, that stays an explicit PATCH /contacts/{id}. The x-batch-validation header picks strict (default, all-or-nothing) or permissive (valid subset written, failures listed in errors).
on_conflict?stringWhat to do with an item whose email (case-insensitive) already belongs to a contact: error fails the item, skip leaves the contact untouched and reports its id, upsert merges the item into it. Also decides how an email repeated inside the batch is handled: error fails the later occurrence, skip keeps the first, upsert collapses them into one write (later scalar fields win, associations are unioned).
"error""error""skip""upsert"x-batch-validation?stringstrict (default): any invalid item rejects the whole batch with that item's status and a contacts.{index}: message prefix, writing nothing. permissive: invalid items are listed in errors and the valid subset is written.
"strict""permissive"application/json- body
1-1000 CreateContactRequest items
1 <= items <= 1000[index: integer]?unknownA CreateContactRequest item
Batch processed
application/json- response
data*array<>One entry per successful item, in request order
counts*Per-status totals over the request items; they sum to the request length
errors?array<>Permissive mode only: the failed items by request index, each with the statusCode and name strict mode would answer for it
curl -X POST 'https://api.millionsend.com/contacts/batch' \ -H 'Content-Type: application/json' \ -d '[ null]'{ "data": [ { "object": "contact", "index": 0, "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "status": "created" } ], "counts": { "created": 0, "updated": 0, "skipped": 0, "failed": 0 }, "errors": [ { "index": 0, "statusCode": 0, "name": "string", "message": "string" } ]}