Skip to main content

Birdeye Native Integration - Carestack

Updated in the last hour

The information contained in this document is confidential, privileged, and only for the use of internal Birdeye users. This document may not be used, published or redistributed.

This integration is supported for both SMB & Enterprise businesses.

NOTE: If there is an enterprise business to be set up and there are unique sign-in required for every location, such integration should be set up as an SMB i.e an integration group should be created for every location.

Integrating Birdeye with Carestack
User Manual - SUPPORT ARTICLE

Carestack is a cloud-based dental Practice Management Software (PMS) for dentists. The PMS supports various features, including scheduling, clinical, billing, patient engagement, and reporting needs of dental offices of any size - whether a single location or a large multi-site DSO.

Birdeye can seamlessly integrate with your Carestack account and automatically send review solicitations to your patients. Integrating Carestack with Birdeye will automate the process of sending out review requests to patients daily.

Table of Contents


Integration Requirements

Triggers supported

Birdeye allow you to fetch data from your CRM using a predefined trigger. Here is the supported trigger for Carestack:

Trigger Display Name

Trigger Name/Value

Trigger Description

Carestack Appointment Trigger Service

Carestack Appointment Trigger

This trigger is used to fetch appointment details for Carestack

Information from Birdeye Dashboard

  1. For single location SMB account - Business ID
    Login to your Birdeye account, go to Left Navigation Rail and click on ‘Settings’. Once the new page appears, click ‘Integrations’ and select ‘API.’

    You will find the ‘Business ID’ and ‘API key’ shown in the image.

  2. For multi-location accounts - Enterprise ID and Business IDs of all locations
    Enterprise ID

Business IDs of all locations

Login to your Birdeye account, go to Left Navigation Rail and click ‘Settings’. Once the new page appears, click ‘Profile’ and select ‘Business Profiles.’

To view the Location ID, hover over the ‘Status’ of the location.

Steps to onboarding a new client

When a new client will onboard with Birdeye, the client needs to send an email to the following contacts of Carestack Support (tamojitsengupta@carestack.com, karthikraveendran@carestack.com, deepakn@carestack.com) to get the Account Key and Account ID.

Once these emails are sent, the Carestack team sets up the Production API credentials for the right company. The account keys and ID are then shared with the client to pass to Birdeye as needed.


Integration Process

Before you can integrate Carestack with Birdeye, you will need to set up the following configurations on the integration support dashboard:

To set up native integration, we have an integration support dashboard, where we need to set up the integration and then follow these steps to complete the configuration.

Login

  1. After successfully logging in to the integration dashboard, you have to click on ‘BE integration’ and then ‘Add Integration.’

  2. Search for the Carestack CRM in the search bar and select it. Click on ‘Next’.

Manage Triggers

The trigger is automatically selected as only one trigger is supported.

Note: To fetch information for all the triggers available using curl commands, use this command. To replace triggers, use this curl command.

Manage Properties

Here; you can manage group-level properties, which will be applied to all locations under a CRM.

  1. Customer fetch delay: It is used if businesses want to send review requests with a delay (number of days).

  2. Carestack Account Key: Add the client-supplied Carestack Account Key.

  3. Carestack Customer Domain: Add the Carestack Customer Domain that the client provided.
    NOTE:When the client provides the URL, copy it as the image highlights.

  4. Carestack Account Id: Add the Carestack Account ID, which the client provides.

Note: This step will create a group for our integration. Alternatively, you can do it via curl commands.

For SMB accounts, you can access the curl command.

For Enterprise accounts, you can access the curl command.

Manage Locations

For Single Location/Multi-Location Accounts, select the drop-down and click on ‘Add.’
(In the case of Single Location accounts, it will give you only one option).

A drawer will appear on the right-hand side.

The Status, Frequency, and Next Runtime will be set by default. You can make changes if required.

  1. Status: It shows the integration status (Active or inactive).

  2. Frequency: It is the number of times integration will sync with CRM (days or hours).

  3. Next RunTime: It is the next scheduled time when the integration will run.

  4. Carestack Appointment Status: Enter the appointment statuses separated by commas for which a review request needs to be sent. To fetch the appointment status type, execute this curl command.

  5. Carestack Location ID: Enter the comma-separated location ID for which customer check-ins must be done. To fetch the location ID, execute this curl command.
    NOTE: This property is mandatory for enterprise business.

  6. Customer fetch delay: It is used if businesses want to send review requests with a delay (number of days).

Override Group Properties: With this, you can override the API Key.

Click on ‘Next’ and click on ‘Save.’

Note:

  1. For SMB: You can use ‘manage the locations’ using this curl command.

  2. For Enterprise: You can use ‘manage the locations’ using this curl command.


APIs to fetch Location ID and Appointment status type

