Skip to main content

Upload Contacts via CSV

Upload contacts in bulk using a CSV file for use in contact center campaigns and call queues.

HTTP Request​

POST /v2/accounts/<account_sid>/contacts/upload

Base URL​

Data CenterBase URL
Singaporehttps://ccm-api.exotel.com
Mumbaihttps://ccm-api.in.exotel.com

Request Headers​

HeaderValue
Content-Typemultipart/form-data
AuthorizationBearer <access_token> or Basic Auth

Request Parameters​

ParameterTypeRequiredDescription
fileFileYesCSV file containing contact data
list_idStringNoAssociate contacts with a specific list
duplicate_actionStringNoHow to handle duplicates: skip, update, or create_new (default: skip)

CSV Format​

The CSV file should contain the following columns:

ColumnRequiredDescription
phone_numberYesContact phone number in E.164 format
first_nameNoContact's first name
last_nameNoContact's last name
emailNoContact's email address
companyNoCompany name
tagNoContact tag/category
custom_field_1NoCustom data field

Sample CSV​

phone_number,first_name,last_name,email,company,tag
+919876543210,John,Doe,john@example.com,Acme Inc,premium
+919876543211,Jane,Smith,jane@example.com,Beta Corp,standard
+919876543212,Bob,Wilson,bob@example.com,Gamma Ltd,premium

Example Request​

curl -X POST \
'https://ccm-api.exotel.com/v2/accounts/<account_sid>/contacts/upload' \
-H 'Authorization: Bearer <access_token>' \
-F 'file=@contacts.csv' \
-F 'duplicate_action=skip'

Response​

{
"request_id": "upload_req_001",
"method": "POST",
"http_code": 202,
"response": {
"code": 202,
"status": "accepted",
"data": {
"upload_id": "upload_abc123",
"total_records": 3,
"status": "processing",
"estimated_time_seconds": 30
}
}
}

Check Upload Status​

GET /v2/accounts/<account_sid>/contacts/upload/<upload_id>

Response​

{
"response": {
"data": {
"upload_id": "upload_abc123",
"status": "completed",
"total_records": 3,
"successful": 2,
"failed": 1,
"duplicates_skipped": 0,
"error_file_id": "error_file_001"
}
}
}

Upload Limits​

LimitValue
Maximum file size10 MB
Maximum records per file50,000
Supported formats.csv
Maximum concurrent uploads5

HTTP Status Codes​

CodeDescription
202Accepted — Upload is being processed
400Bad Request — Invalid CSV format
401Unauthorized
413File too large
429Rate Limited

Try It​