Review API v2

Review API v2

You will need an API key for authorizing your requests. You can request an API key from our Customer Care team. 
The API key must be passed in an HTTP header named X-CA-AUTH when requesting any of the API endpoints.

The default endpoint is https://api.customer-alliance.com, if not stated differently.

Reviews

GET /reviews/v2/ca.json

The new version of the Review API is available here

API allows access to the data that was collected via Customer Alliance review questionnaires. This may include information such as:

  • Review content;

  • Average rating;

  • Information about the guest leaving the review.

Parameters

All parameters are optional.

Name
Default value
Description
Name
Default value
Description

page

1

Integer greater than or equal to 1.
The number of reviews per request is limited to the value of limit, this parameter is responsible for pagination.

start

180 days before the end date

Date in the YYYY-MM-DD format.
Use this to select the earliest review you wish to see.

end

today

Date in the YYYY-MM-DD format.
Must not be earlier than the value of start.
Use this to select the latest review you wish to see.

category

'average'

A valid review rating category, also known as a 'criteria'.
A list of categories can be seen in the response of this endpoint without supplying the parameters.
Use this to filter reviews by subcategory, e.g, ‘price’, ‘breakfast’, etc.

fromRating

0

Integer between 0 and 100.
The lowest review score you wish included in the result set.

toRating

100

Integer between 0 and 100.
The highest review score you wish included in the result set.

commentStatus

no value

Must be one of:

  • commented

  • not_commented

  • drafted

Filters reviews as to whether they have been commented, not commented or have had a comment drafted.

categoryRatings

0

Either 1 or 0.

published

0

Either 1 or 0.
If the published parameter is added with value 1. The results will only contain reviews that have been published (public reviews).

limit

20

The number of reviews shown per page.

Examples

Shell

curl --header "X-CA-AUTH: <YOUR_API_KEY_HERE>" https://api.customer-alliance.com/reviews/v2/ca.json?page=1&start=2021-01-01&end=2021-01-13&fromRating=0&toRating=100&categoryRatings=1&published=0&limit=20

Response

{ "totalCount": 1, "reviews": [ { "hotel_name": "Restaurant The Eagle", "review_id": "careview52326183", "review_source": "customeralliance", "average_rating_normalized": "90.0000", "average_rating": "4.5000", "reviewer_type": null, "language": "en", "published": false, "reviewer_comment": "It was a nice experience, definitely worth coming again", "reviewer_comment_positive": "", "reviewer_comment_negative": "", "arrival_date": "2021-01-09", "departure_date": "2021-01-09", "review_date": "2021-01-12 09:07:46", "author": "Customer Alliance u.", "category_ratings": { "price": { "rating": 80, "label": "Price", "comment": null }, "service": { "rating": 100, "label": "Service", "comment": null }, "FoodQuality": { "rating": 100, "label": "Quality of Food", "comment": null }, "Atmosphere": { "rating": 80, "label": "Atmosphere", "comment": null } }, "nps": 9, "brand_nps": null, "age": 30, "hotelier_comment": null } ] }

 

GET /reviews/v2/all.json

Review data collected via Customer Alliance questionnaires and reviews from external portals (for example Booking, Google, Expedia, Tripadvisor, HolidayCheck).

Parameters

All parameters are optional.

Name
Default value
Description
Name
Default value
Description

page

1

Integer greater than or equal to 1.
The number of reviews per request is limited to the value of limit, this parameter is responsible for pagination.

start

180 days before the end date

Date in the YYYY-MM-DD format.
Use this to select the earliest review you wish to see.

end

today

Date in the YYYY-MM-DD format.
Must not be earlier than the value of start.
Use this to select the latest review you wish to see.

fromRating

0

Integer between 0 and 100.
The lowest review score you wish included in the result set.

toRating

100

Integer between 0 and 100.
The highest review score you wish included in the result set.

commentStatus

no value

Must be one of:

  • commented

  • not_commented

  • drafted

Filters reviews as to whether they have been commented, not commented or have had a comment drafted.

categoryRatings

0

