curl --request PATCH \
--url https://api.messaging.phonovation.com/people/2/persons \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"customAttributes": {
"ShoppingCartList": [
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
}
]
}
}
'import requests
url = "https://api.messaging.phonovation.com/people/2/persons"
payload = { "customAttributes": { "ShoppingCartList": [
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
}
] } }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://api.messaging.phonovation.com/people/2/persons");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "<api-key>");
request.AddJsonBody("{\n \"customAttributes\": {\n \"ShoppingCartList\": [\n {\n \"productName\": \"Sneakers\",\n \"productPrice\": 25.33,\n \"productCategory\": \"Sport Sneakers\",\n \"productImage\": \"/image1.png\"\n },\n {\n \"productName\": \"T-Shirt\",\n \"productPrice\": 9.99,\n \"productCategory\": \"Casual\",\n \"productImage\": \"/image2.png\"\n }\n ]\n }\n}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.patch("https://api.messaging.phonovation.com/people/2/persons")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customAttributes\": {\n \"ShoppingCartList\": [\n {\n \"productName\": \"Sneakers\",\n \"productPrice\": 25.33,\n \"productCategory\": \"Sport Sneakers\",\n \"productImage\": \"/image1.png\"\n },\n {\n \"productName\": \"T-Shirt\",\n \"productPrice\": 9.99,\n \"productCategory\": \"Casual\",\n \"productImage\": \"/image2.png\"\n }\n ]\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.messaging.phonovation.com/people/2/persons",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'customAttributes' => [
'ShoppingCartList' => [
[
'productName' => 'Sneakers',
'productPrice' => 25.33,
'productCategory' => 'Sport Sneakers',
'productImage' => '/image1.png'
],
[
'productName' => 'T-Shirt',
'productPrice' => 9.99,
'productCategory' => 'Casual',
'productImage' => '/image2.png'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customAttributes: {
ShoppingCartList: [
{
productName: 'Sneakers',
productPrice: 25.33,
productCategory: 'Sport Sneakers',
productImage: '/image1.png'
},
{
productName: 'T-Shirt',
productPrice: 9.99,
productCategory: 'Casual',
productImage: '/image2.png'
}
]
}
})
};
fetch('https://api.messaging.phonovation.com/people/2/persons', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"createdAt": "2018-03-29T13:46:31",
"modifiedAt": "2018-03-30T11:25:13",
"id": 1,
"externalId": "3",
"firstName": "Jane",
"lastName": "Smith",
"address": "67 Farringdon Road",
"city": "London",
"country": "United Kingdom",
"gender": "FEMALE",
"birthDate": "1966-01-15",
"middleName": "Janie",
"preferredLanguage": "en-gb",
"profilePicture": "http://profile.com",
"origin": "API",
"modifiedFrom": "API",
"tags": [
"VIP Customers",
"New Customers"
],
"customAttributes": {
"Contract Expiry": "2018-06-01",
"Company": "Acme",
"ShoppingCartList": [
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
}
]
},
"contactInformation": {
"phone": [
{
"number": "353861234579"
}
],
"email": [
{
"address": "janewilliams@acme.com"
}
],
"push": [
{
"applicationId": "FDCC8516470A3AE97FB8AC218D5D0D3D",
"registrationId": "c5db0c47-465c-4e1c-abf8-7cedc275dd19",
"additionalData": {
"birthdate": "1988-07-31",
"email": "test@test.com",
"firstName": "Jane",
"gender": "F",
"lastName": "Smith",
"middleName": "Janie"
},
"systemData": {
"cloudType": "GCM",
"registrationEnabled": "true",
"sdkName": "MobileMessaging SDK",
"os": "Android"
}
}
],
"facebook": [
{
"applicationId": "370329180020364",
"userId": "2094832040560427",
"systemData": {
"gender": "female",
"lastName": "Smith",
"firstName": "Jane"
}
}
],
"line": [
{
"applicationId": "1644264921",
"userId": "U045147f1ad961bfe996b72bbf417f3c9",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"instagram": [
{
"applicationId": "17841446795352028",
"userId": "12461436693342628",
"systemData": {
"displayName": "jane.smith"
}
}
],
"twitter": [
{
"applicationId": "1148203323283877",
"userId": "370329180020364",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"appleBusinessChat": [
{
"applicationId": "387465931",
"userId": "387465931",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"zaloFollower": [
{
"applicationId": "12345678901",
"userId": "9876543210",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"tiktokBm": [
{
"applicationId": "7012345678901234567",
"userId": "7123456789012345678",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"whatsapp": [
{
"applicationId": "353861234590",
"userId": "US.13491208655302741918",
"systemData": {
"username": "jane.smith"
}
}
],
"kakaoTalk": [
{
"applicationId": "152341435",
"userId": "4325324662",
"systemData": {
"subscriptionStatus": "friend"
}
}
]
}
}Partial person update
curl --request PATCH \
--url https://api.messaging.phonovation.com/people/2/persons \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"customAttributes": {
"ShoppingCartList": [
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
}
]
}
}
'import requests
url = "https://api.messaging.phonovation.com/people/2/persons"
payload = { "customAttributes": { "ShoppingCartList": [
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
}
] } }
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://api.messaging.phonovation.com/people/2/persons");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "<api-key>");
request.AddJsonBody("{\n \"customAttributes\": {\n \"ShoppingCartList\": [\n {\n \"productName\": \"Sneakers\",\n \"productPrice\": 25.33,\n \"productCategory\": \"Sport Sneakers\",\n \"productImage\": \"/image1.png\"\n },\n {\n \"productName\": \"T-Shirt\",\n \"productPrice\": 9.99,\n \"productCategory\": \"Casual\",\n \"productImage\": \"/image2.png\"\n }\n ]\n }\n}", false);
var response = await client.PatchAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.patch("https://api.messaging.phonovation.com/people/2/persons")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"customAttributes\": {\n \"ShoppingCartList\": [\n {\n \"productName\": \"Sneakers\",\n \"productPrice\": 25.33,\n \"productCategory\": \"Sport Sneakers\",\n \"productImage\": \"/image1.png\"\n },\n {\n \"productName\": \"T-Shirt\",\n \"productPrice\": 9.99,\n \"productCategory\": \"Casual\",\n \"productImage\": \"/image2.png\"\n }\n ]\n }\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.messaging.phonovation.com/people/2/persons",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'customAttributes' => [
'ShoppingCartList' => [
[
'productName' => 'Sneakers',
'productPrice' => 25.33,
'productCategory' => 'Sport Sneakers',
'productImage' => '/image1.png'
],
[
'productName' => 'T-Shirt',
'productPrice' => 9.99,
'productCategory' => 'Casual',
'productImage' => '/image2.png'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const options = {
method: 'PATCH',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
customAttributes: {
ShoppingCartList: [
{
productName: 'Sneakers',
productPrice: 25.33,
productCategory: 'Sport Sneakers',
productImage: '/image1.png'
},
{
productName: 'T-Shirt',
productPrice: 9.99,
productCategory: 'Casual',
productImage: '/image2.png'
}
]
}
})
};
fetch('https://api.messaging.phonovation.com/people/2/persons', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"createdAt": "2018-03-29T13:46:31",
"modifiedAt": "2018-03-30T11:25:13",
"id": 1,
"externalId": "3",
"firstName": "Jane",
"lastName": "Smith",
"address": "67 Farringdon Road",
"city": "London",
"country": "United Kingdom",
"gender": "FEMALE",
"birthDate": "1966-01-15",
"middleName": "Janie",
"preferredLanguage": "en-gb",
"profilePicture": "http://profile.com",
"origin": "API",
"modifiedFrom": "API",
"tags": [
"VIP Customers",
"New Customers"
],
"customAttributes": {
"Contract Expiry": "2018-06-01",
"Company": "Acme",
"ShoppingCartList": [
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
}
]
},
"contactInformation": {
"phone": [
{
"number": "353861234579"
}
],
"email": [
{
"address": "janewilliams@acme.com"
}
],
"push": [
{
"applicationId": "FDCC8516470A3AE97FB8AC218D5D0D3D",
"registrationId": "c5db0c47-465c-4e1c-abf8-7cedc275dd19",
"additionalData": {
"birthdate": "1988-07-31",
"email": "test@test.com",
"firstName": "Jane",
"gender": "F",
"lastName": "Smith",
"middleName": "Janie"
},
"systemData": {
"cloudType": "GCM",
"registrationEnabled": "true",
"sdkName": "MobileMessaging SDK",
"os": "Android"
}
}
],
"facebook": [
{
"applicationId": "370329180020364",
"userId": "2094832040560427",
"systemData": {
"gender": "female",
"lastName": "Smith",
"firstName": "Jane"
}
}
],
"line": [
{
"applicationId": "1644264921",
"userId": "U045147f1ad961bfe996b72bbf417f3c9",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"instagram": [
{
"applicationId": "17841446795352028",
"userId": "12461436693342628",
"systemData": {
"displayName": "jane.smith"
}
}
],
"twitter": [
{
"applicationId": "1148203323283877",
"userId": "370329180020364",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"appleBusinessChat": [
{
"applicationId": "387465931",
"userId": "387465931",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"zaloFollower": [
{
"applicationId": "12345678901",
"userId": "9876543210",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"tiktokBm": [
{
"applicationId": "7012345678901234567",
"userId": "7123456789012345678",
"systemData": {
"displayName": "Jane Smith"
}
}
],
"whatsapp": [
{
"applicationId": "353861234590",
"userId": "US.13491208655302741918",
"systemData": {
"username": "jane.smith"
}
}
],
"kakaoTalk": [
{
"applicationId": "152341435",
"userId": "4325324662",
"systemData": {
"subscriptionStatus": "friend"
}
}
]
}
}Authorizations
This is the most secure authorization type and the one with the most flexibility.
API keys can be generated by calling the dedicated API method. Furthermore, API keys can have a limited scope and cover only some API methods. Lastly, they can be revoked at any time. This range of possibilities makes API keys well suited for separating the API access rights across multiple applications or use cases. Finally, the loss of an API key is easily manageable.
You can manage your API keys from GUI, or programmatically with dedicated API.
API key Authorization header example:
Authorization: App 003026bbc133714df1834b8638bb496e-8f4b3d9a-e931-478d-a994-28a725159ab9
Query Parameters
Person ID. ID type must match the type parameter. Some channels (e,g., Apple Business Chat) use identifiers that contain unsafe characters. Make sure you URL-encode them in your API request
Sender or application ID. sender is required for all identifier types except ID, EXTERNAL_ID, PHONE, EMAIL
Type of the person ID
ID, EXTERNAL_ID, PHONE, EMAIL, LINE, FACEBOOK, TELEGRAM, PUSH, WEB_PUSH, LIVE_CHAT, VIBER_BOTS, INSTAGRAM, INSTAGRAM_DM, TWITTER, APPLE_BUSINESS_CHAT, KAKAO_SANGDAM, OPEN_CHANNEL, ZALO_FOLLOWER, TIKTOK_BM, WHATSAPP, KAKAO_TALK Body
Person's address, 256 characters max.
Person's date of birth, format YYYY-MM-DD.
Person's city, 50 characters max.
List of phones, emails and other information how a person can be contacted.
Show child attributes
Show child attributes
Person's country, 50 characters max.
List of custom attributes for the person, 4096 characters max per value.
Show child attributes
Show child attributes
Unique ID for a person from your or another external system, 256 characters max.
Person's first name, 255 characters max.
Person's gender.
MALE, FEMALE Person's last name, 255 characters max.
Person's middle name, 50 characters max.
Person's preferred language. Must be in two letter ISO (xx) or language-region BCP-47 (xx-YY) format.
URL for the person's profile picture, 2083 characters max.
List of tags that this person has.
Person's type, default type is CUSTOMER.
CUSTOMER, LEAD Response
successful response
Person's address, 256 characters max.
Person's date of birth, format YYYY-MM-DD.
Person's city, 50 characters max.
Person's computed attributes grouped by type.
Show child attributes
Show child attributes
List of phones, emails and other information how a person can be contacted.
Show child attributes
Show child attributes
Person's country, 50 characters max.
Date and time of creation. Has the following format: yyyy-MM-dd'T'HH:mm:ss.
List of custom attributes for the person, 4096 characters max per value.
Show child attributes
Show child attributes
Unique ID for a person from your or another external system, 256 characters max.
Person's first name, 255 characters max.
Person's gender.
MALE, FEMALE Unique id of the entity.
Integrations.
Show child attributes
Show child attributes
Person's last name, 255 characters max.
Person's middle name, 50 characters max.
Date and time of last modification. Has the following format: yyyy-MM-dd'T'HH:mm:ss.
The information which describes the source of the last modification of record.
API, PORTAL, WEB_SDK, INTEGRATION, PUSH, FACEBOOK, LINE, TELEGRAM, SALESFORCE, DYNAMICS, ZAPIER, FORMS, COMPUTED, ANSWERS, CONVERSATIONS The information which describes the origin of the record.
API, PORTAL, WEB_SDK, INTEGRATION, PUSH, FACEBOOK, LINE, TELEGRAM, SALESFORCE, DYNAMICS, ZAPIER, FORMS, COMPUTED, ANSWERS, CONVERSATIONS Person's preferred language. Must be in two letter ISO (xx) or language-region BCP-47 (xx-YY) format.
URL for the person's profile picture, 2083 characters max.
List of tags that this person has.
Person's type, default type is CUSTOMER.
CUSTOMER, LEAD