At a high level, the Push API provides a programmatic mechanism for pushing data from one or more sources to be integrated into one of the three Higher Logic platforms:
- Higher Logic Thrive Marketing Professional
- Higher Logic Thrive Community
For Higher Logic Community Essentials, not all objects in the API are supported. Community Essentials does not require or support pushing:
- Meetings, Products, or Orders
- Lists
- Communities and Groups
- Custom Demographics
- Contact Job History or Education
Form an API call
All calls to the Push API are an HTTP POST that will only allow a Content-Type of application/json or text/json in the request body. Additionally, you will need an API Key, which should be generated by Higher Logic when the push API is initially configured for a tenant for use.
With the exception of the /list endpoint, each object in the array should contain the full data of the record. For example, by not adding contact groups, a contact should remain in for /contactinfo, with the expectation being that they will be removed from the groups that weren't included in the last request. That also goes for fields (i.e., OrganizationName wasn't included on the latest API call, thus removing it from that contact record). With the /list endpoint, you can mimic this behavior using the "Replace" mode every time. The "Add" and "Remove" modes allow for partial data to be sent as long as the required fields are correctly filled out (e.g., "adding" a few contacts to a list does not require the entire list of ContactIds for that list).
Endpoints
- Base URL: https://datapushapi.higherlogic.com/v2
- Base URL (customers in Canada): https://datapushapi.onlinecommunity.ca/v2
- Example API endpoint URL: https://datapushapi.higherlogic.com/v2/contactinfo
NOTE: In the tables in this article, required fields are indicated in bold text.
Notes
IsDeleted
Reference objects (ContactDetails, Meeting, and Product) each have an IsDeleted property. When you request that one of these objects be deleted, the only required field is the corresponding unique ID (ContactId, MeetingId, and ProductId).
DateTime data type
When using the DateTime data type, the value must be in either of these ISO 8601 formats:
- UTC - .NET Format "yyyy-MM-ddTHH:mm:ss.fffZ"
- Time Offset from UTC - .NET Format "yyyy-MM-ddTHH:mm:ss.fffzzz"
ContactInfo
This endpoint defines all information related to a contact. The following tables display the fields that are available for each object in a ContactInfo push.
Field | Data Type | Notes |
---|---|---|
ContactDetails | ContactDetails | An object that contains contact demographics |
Groups | List of ContactGroup | Relationships to Groups that would benefit from a discussion and library (communities) or serve to define a contact's access permissions (security groups). For Community Essentials, all groups are pushed as Security Groups. |
Demographics | List of ContactDemographic | An object that contains enhanced and custom contact demographics. For Community Essentials, Demographics should not be pushed. |
Education | List of ContactEducation | |
JobHistory | List of ContactJobHistory | |
Addresses | List of ContactAddress | |
PhoneNumbers | List of ContactPhone | |
EmailAddresses | List of ContactEmail | |
Orders | List of ContactProductOrder | Not supported in Community Essentials |
ContactDetails
Field | Data Type | Notes |
---|---|---|
ContactId | string | Unique ID |
Age | int | |
ContactType | string | Any high-level classification |
Birthday | DateTime | |
MemberSince | DateTime | Date the contact's relationship with the customer started |
MemberExpiresOn | DateTime | Date the contact's relationship with the customer is scheduled to end (e.g., the end of a term for paid access) |
Designation | string | |
PrimaryEmailAddress | string | |
Prefix | string | |
FirstName | string | If IsOrganization = false, then either this or LastName is required |
MiddleName | string | |
LastName | string | If IsOrganization = false, then either this or FirstName is required |
InformalName | string | |
Gender | string | |
Ethnicity | string | |
Suffix | string | |
OrganizationName | string | Required when IsOrganization = true |
Title | string | |
ParentContactId | string | Unique identifier of an Individual's Parent Organization |
PrimaryContactContactId | string | Unique identifier of a contact. An Organization's Primary contact's unique ID |
ExcludeFromDirectory | bool | |
DoNotEmail | bool | |
IsMember | bool | If the customer has a binary concept of Member/NonMember, denoted here |
IsOrganization | bool | Indicates whether this Contact is an Individual (false) or an Organization (true) |
AlternativeContactId | string | An alternative identifier for this Contact. Unlike ContactId, uniqueness is not enforced |
Bio | string | HTML supported |
WebsiteURL | string | |
ProfileImageURL | string | |
FacebookURL | string | |
TwitterURL | string | |
LinkedinURL | string | |
BloggerURL | string | |
OtherSocialURL | string | |
IsDeleted | bool | Soft delete. When true, only ContactId is required |
ContactGroup
This object defines information relevant to a contact's relationship to a Community Group or Security Group.
- For Community Essentials, all groups will be configured as Security Groups. Community Groups are not pushed as part of Community Essentials.
Field | Data Type | Notes |
---|---|---|
InitialJoinDate | DateTime | Date on which the contact joined this Group |
BeginDate | DateTime | Start of this relationship term; null is interpreted as "far in the past" / "active" |
EndDate | DateTime | End of this relationship term; null is interpreted as "open-ended" |
GroupId | string | Unique ID |
GroupName | string | Human-readable name for the Group |
GroupType | string | A categorization field for values such as, Committee, Membership, and Event |
GroupSubType | string | A second categorization field |
Role | string | The Contact's role in the Group; such as, President, Treasurer |
ContactAddress
This object defines a single address entry for a contact.
Field | Data Type | Notes |
---|---|---|
AddressName | string | |
AddressLine1 | string | |
AddressLine2 | string | |
AddressLine3 | string | |
City | string | |
StateProvince | string | |
PostalCode | string | |
CountryCode | string | |
AddressType | string | |
Latitude | decimal | |
Longitude | decimal | |
DoNotPublish | bool | |
IsBill | bool | |
IsShip | bool | |
IsMail | bool | |
IsPrimary | bool |
ContactPhone
This object defines a single phone number entry for a contact.
Field | Data Type | Notes |
---|---|---|
FormattedNumber | string | |
PhoneType | string | |
IsPreferred | boolean | |
IsSmsPreferred | boolean | Is preferred for SMS communications |
DoNotPublish | boolean |
POST /list
Request headers
- Key = ApiKey
- Value = API Key for the tenant.
Request body
[
{
"ContactIds": ["aafdd36c-b35c-ee5c-5892-9098a09f2a81"],
"ListId": "LIST1",
"ListName": "Test List 1",
"ListType": "Awesome List",
"Mode": "Append"
},
{
"ContactIds": ["aafdd36c-b35c-ee5c-5892-9098a09f2a81","74cec42c-5e4d-e3bd-91ec-917d40a4c9dc"],
"ListId": "LIST2",
"ListName": "Test List 2",
"Mode": "Replace"
}
]
Error codes
HTTP Status Code | Explanation | Troubleshooting |
---|---|---|
401 | The API Key is not valid. | Make sure you're using the correct API Key or request a new one. |
500 | There is an internal issue that must be investigated. | The engineering team will have to look into this error. |