Either 1 or 0.

published

0

Either 1 or 0.
If the published parameter is added with value 1. The results will only contain reviews that have been published (public reviews).

limit

20

The number of reviews shown per page.

Examples

Shell

curl --header "X-CA-AUTH: <YOUR_API_KEY_HERE>" https://api.customer-alliance.com/reviews/v2/all.json?page=1&start=2025-01-01&end=2025-01-12&categoryRatings=1

Response

{ "totalCount": 3, "reviews": [ { "hotel_name": "Some hotel", "review_id": "careview102033000", "review_source": "customeralliance", "average_rating_normalized": "64", "average_rating": "3.2", "reviewer_type": "alone", "language": "de", "published": false, "hotelier_comment": null, "nps": 2, "brand_nps": null, "reviewer_comment": "Wäre schön gewesen, wenn alles dass bei der Buchung telefonisch vereinbart wurde", "reviewer_comment_positive": null, "reviewer_comment_negative": null, "pms_guest_id": "4f9c8336-789c-4511-9844-20baac154d2e", "arrival_date": "2025-01-03", "departure_date": "2025-01-04", "review_date": "2025-01-06 23:27:19", "author": null, "category_ratings": { "price": { "rating": 40, "label": "Price", "comment": null }, "room": { "rating": 80, "label": "Room", "comment": null }, "location": { "rating": 80, "label": "Location", "comment": null }, "clean": { "rating": 80, "label": "Cleanliness", "comment": null }, "service": { "rating": 40, "label": "Service", "comment": null }, "Funktionalität": { "rating": 80, "label": "Functionality", "comment": null } } }, { "hotel_name": "Some hotel", "review_id": "booking12345_GR_geaK2WuV", "review_source": "booking", "average_rating_normalized": "90", "average_rating": "9", "reviewer_type": null, "language": "en", "published": true, "hotelier_comment": null, "reviewer_comment": null, "reviewer_comment_positive": "transfer services", "reviewer_comment_negative": "bar price", "review_date": "2025-01-08 10:56:41", "author": "John", "category_ratings": { "facilities": { "rating": 100, "comment": null, "label": "Facilities" }, "location": { "rating": 100, "comment": null, "label": "Location" }, "staff": { "rating": 100, "comment": null, "label": "Staff" }, "clean": { "rating": 100, "comment": null, "label": "Cleanliness" }, "comfort": { "rating": 75, "comment": null, "label": "Comfort" }, "price": { "rating": 50, "comment": null, "label": "Price" } } }, { "hotel_name": "Some hotel", "review_id": "expedia34521_6796510d21b7076af1b788b2", "review_source": "expedia", "average_rating_normalized": "100", "average_rating": "10", "reviewer_type": null, "language": "en", "published": true, "hotelier_comment": "Dear Guest,\n\nThank you for taking the time to leave us a review.", "reviewer_comment": "nice location", "reviewer_comment_positive": null, "reviewer_comment_negative": null, "review_date": "2025-01-10 16:15:05", "author": "Anna", "category_ratings": { "condition": { "rating": 100, "comment": null, "label": "Hotel condition" }, "room_clean": { "rating": 100, "comment": null, "label": "Cleanliness & linen change" }, "service": { "rating": 100, "comment": null, "label": "Service" }, "facilities": { "rating": 100, "comment": null, "label": "Facilities" } } }, ] }

Please note that we have the latest version (V3) available here Review API v3

Statistics

GET /statistics/v1/categories.json

Shows the rating categories currently used for aggregation on your API key.
The data refreshes every 2 hours.

Parameters

All parameters are optional.

Name
Default value
Description
Name
Default value
Description

review_subject

First created review subject

It refers to Review Config's hash value. By default access key has access to 100 review subjects, by using  "review_subject" parameter you can specify for which subject you would like to retrieve data.
Must be a value from 'hash' field, looks like: e3600bf31c28b60e

Examples

Shell

curl --header "X-CA-AUTH: YOUR_API_KEY" https://api.customer-alliance.com/statistics/v1/categories.json

Response

