NOTE: The format and endpoints in this article are for use when Push API is the sole integration method being used.
If your organization’s integration method is the Hybrid Claims-Based/Push API approach, see Higher Logic Push API Integration (V1).
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 two Higher Logic platforms:
- Higher Logic Thrive Marketing Professional (Thrive Marketing Professional)
- Higher Logic Thrive Community (Thrive Community)
Form an API call
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 | A "details" 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). |
Demographics | List of ContactDemographic | A "demographics" object that contains enhanced and custom contact demographics |
Education | List of ContactEducation | |
JobHistory | List of ContactJobHistory | |
Addresses | List of ContactAddress | |
PhoneNumbers | List of ContactPhone | |
EmailAddresses | List of ContactEmail | |
Orders | List of ContactProductOrder |
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 |
Groups
This object defines a contact's relationship to a Group (Community or Security) and pertinent information on the reference Group.
Field | Data Type | Notes |
---|---|---|
InitialJoinDate | DateTime | Date the contact joined this reference Group |
BeginDate | DateTime | Start of this relationship term; null will be interpreted as "far in the past" / "active" |
EndDate | DateTime | End of this relationship term; null will be interpreted as "open-ended" |
GroupId | string | Unique ID |
GroupName | string | Human-readable name for the reference Group |
GroupType | string |
Categorization field such as, Committee, Chapter, Membership, or Event. By default these types determine if the group is a Community Group or a Security Group: Committee, Chapter, or Event = Community Group Membership = Security Group If you use other GroupTypes, please work with support to ensure those are configured in Higher Logic to create the group type needed. |
GroupSubType | string | Second categorization field (optional) |
Role | string | Contact's role in the reference Group such as, President and Treasurer |
Demographics
This object defines a single custom demographic (one outside the contact object's model).
- Pick demographics (single or multi-pick) are denoted with DataType = "pick."
- All other DataTypes are treated as free-form demographics.
Field | Data Type | Notes when DataType = "pick" |
Notes for Free Form |
---|---|---|---|
DemographicId | string | Unique ID for Pick option | Should be blank |
DemographicValue | string | Label for Pick option | DataType-appropriate value |
DemographicTypeId | string | Unique ID for demographic type | |
DemographicTypeValue | string | Label for demographic type | |
DataType | string (known values) | Valid values: text, integer, decimal, datetime, pick |
Education
This object defines a single education entry for a contact.
Field | Data Type | Notes |
---|---|---|
SchoolName | string | |
City | string | |
State | string | |
Country | string | |
FromYear | integer | Four-digit year |
ToYear | integer | Four-digit year |
DegreeYear | integer | Four-digit year |
IsHighestDegreeAttained | bool | |
Degree | string | |
FieldOfStudy | string | |
Advisor | string | |
Dissertation | string |
JobHistory
This object defines a single work-history entry for a contact.
Field | Data Type | Notes |
---|---|---|
CompanyName | string | |
CompanyId | string | Unique ID of company; if applicable and in membership system |
Title | string | |
City | string | |
State | string | |
Country | string | |
StartDate | DateTime | |
EndDate | DateTime | |
IsPresent | bool | |
WebsiteURL | string |
Addresses
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 |
PhoneNumbers
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 |
EmailAddresses
This object defines a single email address entry for a contact.
Field | Data Type | Notes |
---|---|---|
EmailAddress | string | |
EmailType | string | |
IsPreferred | boolean | |
DoNotPublish | boolean |
Orders
This object defines a single order-line item for a purchased product.
NOTE: The OrderId-and-ProductId combination must be unique.
Field | Data Type | Notes |
---|---|---|
OrderId | string | |
ProductId | string | |
ProductQuantity | integer | |
ProductName | string | |
ProductType | string | |
ProductPrice | string | |
OrderDate | DateTime |
POST /contactinfo
Request headers
- Key = ApiKey
- Value = API Key for the tenant.
Request body
[
{
"ContactDetails": {
"ContactId": "74cec42c-5e4d-e3bd-91ec-917d40a4c9dc",
"Age": 144,
"ContactType": "Non-Member",
"Birthday": "1908-02-21T12:37:20.258-05:00",
"MemberSince": "1995-09-02T06:50:06.829-04:00",
"MemberExpiresOn": "2022-12-31T17:20:11.441-05:00",
"Designation": "JD",
"PrimaryEmailAddress": "Drew96@gmail.com",
"Prefix": null,
"FirstName": "Drew",
"MiddleName": null,
"LastName": "Bernier",
"InformalName": null,
"Gender": "Male",
"Ethnicity": null,
"Suffix": "DDS",
"OrganizationName": "Ratke - Bogan",
"Title": "Internal Paradigm Officer",
"ParentContactId": "51272db8-3976-28f5-3138-622767b54c18",
"PrimaryContactContactId": null,
"ExcludeFromDirectory": false,
"DoNotEmail": true,
"IsMember": false,
"IsOrganization": false,
"AlternativeContactId": "6641329",
"Bio": "AGP",
"WebsiteURL": "http://ashtyn.net",
"ProfileImageURL": null,
"FacebookURL": null,
"TwitterURL": null,
"LinkedinURL": null,
"BloggerURL": null,
"OtherSocialURL": null,
"IsDeleted": false
},
"Groups": [
{
"InitialJoinDate": "2015-04-19T12:25:50.537-04:00",
"BeginDate": "2016-06-01T00:17:25.172-04:00",
"EndDate": "2021-01-19T11:48:15.324-05:00",
"GroupId": "d76cac90-1156-e9ae-45c5-635832cba28d",
"GroupName": "Investor Matrix Indigo",
"GroupType": "Chapter",
"GroupSubType": null,
"Role": "Chair"
}
],
"Demographics": [
{
"DemographicId": "Monday",
"DemographicValue": "Monday",
"DemographicTypeId": "Favorite_Weekday",
"DemographicTypeValue": "Favorite Weekday",
"DataType": "pick"
}
],
"Education": [
{
"SchoolName": "Tennessee University",
"City": "Lake Hattie",
"State": "Tennessee",
"Country": "United States",
"FromYear": 2008,
"ToYear": 2012,
"DegreeYear": 2012,
"IsHighestDegreeAttained": true,
"Degree": "General Studies",
"FieldOfStudy": "History",
"Advisor": "Professor Carlee Hauck",
"Dissertation": "Not applicable"
}
],
"JobHistory": [
{
"CompanyName": "O'Conner, Wuckert and Walsh",
"CompanyId": "2bfe2f9d-e34d-fc9e-50f7-b6e3f5052c78",
"Title": "CEO",
"City": "Botsfordmouth",
"State": "North Dakota",
"Country": "United States",
"StartDate": "2016-01-01T00:00:00.000-05:00",
"EndDate": "2020-01-01T00:00:00.000-05:00",
"IsPresent": true,
"WebsiteURL": "oconnerwuckertandwalsh.com"
}
],
"Addresses": [
{
"AddressName": "Current Address",
"AddressLine1": "445 Kassulke Glen",
"AddressLine2": "Suite 372",
"AddressLine3": null,
"City": "Isaiasview",
"StateProvince": "Georgia",
"PostalCode": "12345-6789",
"CountryCode": "KR",
"AddressType": "Main",
"Latitude": 51.5702,
"Longitude": 46.5946,
"DoNotPublish": true,
"IsBill": false,
"IsShip": true,
"IsMail": false,
"IsPrimary": true
}
],
"PhoneNumbers": [
{
"FormattedNumber": "655-313-6133",
"PhoneType": "Main Phone",
"IsPreferred": false,
"IsSmsPreferred": true,
"DoNotPublish": false
}
],
"EmailAddresses": [
{
"EmailAddress": "Norbert_Witting27@hotmail.com",
"EmailType": "Primary Email",
"IsPreferred": true,
"DoNotPublish": true
}
],
"Orders": [
{
"OrderId": "d90f6a4e-5fb5-faee-5ffa-2e8a993594e2",
"ProductId": "4301b40d-c0af-6341-018e-7d596d971e20",
"ProductQuantity": 65,
"ProductName": "Unbranded Wooden Chair",
"ProductType": "Chairs",
"ProductPrice": "398.09",
"OrderDate": "2020-02-08T23:44:00.128-05:00"
}
]
},
{
"ContactDetails": {
"ContactId": "aafdd36c-b35c-ee5c-5892-9098a09f2a81",
"FirstName": "Roy",
"LastName": "Mayert",
"IsOrganization": false
}
},
{
"ContactDetails": {
"ContactId": "7c1909f7-5690-00b6-f89c-17d2867d1a19",
"OrganizationName": "Kohler - Christiansen",
"IsOrganization": true
}
},
{
"ContactDetails": {
"ContactId": "777f1a14-eee4-7d46-1e7b-3194da7813df",
"FirstName": "Lilliana",
"LastName": "Jacobi",
"IsDeleted": true
}
}
]
List
This object defines an action performed on the roster of a Marketing Automation List. Three operation modes are supported:
- Append - Add the specified ContactIds to the List; create the List if necessary.
- Remove - Remove the specified ContactIds from the List.
-
Replace - Replace everyone currently in the List with ContactIds.
- Remove everyone from the List by making a "Replace" request with no ContactIds.
Field | Data Type | Notes |
---|---|---|
ListName | string | |
ListId | string | |
ListType | string | |
ContactIds | List of string | |
Mode | string (known values) | Valid values: Append, Remove, and Replace |
POST /list
Request headers
- ApiKey = API Key for the tenant.
Request body
{
"ContactIds": null,
"ListId": "LIST1",
"ListName": "Test List 1",
"ListType": "Awesome List",
"Mode": "Append"
}
Meeting
This object defines a single reference-calendar event. It is not contact related.
Field | Data Type | Notes |
---|---|---|
MeetingId | string | Unique ID |
Title | string | |
Description | string | |
MeetingType | string | |
SubType | string | |
BeginDate | DateTime | |
EndDate | DateTime | |
TimeZone | string | BeginDate and EndDate should be complete and contain an offset from UTC. TimeZone is optional and used only for disambiguation between time zones with the same UTC offset. When provided, must be tz database name. |
PublishOn | DateTime | Null/DateTime.Min = publish now |
RegistrationOpenDate | DateTime | Null/DateTime.Min = open registration |
RegistrationCloseDate | DateTime | Handle multiple registration cutoffs for different rates. |
RegistrationDateAlternative | DateTime | |
Price | string | |
PriceAlternative | string | |
IsBreakout | boolean | |
LocationName | string | |
AddressLine1 | string | |
AddressLine2 | string | |
AddressLine3 | string | |
City | string | |
State | string | |
PostalCode | string | |
Country | string | |
RegistrationUrl | string | |
DetailsUrl | string | |
IsDeleted | boolean | Soft delete; when true, only MeetingId is required |
POST /meeting
Request headers
- ApiKey = API Key for the tenant.
Request body
[
{
"MeetingId": "ANNUALCONF20202",
"Title": "Annual ACME Conference",
"Description": "Annual ACME Conference",
"MeetingType": "Annual Conference",
"SubType": null,
"BeginDate": "2020-01-23T09:28:55.366-05:00",
"EndDate": "2020-01-23T10:28:55.366-05:00",
"TimeZone": null,
"PublishOn": "0001-01-01T00:00:00.000-05:00",
"RegistrationOpenDate": "2020-01-16T09:28:55.366-05:00",
"RegistrationCloseDate": "2020-01-23T09:28:55.366-05:00",
"RegistrationDateAlternative": "0001-01-01T00:00:00.000-05:00",
"Price": "66.73",
"PriceAlternative": null,
"IsBreakout": false,
"LocationName": "Fancy Hotel",
"AddressLine1": "7577 Ritchie Mountains",
"AddressLine2": null,
"AddressLine3": null,
"City": "Citlalliville",
"State": "Massachusetts",
"PostalCode": "12345-6789",
"Country": "US",
"RegistrationURL": null,
"DetailsURL": "https://leanna.biz",
"IsDeleted": false
}
]
Product
This object defines a product that the customer has available for purchase.
Field | Data Type | Notes |
---|---|---|
Name | string | |
Description | string | |
DetailsURL | string | Link to a page that has more product details |
PurchaseURL | string | Link to a page to purchase the product |
ProductId | string | Unique ID |
ProductType | string | Product Category Name (e.g., Publication, Donation) |
ProductTypeDesc | string | Product Category Description, if applicable |
ProductSubtype | string | Additional Category Name |
ProductSubtypeDesc | string | Additional Category Description, if applicable |
VendorId | string | |
VendorName | string | |
UnitPrice | string | |
UnitPriceAlt1 | string | Alternative Rates. Can be matched with PriceDate1 and PriceDate2 to create functional alternative rate periods, such as Early Birds. |
UnitPriceAlt2 | string | |
PriceDate1 | DateTime | See Alternative Rates above |
PriceDate2 | DateTime | |
PublishOn | DateTime | Date the product should start being visible to end users |
ExpiresOn | DateTime | Date the product should cease being visible to end users |
IsDeleted | boolean | Soft delete; when true, only ProductId is required |
POST /product
Request headers
- ApiKey = API Key for the tenant.
Request body
[
{
"Name": "Handcrafted Wooden Tuna",
"Description": "Handcrafted Wooden Tuna",
"DetailsURL": null,
"PurchaseURL": null,
"ProductId": "ec4d3188-0e8b-7508-39df-5cbc9242079b",
"ProductType": "Outdoors, Sports & Garden",
"ProductTypeDesc": "Outdoors, Sports & Garden",
"ProductSubtype": null,
"ProductSubtypeDesc": null,
"VendorId": "fb3021e4-03e1-6606-dc42-c9184cb290fc",
"VendorName": "Runolfsson LLC",
"UnitPrice": "874.97",
"UnitPriceAlt1": null,
"UnitPriceAlt2": null,
"PriceDate1": "0001-01-01T00:00:00.000-05:00",
"PriceDate2": "0001-01-01T00:00:00.000-05:00",
"PublishOn": "0001-01-01T00:00:00.000-05:00",
"ExpiresOn": "0001-01-01T00:00:00.000-05:00",
"IsDeleted": false
}
]
Error codes
HTTP Status Code | Explanation | Troubleshooting |
---|---|---|
401 | 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 to be investigated. | The engineering team will have to look into this error. |