- Bulk update contacts
You can bulk update contacts by submitting an array of contact objects with the fields to update. Each contact must include an id field identifying the contact to update. You can also add or remove tags on each contact by including a tags object.
Only the fields listed in the request schema below can be set. Any other fields in a contact object are ignored.
The endpoint creates an async job that processes the updates in the background. Use the returned job ID with GET /contacts/bulk/{id} to check the job status.
- Maximum of 100 contacts per request.
- You can append tasks to an existing job by including
job.idin the request body. - Tag application is best-effort and processed asynchronously: unknown tag IDs are skipped, and per-tag results are not returned in the job status.
Requires the read_write_users or write_users_companies OAuth scope.
Intercom API version.
If you omit the header, the API uses the version set in your app package, and 1.0 if none is set.
- The production API serverhttps://api.intercom.io/contacts/bulk
- The european API serverhttps://api.eu.intercom.io/contacts/bulk
- The australian API serverhttps://api.au.intercom.io/contacts/bulk
- successful
- Attach and detach companies
- Add and remove tags
- Append to existing job
curl -i -X PUT \
https://api.intercom.io/contacts/bulk \
-H 'Authorization: Bearer <YOUR_TOKEN_HERE>' \
-H 'Content-Type: application/json' \
-H 'Intercom-Version: 2.17' \
-d '{
"contacts": [
{
"id": "abc123",
"external_id": "ext123",
"email": "joe@bloggs.com",
"name": "Joe Bloggs",
"phone": "+353871234567",
"avatar": "https://www.example.com/avatar_image.jpg",
"owner_id": "321",
"unsubscribed_from_emails": false,
"language_override": "fr",
"custom_attributes": {
"plan": "pro"
},
"companies": [
{
"company_id": "6",
"name": "Blue Sun"
}
],
"tags": {
"add": [
{
"id": "123"
}
],
"remove": [
{
"id": "987"
}
]
}
}
]
}'Accepted
The current state of the job.
The time the job was last updated as a Unix timestamp.
The time the most recent task completed as a Unix timestamp. Set as soon as any task completes, so check state to know whether the whole job has finished. Null until a task completes.
{ "id": "job_v2_1", "type": "contacts.bulk.job", "state": "running", "created_at": 1713360000, "updated_at": 1713360060, "completed_at": null, "tasks": [ { … } ], "url": "https://api.intercom.io/contacts/bulk/job_v2_1" }