The result here will vary depending on the categories configured for your business and the questions marked as 'Show in Statistics' or 'Public' in your questionnaire.

[ "Amenities", "Apartment", "Entertainment", "Hospitality", "Reception", "bar", "beach", "break", "childcare", "clean", "comfort", "conference", "food", "location", "pool", "price", "private_beach", "restaurant", "room", "service", "sport", "value_for_money", "vibe", "wellness", "wifi" ]

 

GET /statistics/v2/general/recent.json

Shows statistics for rating categories, including the overall category, for all reviews authored in the past 6 months.

Parameters

All parameters are optional.

Name
Default value
Description
Name
Default value
Description

_locale

en

Changes the language used to show the category labels.

Must be a valid ISO 3166-1 alpha-2 language code. For example: 'en' for English, 'fr' for French.

review_subject

First created review subject

It refers to Review Config's hash value. By default access key has access to 100 review subjects, by using  "review_subject" parameter you can specify for which subject you would like to retrieve data.
Must be a value from 'hash' field, looks like: e3600bf31c28b60e

published

no value

Possible values: either 0 or 1.

If set to 1 will return only data about published reviews (public reviews).

Examples

Shell

curl --header "X-CA-AUTH: YOUR_API_KEY" https://api.customer-alliance.com/statistics/v2/general/recent.json

Response

{ "start_date": "2020-08-17", "end_date": "2021-02-17", "comment_rate": 30.798478707224334, "category_statistics": { "overall": { "label": "Overall", "average_rating": 90.51546391746737, "review_count": 582, "positive_review_count": 528, "neutral_review_count": 49, "negative_review_count": 5 }, "clean": { "label": "Cleanliness", "average_rating": 96.0, "review_count": 5, "positive_review_count": 5, "neutral_review_count": 0, "negative_review_count": 0 }, "comfort": { "label": "Comfort", "average_rating": 86.66666666666667, "review_count": 3, "positive_review_count": 3, "neutral_review_count": 0, "negative_review_count": 0 }, "food": { "label": "Food", "average_rating": 0.0, "review_count": 0, "positive_review_count": 0, "neutral_review_count": 0, "negative_review_count": 0 }, "location": { "label": "Location", "average_rating": 100.0, "review_count": 3, "positive_review_count": 3, "neutral_review_count": 0, "negative_review_count": 0 }, "price": { "label": "Price", "average_rating": 100.0, "review_count": 4, "positive_review_count": 4, "neutral_review_count": 0, "negative_review_count": 0 }, "restaurant": { "label": "Restaurant", "average_rating": 0.0, "review_count": 0, "positive_review_count": 0, "neutral_review_count": 0, "negative_review_count": 0 }, "room": { "label": "Room", "average_rating": 88.0, "review_count": 5, "positive_review_count": 4, "neutral_review_count": 1, "negative_review_count": 0 }, "service": { "label": "Service", "average_rating": 88.0, "review_count": 5, "positive_review_count": 4, "neutral_review_count": 1, "negative_review_count": 0 } } }

 

GET /statistics/v2/general/total.json

Shows statistics for rating categories, including the overall category, for all known reviews.

If the parameter 'review_subject' is not set, the statistics will be shown for the first created review subject of the api-key.

Parameters

All parameters are optional.

Name
Default value
Description
Name
Default value
Description

_locale

en

Changes the language used to show the category labels.

Must be a valid ISO 3166-1 alpha-2 language code. For example: 'en' for English, 'fr' for French.

review_subject

first created review subject

It refers to Review Config's hash value. By default access key has access to 100 review subjects, by using  "review_subject" parameter you can specify for which subject you would like to retrieve data.
Must be a value from 'hash' field, looks like: e3600bf31c28b60e

published

no value

Possible values: either 0 or 1.

If set to 1 will return only data about published reviews (public reviews).

Examples

Shell

curl --header "X-CA-AUTH: YOUR_API_KEY" https://api.customer-alliance.com/statistics/v2/general/total.json

Response

