curl --request POST \
--url https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"productName": "Cap",
"productPrice": 11.33,
"productCategory": "Hats",
"productImage": "/image3.png"
}
'import requests
url = "https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append"
payload = {
"productName": "Cap",
"productPrice": 11.33,
"productCategory": "Hats",
"productImage": "/image3.png"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "<api-key>");
request.AddJsonBody("{\n \"productName\": \"Cap\",\n \"productPrice\": 11.33,\n \"productCategory\": \"Hats\",\n \"productImage\": \"/image3.png\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.post("https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"productName\": \"Cap\",\n \"productPrice\": 11.33,\n \"productCategory\": \"Hats\",\n \"productImage\": \"/image3.png\"\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'productName' => 'Cap',
'productPrice' => 11.33,
'productCategory' => 'Hats',
'productImage' => '/image3.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: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
productName: 'Cap',
productPrice: 11.33,
productCategory: 'Hats',
productImage: '/image3.png'
})
};
fetch('https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));[
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
},
{
"productName": "Cap",
"productPrice": 11.33,
"productCategory": "Hats",
"productImage": "/image3.png"
}
]{
"requestError": {
"serviceException": {
"messageId": "BAD_REQUEST",
"text": "Bad request"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "UNAUTHORIZED",
"text": "Unauthorized"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "FORBIDDEN",
"text": "Forbidden"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "NOT_FOUND",
"text": "Not found"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "TOO_MANY_REQUESTS",
"text": "Too many requests"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "GENERAL_ERROR",
"text": "Something went wrong. Please contact support."
}
}
}{
"requestError": {
"serviceException": {
"messageId": "<string>",
"text": "<string>"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "<string>",
"text": "<string>"
}
}
}Append item to custom attribute
Custom attributes with LIST_OF_OBJECTS type contain an array of items as a value. Using this API method, you can add a new item to the specified list type custom attribute of a specific person. The item you want to add should match the defined list schema.
Required scope: Enable one of: people:manage.
curl --request POST \
--url https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append \
--header 'Authorization: <api-key>' \
--header 'Content-Type: application/json' \
--data '
{
"productName": "Cap",
"productPrice": 11.33,
"productCategory": "Hats",
"productImage": "/image3.png"
}
'import requests
url = "https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append"
payload = {
"productName": "Cap",
"productPrice": 11.33,
"productCategory": "Hats",
"productImage": "/image3.png"
}
headers = {
"Authorization": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)using RestSharp;
var options = new RestClientOptions("https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("Authorization", "<api-key>");
request.AddJsonBody("{\n \"productName\": \"Cap\",\n \"productPrice\": 11.33,\n \"productCategory\": \"Hats\",\n \"productImage\": \"/image3.png\"\n}", false);
var response = await client.PostAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.post("https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append")
.header("Authorization", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"productName\": \"Cap\",\n \"productPrice\": 11.33,\n \"productCategory\": \"Hats\",\n \"productImage\": \"/image3.png\"\n}")
.asString();<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'productName' => 'Cap',
'productPrice' => 11.33,
'productCategory' => 'Hats',
'productImage' => '/image3.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: 'POST',
headers: {Authorization: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
productName: 'Cap',
productPrice: 11.33,
productCategory: 'Hats',
productImage: '/image3.png'
})
};
fetch('https://api.messaging.phonovation.com/people/2/customAttributes/{name}/append', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));[
{
"productName": "Sneakers",
"productPrice": 25.33,
"productCategory": "Sport Sneakers",
"productImage": "/image1.png"
},
{
"productName": "T-Shirt",
"productPrice": 9.99,
"productCategory": "Casual",
"productImage": "/image2.png"
},
{
"productName": "Cap",
"productPrice": 11.33,
"productCategory": "Hats",
"productImage": "/image3.png"
}
]{
"requestError": {
"serviceException": {
"messageId": "BAD_REQUEST",
"text": "Bad request"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "UNAUTHORIZED",
"text": "Unauthorized"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "FORBIDDEN",
"text": "Forbidden"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "NOT_FOUND",
"text": "Not found"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "TOO_MANY_REQUESTS",
"text": "Too many requests"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "GENERAL_ERROR",
"text": "Something went wrong. Please contact support."
}
}
}{
"requestError": {
"serviceException": {
"messageId": "<string>",
"text": "<string>"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "<string>",
"text": "<string>"
}
}
}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
Path Parameters
Name of the list type custom attribute
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 Response
successful response