To fetch the location ID, hit this curl command

curl --location --request GET 'https://partners.sb.carestack.com/api/v1.0/locations' \
--header 'VendorKey: 67076503-3E09-43C6-9D89-DE90D7FC7DBD' \
--header 'AccountKey: E9BA1ED1-0ED8-46FA-8276-95DEAF09DCAA' \
--header 'AccountId: 10714' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json'

NOTE:

  1. Replace the Account Key and Accound ID which is provided by the client in the mentioned curl command.

  2. The vendor key remains the same for all clients.

  3. When the client provides the URL, copy only the ‘partners.sb’

Sample response:

[
{
"id": 1,
"shortName": "CARE",
"name": "CareStack Dental",
"email": "partners@demo.com",
"timeZone": "Eastern Standard Time",
"phone1": "(123) 456-7890",
"phone2": "",
"fax": "",
"website": "",
"logoUrl": "",
"npi": "1111111111",
"taxId": "01-0101010",
"salesTaxPercentage": 0.00,
"address": {
"addressLine1": "Please Fill AddressLine1",
"addressLine2": "",
"city": "Kissimmee",
"state": "FL",
"zipCode": "34747-1818"
}
},
{
"id": 19031,
"shortName": "CareDemo",
"name": "Carestack Demo",
"email": "caredemo@carestack.com",
"timeZone": "Eastern Standard Time",
"phone1": "(123) 456-7890",
"phone2": "",
"fax": "",
"website": null,
"logoUrl": "",
"npi": "",
"taxId": "",
"salesTaxPercentage": 0.00,
"address": {
"addressLine1": "Please Fill AddressLine1",
"addressLine2": "Please Fill AddressLine2",
"city": "Kissimmee",
"state": "FL",
"zipCode": "34747-1818"
}
},
{
"id": 19032,
"shortName": "CareFlow",
"name": "Carestack Flow",
"email": "careflowdemo@carestack.com",
"timeZone": "Eastern Standard Time",
"phone1": "(123) 456-7890",
"phone2": "",
"fax": "",
"website": null,
"logoUrl": "",
"npi": "",
"taxId": "",
"salesTaxPercentage": 0.00,
"address": {
"addressLine1": "Please Fill AddressLine1",
"addressLine2": "Please Fill AddressLine2",
"city": "Kissimmee",
"state": "FL",
"zipCode": "34747-1818"
}
}
]

To fetch the appointment status type

curl --location --request GET 'https://partners.sb.carestack.com/api/v1.0/appointment-status' \
--header 'VendorKey: 67076503-3E09-43C6-9D89-DE90D7FC7DBD' \
--header 'AccountKey: E9BA1ED1-0ED8-46FA-8276-95DEAF09DCAA' \
--header 'AccountId: 10714' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json'

Sample Response:

[
{
"id": 85,
"name": "Scheduled",
"description": "Scheduled",
"isSystem": true,
"isActive": false,
"label": "S",
"color": "00aaff",
"confirmationStatus": 3,
"threshold": null
},
{
"id": 86,
"name": "Checked Out",
"description": "Checked Out",
"isSystem": true,
"isActive": false,
"label": "C",
"color": "00aa00",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 87,
"name": "No Show",
"description": "No Show",
"isSystem": true,
"isActive": false,
"label": "",
"color": "",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 88,
"name": "Cancelled",
"description": "Cancelled",
"isSystem": true,
"isActive": false,
"label": "",
"color": "",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 89,
"name": "Deleted",
"description": "Deleted",
"isSystem": true,
"isActive": false,
"label": "",
"color": "",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 90,
"name": "Rescheduled",
"description": "Rescheduled",
"isSystem": true,
"isActive": false,
"label": "",
"color": "",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 91,
"name": "Blocked",
"description": "Blocked",
"isSystem": true,
"isActive": false,
"label": "",
"color": "",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 92,
"name": "Arrived",
"description": "",
"isSystem": false,
"isActive": false,
"label": "AR",
"color": "bb00ff",
"confirmationStatus": 4,
"threshold": null
},
{
"id": 93,
"name": "Ready to Seat",
"description": "",
"isSystem": false,
"isActive": false,
"label": "RS",
"color": "39a5e7",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 94,
"name": "In Operatory",
"description": "",
"isSystem": false,
"isActive": false,
"label": "OP",
"color": "000000",
"confirmationStatus": 1,
"threshold": null
},
{
"id": 95,
"name": "Left Message",
"description": "",
"isSystem": false,
"isActive": false,
"label": "LM",
"color": "c70000",
"confirmationStatus": 3,
"threshold": null
},
{
"id": 97,
"name": "Confirmed",
"description": "Patient confirmed verbally over the phone. ",
"isSystem": false,
"isActive": false,
"label": "CF",
"color": "53e253",
"confirmationStatus": 2,
"threshold": null
},
{
"id": 35719,
"name": "Unable to Reach",
"description": "",
"isSystem": false,
"isActive": false,
"label": "UR",
"color": "ff0000",
"confirmationStatus": 3,
"threshold": null
},
{
"id": 35720,
"name": "Confirmed Electronically",
"description": "Patient confirmed by email or text. ",
"isSystem": false,
"isActive": false,
"label": "CE",
"color": "40c431",
"confirmationStatus": 2,
"threshold": null
}
]