{ "start_date": null, "end_date": null, "comment_rate": 11.12612972972973, "category_statistics": { "overall": { "label": "Overall", "average_rating": 88.03647184495651, "review_count": 6553, "positive_review_count": 6495, "neutral_review_count": 839, "negative_review_count": 64 }, "clean": { "label": "Cleanliness", "average_rating": 89.97303634044549, "review_count": 5118, "positive_review_count": 66, "neutral_review_count": 3, "negative_review_count": 0 }, "food": { "label": "Food", "average_rating": 0.0, "review_count": 0, "positive_review_count": 0, "neutral_review_count": 0, "negative_review_count": 0 }, "location": { "label": "Location", "average_rating": 83.19193706981318, "review_count": 5085, "positive_review_count": 46, "neutral_review_count": 13, "negative_review_count": 0 }, "price": { "label": "Price", "average_rating": 89.97183098591549, "review_count": 4828, "positive_review_count": 54, "neutral_review_count": 3, "negative_review_count": 0 }, "restaurant": { "label": "Restaurant", "average_rating": 90.0, "review_count": 2, "positive_review_count": 0, "neutral_review_count": 0, "negative_review_count": 0 }, "service": { "label": "Service", "average_rating": 89.07062144180792, "review_count": 354, "positive_review_count": 92, "neutral_review_count": 11, "negative_review_count": 3 } } }

GET /statistics/v2/portal-overview.json

Statistics for all known reviews. Aggregated for overall and broken down by review portal (e.g. Booking.com, Google, Facebook, ...).

Parameters

All parameters are optional.

Name
Default value
Description
Name
Default value
Description

start

180 days before the end date

To select the earliest review you wish to see.

A date of format yyyy-mm-dd, must be before the end date.

end

today

To select the latest review you wish to see.

A date of format yyyy-mm-dd, must be after the start date.

category

average

To filter reviews by subcategory, e.g. price, service, etc.

Must be an available category (to get all the available categories check out the api '/statistics/v1/categories.json').

review_subject

first created review subject

It refers to Review Config's hash value. By default access key has access to 100 review subjects, by using  "review_subject" parameter you can specify for which subject you would like to retrieve data.
Must be a value from 'hash' field, looks like: e3600bf31c28b60e

published

no value

Possible values: either 0 or 1.

If set to 1 will return only data about published reviews (public reviews).

Examples

Shell

curl --header "X-CA-AUTH: YOUR_API_KEY" https://api.customer-alliance.com/statistics/v2/portal-overview.json

Response

{ "reviewCount": 491, "averageRating": 90.32993890011609, "commentRate": 29.14798206278027, "reviewCountPositive": 441, "reviewCountNeutral": 44, "reviewCountNegative": 6, "portalStats": { "customeralliance": { "reviewCount": 2, "reviewCountPositive": 2, "reviewCountNeutral": 0, "reviewCountNegative": 0, "averageRating": 80, "commentRate": null }, "booking": { "reviewCount": 414, "reviewCountPositive": 373, "reviewCountNeutral": 37, "reviewCountNegative": 4, "averageRating": 90.56038647332849, "commentRate": 32.432432432432435 }, "google": { "reviewCount": 61, "reviewCountPositive": 55, "reviewCountNeutral": 4, "reviewCountNegative": 2, "averageRating": 90.49180327867212, "commentRate": 11.475409836065573 }, "hotelscom": { "reviewCount": 3, "reviewCountPositive": 3, "reviewCountNeutral": 0, "reviewCountNegative": 0, "averageRating": 80, "commentRate": 100 }, "hrs": { "reviewCount": 0, "reviewCountPositive": 0, "reviewCountNeutral": 0, "reviewCountNegative": 0, "averageRating": 0, "commentRate": null }, "tripadvisor": { "reviewCount": 11, "reviewCountPositive": 8, "reviewCountNeutral": 3, "reviewCountNegative": 0, "averageRating": 85.45454545454545, "commentRate": 63.63636363636363 }, "tui": { "reviewCount": 0, "reviewCountPositive": 0, "reviewCountNeutral": 0, "reviewCountNegative": 0, "averageRating": 0, "commentRate": null } } }

