Skip to main content
All CollectionsProduct GuidesIntegrations
Updating Contact Properties via API
Updating Contact Properties via API

This guide will help you update contact properties in your charles account using our API. The following instructions will walk you through the process step-by-step.

Updated this week

Updating contact properties via API is in closed beta. If you’re interested in using it, please reach out to your success manager.

Overview

Our API allows you to update contact properties efficiently. This is particularly useful for maintaining accurate and up-to-date records of your contacts from external systems. Below is the detailed information on how to use the API to update these properties.

Prerequisites

  • API Key: Make sure you have your API key ready. This is required to authenticate your requests.

  • Contact Details: Ensure you have the correct contact details, including the external_reference_id which is typically the contact's phone number.

API Endpoint

To update contact properties, you will use the following endpoint:

PUT <https://customer-name.hello-charles.com/api/v1beta/contacts>

Request Headers

Ensure your request includes the following headers:

  • Content-Type: application/json

  • x-api-key: your-api-key

Request Body

The request body should be in JSON format and include the following fields:

  • external_reference_id: (Required) The unique identifier for the contact, usually the phone number.

  • source_type: (Required) The source of the contact, e.g., “segment”, “salesforce”.

  • custom_properties: A JSON object containing the custom properties you wish to update.

  • phone_numbers: A JSON array of objects containing the phone numbers you want to associate with the profile.

  • email_address: A JSON array of objects containing the email addresses you want to associate with the profile.

  • first_name: A string with the customer’s first name.

  • middle_name: A string with the customer’s middle name.

  • last_name: A string with the customer’s last name.

  • tags: A JSON array of tags to associate with the customer.

You can find the technical name of the 🎨Custom properties in Settings.

Example Request

Here is an example of a curl command to update contact properties:

curl --location --request PUT 'https://customer-name.hello-charles.com/api/v1beta/contacts' \
--header 'Content-Type: application/json' \
--header 'x-api-key: you-api-key' \
--data '{
"external_reference_id": "+4911111111",
"source_type": "segment",
"custom_properties": {
"a": "a",
"b": "b2"
},
"phone_numbers":[
{
"type":"mobile",
"value":"+4911111122"
}
],
"email_addresses":[
{
"type":"main",
"value":"[email protected]"
},
],
"first_name":"molestias",
"last_name":"repellendus",
"middle_name":"est",
"tags":[
"atque"
],
}'

Response

Upon a successful request, the API will return a response indicating the updated properties of the contact.

Payload