Curl Commands

Before you can integrate Carestack with Birdeye, you will need to set up the following configurations:

A business integration group is a configuration that supports the business hierarchy of individual businesses on the Birdeye platform. The common properties for all business integrations are entered at the group level. Setting up a business integration group allows you to associate multiple business locations with the Enterprise account. Below is the list of curl commands you will need to run to set this up.

Create Integration Group for SMB Business (Curl Command)

Copy this Curl Command

curl --location --request PUT 'https://common-services.Birdeye.com/integration/add/businessintegrationgroup' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data-raw '{
"parentBusinessNumber": 155802718182498,
"integrationSourceId": 124,
"integrationGroupProperties": [
{
"propertyKey": "carestack.customer.domain",
"propertyValue": "partners.sb",
"isSecure": false
},
{
"propertyKey": "carestack.account.key",
"propertyValue": "E9BA1ED1-0ED8-46FA-8276-95DEAF09DCAA",
"isSecure": true
},
{
"propertyKey": "carestack.account.id",
"propertyValue": "10714",
"isSecure": true
}
],
"integrationGroupTriggers": [
{
"triggerId": 139,
"triggerTypeId": 1
}
]
}'
  • 155802718182498 - Business ID - This is a Business ID for a single location SMB account

  • 139 - Integration Trigger ID - Can be one or more triggers. Ask the client what trigger they would like to integrate with, then run the curl command to fetch all possible triggers for Carestack. Identify the trigger ID(s) and insert (use commas) in case of multiple trigger IDs.

Create Integration Group for Enterprise Business (Curl Command)

Copy this Curl Command

curl --location --request PUT 'https://common-services.Birdeye.com/integration/add/businessintegrationgroup' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data-raw '{
"parentBusinessNumber": 155802718182498,
"integrationSourceId": 124,
"integrationGroupProperties": [
{
"propertyKey": "carestack.customer.domain",
"propertyValue": "partners.sb",
"isSecure": false
},
{
"propertyKey": "carestack.account.key",
"propertyValue": "E9BA1ED1-0ED8-46FA-8276-95DEAF09DCAA",
"isSecure": true
},
{
"propertyKey": "carestack.account.id",
"propertyValue": "10714",
"isSecure": true
}
],
"integrationGroupTriggers": [
{
"triggerId": 139,
"triggerTypeId": 1
}
]
}'
  • 155802718182498 - Business ID - This is Enterprise ID for a multi-location account and Business ID for a single location SMB account.

  • 139 - Integration Trigger ID - This can be one or more triggers. Ask the client what trigger they would like to integrate with, then run the curl command to fetch all possible triggers for Carestack. Identify the trigger ID(s) and insert (use commas) in case of multiple trigger IDs.

Fetch information for all the triggers available for Carestack (Curl Command)

Copy this Curl Command

curl --location --request GET 'https://common-services.Birdeye.com/integration/trigger/integrationtriggers/sourceid/124' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json'

Sample response: A sample response like this would appear after you run the curl command. The response will have the trigger name, description and ID. This trigger ID will be utilized while creating the integration group. Integration can have one or more triggers. To use multiple triggers, enter comma-separated values while creating the integration group.

[
{
"id": 139,
"triggerService": "carestackAppointmentTriggerServiceImpl",
"displayName": "CareStack Appointment Trigger Service",
"description": "This trigger is used to fetch appointment details for CareStack",
"active": true,
"integrationTriggerType": {
"id": 1,
"name": "JOB"
},
"actionGroupId": 1,
"sourceIdsList": [
124
],
"triggerName": "CareStack Appointment Trigger",
"caseTypeId": 1
}
]

Find business integration group details (Curl Command)

Copy this Curl Command

curl --location --request GET 'https://common-services.birdeye.com/integration/businessintegrationgroup/155802718182498' \
--header 'Cache-Control: no-cache'

Sample Response

{
"groupId": 23995,
"integrationSourceType": {
"id": 124,
"integrationSource": "CARESTACK",
"sourceCategory": "Dental",
"integrationType": "Birdeye API",
"integrationPlan": "Standard",
"oauthEnabled": false
},
"integrationGroupTriggers": [
{
"triggerId": 139,
"triggerTypeId": 1,
"actionIds": [
1
]
}
]
}
]
  • 23995 - Group ID: A group ID will be returned in the sample response with the details of the existing triggers for a business.

  • 155802718182498 - Business ID: Enter the Business ID here to get the integration group details for a business.