GET /statistics/v1/reviews-over-time.json

Statistics for all known reviews. Aggregated weekly.

Parameters

All parameters are optional.

Name
Default value
Description
Name
Default value
Description

start

180 days before the end date

To select the earliest review you wish to see.

A date of format yyyy-mm-dd, must be before the end date.

end

today

To select the latest review you wish to see.

A date of format yyyy-mm-dd, must be after the start date.

category

average

To filter reviews by subcategory, e.g. price, service, etc.

Must be an available category (to get all the available categories check out the api '/statistics/v1/categories.json').

review_subject

first created review subject

It refers to Review Config's hash value. By default access key has access to 100 review subjects, by using  "review_subject" parameter you can specify for which subject you would like to retrieve data.
Must be a value from 'hash' field, looks like: e3600bf31c28b60e

forced_interval

depending on time range

Possible value: months.

To force the statistics to be grouped by months. If parameter is not given, then certain rules are applied depending on the time range (see table below).

The time intervals used for grouping are determined by these rules:

Δ = difference in days between start & end
Interval
Description
Δ = difference in days between start & end
Interval
Description

31 days < Δ <= 182 days

weekly

If parameter forced_interval=months is not given, then values by default will be grouped weekly.

182 days < Δ <= 720 days

monthly

Values will be always grouped monthly.

Δ <= 31 days

daily

If parameter forced_interval=months is not given, then values by default will be grouped daily.

Δ > 720 days

yearly

If parameter forced_interval=months is not given, then values by default will be grouped yearly.

Examples

Shell

curl --header "X-CA-AUTH: YOUR_API_KEY" https://api.customer-alliance.com/statistics/v1/reviews-over-time.json

Response

{ "Hotel XYZ": { "8 / 2020": { "review_count": 54, "positive_reviews": 49, "neutral_reviews": 5, "negative_reviews": 0 }, "9 / 2020": { "review_count": 144, "positive_reviews": 129, "neutral_reviews": 13, "negative_reviews": 2 }, "10 / 2020": { "review_count": 88, "positive_reviews": 83, "neutral_reviews": 4, "negative_reviews": 1 }, "11 / 2020": { "review_count": 77, "positive_reviews": 70, "neutral_reviews": 7, "negative_reviews": 0 }, "12 / 2020": { "review_count": 69, "positive_reviews": 63, "neutral_reviews": 5, "negative_reviews": 1 }, "1 / 2021": { "review_count": 64, "positive_reviews": 52, "neutral_reviews": 12, "negative_reviews": 0 }, "2 / 2021": { "review_count": 55, "positive_reviews": 51, "neutral_reviews": 3, "negative_reviews": 1 } } }

Feedbacks

GET /feedback/v2/questionnaires.json

Allows access feedback questionnaires (receive list of feedback questionnaires).

Parameters

This endpoint has no parameters.

Examples

Shell

$ curl --header "X-CA-AUTH: <YOUR_API_KEY_HERE>" https://api.customer-alliance.com/feedback/v2/questionnaires.json

Response

[ { "id": 699083, "name": "Breakfast Survey" }, { "id": 699093, "name": "During Stay Feedback" } ]

GET /feedback/v2/stream.json

Allows access to all of the feedbacks that were gathered.

Parameters

Name
Default value
Description
Name
Default value
Description

questionnaireIds

no value

A required parameter with Interger value.

Note: this parameter may be included multiple times, e.g.
questionnaireIds=1000&questionnaireIds=1001

page

1

Integer greater than or equal to 1.
The number of feedback items per request is limited to the value of limit, this parameter is responsible for pagination.

start

180 days before the end date

Date in the YYYY-MM-DD format.
Use this to select the earliest feedback you wish to see.

end

today

Date in the YYYY-MM-DD format.
Must not be earlier than the start date.
Use this to select the latest feedback you wish to see.

limit

20

Integer between 1 and 50. Used to limit the number of results per page.

commentStatus

no value

Must be one of:

  • commented

  • not_commented

  • drafted

