curl --request GET \
--url https://api.messaging.phonovation.com/people/2/persons \
--header 'Authorization: <api-key>'import requests
url = "https://api.messaging.phonovation.com/people/2/persons"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, 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>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.get("https://api.messaging.phonovation.com/people/2/persons")
.header("Authorization", "<api-key>")
.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 => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
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"
}
}
]
}
}{
"requestError": {
"serviceException": {
"messageId": "UNAUTHORIZED",
"text": "Unauthorized"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "FORBIDDEN",
"text": "Forbidden"
}
}
}{
"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>"
}
}
}Get a single person or a list of people
Use this method with a unique person identifier to get a single person. Skip the identifier to return all people or use the filter parameter to return a list of people matching your specific conditions.
Required scope: Enable one of: people:manage, people:read.
curl --request GET \
--url https://api.messaging.phonovation.com/people/2/persons \
--header 'Authorization: <api-key>'import requests
url = "https://api.messaging.phonovation.com/people/2/persons"
headers = {"Authorization": "<api-key>"}
response = requests.get(url, 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>");
var response = await client.GetAsync(request);
Console.WriteLine("{0}", response.Content);
HttpResponse<String> response = Unirest.get("https://api.messaging.phonovation.com/people/2/persons")
.header("Authorization", "<api-key>")
.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 => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}const options = {method: 'GET', headers: {Authorization: '<api-key>'}};
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"
}
}
]
}
}{
"requestError": {
"serviceException": {
"messageId": "UNAUTHORIZED",
"text": "Unauthorized"
}
}
}{
"requestError": {
"serviceException": {
"messageId": "FORBIDDEN",
"text": "Forbidden"
}
}
}{
"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
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 Number of persons to return per page. Default - 20. Maximum - 1000.
Page of results to return. Default - 1.
Returns total count of persons, if set to true.
Results ordering. Possible ordering fields are firstName, lastName, createdAt and modifiedAt. Ordering direction can be specified with modifiers asc for the ascending ordering or desc for the descending one.
Allows to filter persons using simple queries. Just pass to the parameter URL encoded query.
List of supported logical operators:
| Logical Operator | Description |
|---|---|
#and | Joins query clauses with a logical AND returns all records that match the conditions of both clauses. |
#or | Joins query clauses with a logical OR returns all records that match the conditions of either clause. |
List of supported comparison operators:
| Comparison Operator | Supported Type | Description |
|---|---|---|
#eq | string, integer, decimal, date | Matches values that are equal to a specified value. |
#ne | string, integer, decimal, date | Matches all values that are not equal to a specified value. |
#contains | string | Matches the records that contain the specified value. |
#notContain | string | Matches the records that does not contain the specified value. |
#startsWith | string | Matches the records that start with a specified value. |
#endsWith | string | Matches the records that end with a specified value. |
#gt | integer, decimal, date | Matches values that are greater than a specified value. |
#lt | integer, decimal, date | Matches values that are less than a specified value. |
#gte | integer, decimal, date | Matches values that are greater than or equal to a specified value. |
#lte | integer, decimal, date | Matches values that are less than or equal to a specified value. |
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