Trigger Information: Only required if the client wants a change (Curl Command)

Copy this Curl Command

curl --location --request POST 'https://common-services.birdeye.com/integration/update/businessintegrationgroup?replaceTriggers=true' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data-raw '{
"groupId": 23995,
"integrationGroupTriggers": [
{
"triggerId": 139,
"triggerTypeId": 1
}
]
}'
  • replaceTriggers=true - To replace existing trigger(s), enter the value for replaceTriggers as true. To add a new trigger(s) to the existing list, the value for replaceTriggers should be false.

  • 23995 - Group ID: The Group ID which was returned in the previous step will be entered here.

  • 139 - Trigger ID: Enter the Trigger ID (s) which need to be added or updated to the integration.

Integration Mapping (SMB Businesses)

Once the Integration Group is created, the next step is to create the Integration Mapping.

Copy this Curl Command

curl --location --request PUT 'https://common-services.birdeye.com/integration/add/businessintegrationmapping' \
--header 'Content-Type: application/json' \
--data-raw '{
"businessNumber":160283190794732,
"integrationGroupId": 23995,
"integrationProperties": [
{
"propertyKey": "carestack.appointment.status",
"propertyValue": "Arrived, Scheduled",
"isSecure": false
},
{
"propertyKey": "carestack.location.id",
"propertyValue": "1, 19031",
"isSecure": false
}
],
"active": true,
"test": false,
"beta": false
}'
  • 155802718182498 - Business ID: Enter the Business ID for the SMB Business.

  • 23995 - Group ID: Enter the Group ID, which was returned when the Integration group was created.

  • true - Active: Enter true to enable the integration.

Integration Mapping (Enterprise Businesses)

Copy this Curl Command

curl --location --request PUT 'https://common-services.birdeye.com/integration/add/businessintegrationmapping' \
--header 'Content-Type: application/json' \
--data-raw '{
"businessNumber":160283190794732,
"integrationGroupId": 23995,
"integrationProperties": [
{
"propertyKey": "carestack.appointment.status",
"propertyValue": "Arrived, Scheduled",
"isSecure": false
},
{
"propertyKey": "carestack.location.id",
"propertyValue": "1, 19031",
"isSecure": false
}
],
"active": true,
"test": false,
"beta": false
}'
  • 155802718182498 - Business ID: Enter the Business ID.

  • 23995 - Group ID: Enter the Group ID, which was returned when the Integration group was created.

  • true - Active: Enter true to enable the integration.

  • New York - Location Name: Enter the Location name as per the name specified in the Carestack account for the Location picklist corresponding to this business.


Important Instructions for Email and SMS opt-in/ opt-out.

Log in to the ‘Carestack’ dashboard. Click on the ‘+ Patient’ tab.

SMS Opt-in and Email opt-out

Enter all the mandatory details, check the box against ‘Text’ and click on ‘Save.’ The subscription status will be SMS subscribed.

Email opt-in and SMS opt-out

Enter all the mandatory details and check the box against ‘Email Notifications’ and click on ‘Save.’ The subscription status will be email subscribed.

SMS & Email opt-in

Enter all the mandatory details, check the box against ‘Email Notifications’ and ‘Text’ and click on ‘Save.’ The subscription status will be both subscribed.

Email & SMS opt-out

Enter all the mandatory details, uncheck the box against ‘Email Notifications’ and ‘Text’ and click on ‘Save.’ The subscription status will be both unsubscribed.


Restriction Reason

Restriction reason is used to identify the contacts who have been opted-out(restricted) from sending a review request. This reason can be fetched from Kibana for contacts that are checked in already.

Possible restriction reasons for Carestack are:

  1. If the appointment status is not configured in the Carestack Appointment Status field.

  2. Customer is inactive.

  3. Phone or Email should be valid for creating a customer Email: null, Phone: null.

  4. Integration is beta.


Troubleshooting steps

If you encounter any of the above restriction reasons, please search the following keys to know the reason for restricting the contact.

  1. If the appointment status is not configured in the Carestack Appointment Status field. Provide the appointment status in the Carestack appointment status field for which you want to send the review request.
    You can configure this Appointment Status with this curl command.

  2. Customer is inactive.
    Check whether the customer is active or not.

  3. Either Phone or Email should be valid for the creation of a customer. Email: null, Phone: null.
    Check the email address and phone number.

  4. Integration is beta.
    Please look up the key beta in kibana to know whether the integration is beta or not.

Did this answer your question?