Filters feedbacks as to whether they have been commented, not commented or have had a comment drafted.

language

no value

To show the feedbacks submitted for the selected language. Values can be one of these language codes:

de, en, es, fr, nl, cs, da, hu, it, pl, pt, ru, sr, sv, ar, zh, ja, fi, no

_locale

en

Changes the language used to show the question labels.

Must be a valid ISO 3166-1 alpha-2 language code. For example: 'en' for English, 'fr' for French.

Examples

Shell

$ curl --header "X-CA-AUTH: <YOUR_API_KEY_HERE>" https://api.customer-alliance.com/feedback/v2/stream.json?questionnaireIds=699083

Response

{ "pagination": { "current_page": 1, "total_pages": 1, "total_items": 1 }, "items": [ { "id": 52749453, "language": "en", "created_date": "2021-02-18 12:25:52", "author": { "name": "John", "email": "john@email.com", "age": null }, "meta": { "traveller_type": null, "room_number": null, "arrival_date": "2021-02-01", "departure_date": "2021-02-28" }, "questionnaire": { "id": 699083, "name": "Breakfast Survey" }, "question_answers": [ { "question": { "id": 11918603, "type": "rating", "label": "Service" }, "answer": { "rating": 5, "text": null }, "sub_question_answers": [] }, { "question": { "id": 11918613, "type": "rating", "label": "Buffet / Menu selection" }, "answer": { "rating": 4, "text": null }, "sub_question_answers": [] }, { "question": { "id": 11918623, "type": "rating", "label": "Quality of food" }, "answer": { "rating": 5, "text": null }, "sub_question_answers": [] }, { "question": { "id": 11918633, "type": "rating", "label": "Selection of beverages" }, "answer": { "rating": 3, "text": null }, "sub_question_answers": [] }, { "question": { "id": 11918643, "type": "text", "label": "How would you describe your overall experience?" }, "answer": { "text": "All in all it was almost perfect, except there were no apple juice." }, "sub_question_answers": [] }, { "question": { "id": 11918653, "type": "choice", "label": "Are you a guest of the hotel?" }, "answer": { "choices": [ { "label": "Yes" } ] }, "sub_question_answers": [ { "question": { "id": 11918663, "type": "text", "label": "Your room number" }, "answer": { "text": "119" }, "sub_question_answers": [] } ] }, { "question": { "id": 11918673, "type": "text", "label": "Your email address" }, "answer": { "text": "john@email.com" }, "sub_question_answers": [] } ], "comment": null, "rating_scale": { "min": 1, "max": 5 } } ] }

Monitoring

POST /account/{googlePlaceId}

This API is to be used by a partner to create a monitoring account for one of its customers. A monitoring account is a Customer Alliance account created for the purpose of monitoring a customer's online reviews on the public review portals.

When a monitoring account is created via this API the partner can retrieve an API Key to get access to the customer data of the created monitoring account. Access to the customer data is granted via one of our APIs (JSON or iFrame APIs).

There is a limit on creating monitoring accounts using this API: 50 per day per partner. Reaching the mentioned limit returns a 429 HTTP error in the API request.

Parameters

Name
Default value
Description
Name
Default value
Description

{googlePlaceId}

no value

Google place id.

This is the link to the Google Places API documentation, where Google Places ID can be retrieved: https://developers.google.com/maps/documentation/javascript/examples/places-placeid-finder

Examples

Shell

curl --location --request POST 'https://api.customer-alliance.com/account/{googlePlaceId}' \ --header 'X-CA-AUTH: <YOUR_API_KEY_HERE>'

Below is the JSON structure you can expect from the POST endpoint: 
https://api.customer-alliance.com/account/{googlePlaceId}
Response

{ 'result': 'ok', 'account': { 'id': 1, 'name': 'TEST HOTEL BERLIN', 'address': '118 Ullsteinstr, 10719 Berlin, DE', 'website': 'http://www.test-hotel.de/', 'type': 'Hotel', 'api_key': '9891229a2ef309a123456de0e846ce8c30f8' } }

Guests