{
"status": 200,
"msg": "Upserted contact successfully.",
"messages": [],
"localized_messages": [],
"errors": [],
"request": {
"host": "customer-name.hello-charles.com",
"id": "40e8e39c-7072-4e95-b86b-928505ea248d"
},
"data": {
"id": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"kind": "Contact",
"first_name": "molestias",
"nickname": null,
"middle_name": "est",
"last_name": "repellendus",
"name": null,
"avatar": null,
"email": null,
"date_of_birth": null,
"created_at": "2025-01-23T10:26:15.847Z",
"updated_at": "2025-01-23T10:26:16.388Z",
"gender": null,
"comment": null,
"deleted": false,
"active": true,
"measurements": null,
"annotations": null,
"custom_properties": {},
"tags": [
"atque",
"at",
"enim",
"possimus",
"error",
"pariatur",
"voluptatum"
],
"name_preference": null,
"language_preference": null,
"parents": [],
"default_address": null,
"assumed_language": null,
"addresses": [],
"phonenumbers": [
{
"id": "5e3e1c77-4d3f-4988-b77e-8aea277fd5c2",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"type": "mobile",
"value": "49111111111",
"created_at": "2025-01-23T10:26:15.914",
"updated_at": "2025-01-23T10:26:41.988",
"comment": null,
"deleted": false,
"active": true,
"channel_user": "017f807d-e0df-46b5-9f65-a4b6f0f68083",
"is_proxy": false,
"proxy_vendor": "",
"is_portable": null,
"portability": null
}
],
"channel_users": [
{
"id": "017f807d-e0df-46b5-9f65-a4b6f0f68083",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"updated_at": "2025-01-23T10:26:41.964",
"created_at": "2025-01-23T10:26:15.848",
"last_source_fetch_at": "2025-01-23T10:26:15.848",
"broker": "charles_messaging_whatsapp",
"external_person_reference_id": "49111111111",
"last_external_person_reference_id": null,
"external_person_custom_id": "49111111111",
"external_channel_reference_id": "4911111111",
"source_type": "whatsapp",
"payload_name": null,
"first_name": null,
"middle_name": null,
"last_name": null,
"email": null,
"phone": null,
"name": null,
"payload": null,
"source_api": "charles_messaging_whatsapp",
"active": true,
"deleted": false,
"external_organization_reference_ids": null,
"organizations": null,
"comment": null,
"links": null,
"verified": false,
"last_verified_at": null,
"last_cached_at": null,
"custom_properties": null,
"channel_profile": null
},
{
"id": "f4620600-6427-43fa-9eb3-dd0ee33f28b8",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"updated_at": "2025-01-23T10:26:41.964",
"created_at": "2025-01-23T10:26:15.848",
"last_source_fetch_at": "2025-01-23T10:26:15.848",
"broker": "debitis",
"external_person_reference_id": "sequi",
"last_external_person_reference_id": null,
"external_person_custom_id": null,
"external_channel_reference_id": "quasi",
"source_type": "debitis",
"payload_name": null,
"first_name": "molestias",
"middle_name": "est",
"last_name": "repellendus",
"email": null,
"phone": null,
"name": null,
"payload": {
"tags": [
"atque"
],
"last_name": "repellendus",
"first_name": "molestias",
"middle_name": "est",
"source_type": "debitis",
"phone_numbers": [
{
"type": "mobile",
"value": "+4911111111"
}
],
"email_addresses": [
{
"type": "main",
"value": "[email protected]"
},
{
"type": "main",
"value": "[email protected]"
},
{
"type": "other",
"value": "[email protected]"
},
{
"type": "personal",
"value": "[email protected]"
},
{
"type": "personal",
"value": "[email protected]"
}
],
"custom_properties": {
"corrupti": "quas"
},
"external_reference_id": "sequi",
"external_channel_reference_id": "quasi"
},
"source_api": "debitis",
"active": true,
"deleted": false,
"external_organization_reference_ids": null,
"organizations": null,
"comment": null,
"links": null,
"verified": false,
"last_verified_at": null,
"last_cached_at": null,
"custom_properties": {},
"channel_profile": null
}
],
"emails": [
{
"id": "ed196749-9e7e-4fa4-b3a0-f81614eded9b",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"type": "other",
"value": "[email protected]",
"created_at": "2025-01-23T10:26:15.915",
"updated_at": "2025-01-23T10:26:41.988",
"comment": null,
"deleted": false,
"active": true,
"channel_user": "f4620600-6427-43fa-9eb3-dd0ee33f28b8",
"proxy_vendor": ""
},
{
"id": "8acf51e3-8700-4a45-9124-1ee965995eaf",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"type": "main",
"value": "[email protected]",
"created_at": "2025-01-23T10:26:15.915",
"updated_at": "2025-01-23T10:26:41.988",
"comment": null,
"deleted": false,
"active": true,
"channel_user": "f4620600-6427-43fa-9eb3-dd0ee33f28b8",
"proxy_vendor": ""
},
{
"id": "4030ecb2-b3c6-4ce3-a068-49cfcde559de",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"type": "personal",
"value": "[email protected]",
"created_at": "2025-01-23T10:26:15.915",
"updated_at": "2025-01-23T10:26:41.988",
"comment": null,
"deleted": false,
"active": true,
"channel_user": "f4620600-6427-43fa-9eb3-dd0ee33f28b8",
"proxy_vendor": ""
},
{
"id": "11c8c439-c377-43cd-a478-6142cadd2013",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"type": "main",
"value": "[email protected]",
"created_at": "2025-01-23T10:26:15.915",
"updated_at": "2025-01-23T10:26:41.988",
"comment": null,
"deleted": false,
"active": true,
"channel_user": "f4620600-6427-43fa-9eb3-dd0ee33f28b8",
"proxy_vendor": ""
},
{
"id": "718341c2-f29a-40ef-8ab2-8de22149259d",
"person": "e4430422-f8d0-4912-aa0e-094e75e92e6c",
"type": "personal",
"value": "[email protected]",
"created_at": "2025-01-23T10:26:15.915",
"updated_at": "2025-01-23T10:26:41.989",
"comment": null,
"deleted": false,
"active": true,
"channel_user": "f4620600-6427-43fa-9eb3-dd0ee33f28b8",
"proxy_vendor": ""
}
],
"direct_feed": "56360679-5624-4256-a4fd-23122e97a11e"
}
}

Did this answer your question?