Publish a Custom Review

How to upload external reviews to Guesty

Overview

Guesty lets you upload external reviews from channels that Guesty doesn't automatically ingest. You will be able to use these reviews with your booking websites and for analytical reports. There are two parts:

  1. Create a custom channel name
  2. Publish a custom review

Step 1: Create a custom channel name

This feature is unrelated to the existing reservation source names. You need to define a separate custom name for each relevant (direct) review source. Do not use this to upload reviews for Airbnb, Booking.com, Vrbo, or any other channel that integrates directly into Guesty and from which Guesty imported public reviews.


MethodKey URL
POST/reviews/custom-channels

Sample request

curl --location 'https://open-api.guesty.com/v1/reviews/custom-channels' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer {token}' \
--data '
{
  "customChannelName": "affiliate_website_a"
}
'

Sample response**

201 Created without a payload.


Step 2: Publish a custom review

Now that you have a custom review name, you can proceed to publish reviews.



Sample request

curl --location 'https://open-api.guesty.com/v1/reviews/custom-channel-reviews' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'Authorization: Bearer {token}' \
--data '
{
  "categoryRatings": {
    "accuracy": 5,
    "cleanliness": 4,
    "communication": 4,
    "location": 3
  },
  "customChannelName": "affiliate_website_a",
  "internalReservationId": "6614f47645e1aae104df2e05",
  "externalReviewId": "afwr_103",
  "createdAt": "2026-01-15T10:30:00.000Z",
  "updatedAt": "2026-01-15T10:30:00.000Z",
  "rating": 5,
  "bodyText": "Excellent location, everything was provided for a comfortable stay, and there are restaurants within walking distance.",
  "reviewerName": "Jon Jonzz",
  "titleText": "Excellent location",
  "locale": "en-US"
}
'

Sample response

{
    "data": {
        "accountId": "66053c21dd2adbdfb3b383b7",
        "externalReviewId": "afwr_103",
        "channelId": "custom",
        "listingId": "66054019764cbb000f37c450",
        "reservationId": "6614f47645e1aae104df2e05",
        "guestId": "660d12ae52eba69330c33755",
        "createdAt": "2026-01-15T10:30:00.000Z",
        "updatedAt": "2026-01-15T10:30:00.000Z",
        "createdAtGuesty": "2026-03-16T18:16:44.719Z",
        "updatedAtGuesty": "2026-03-17T09:29:53.955Z",
        "rawReview": {
            "categoryRatings": {
                "accuracy": 5,
                "cleanliness": 4,
                "communication": 4,
                "location": 3
            },
            "customChannelName": "affiliate_website_a",
            "internalReservationId": "6614f47645e1aae104df2e05",
            "externalReviewId": "afwr_103",
            "createdAt": "2026-01-15T10:30:00.000Z",
            "updatedAt": "2026-01-15T10:30:00.000Z",
            "rating": 5,
            "bodyText": "Excellent location, everything was provided for a comfortable stay, and there are restaurants within walking distance.",
            "reviewerName": "Jon Jonzz",
            "titleText": "Excellent location",
            "locale": "il"
        },
        "contents": {
            "body": "Excellent location, everything was provided for a comfortable stay, and there are restaurants within walking distance.",
            "reviewerName": "Jon Jonzz",
            "title": "Excellent location",
            "locale": "en-US",
            "rating": 10
        },
        "_id": "69b91f115bac66a7c25ff644",
        "customChannelName": "affiliate_website_a"
    }
}

Things to note

  • rating: The maximum score for the overall or average rating is 5.
  • categoryRatings: These are custom metrics that you define for yourself. The maximum score for each rating is 5.
  • externalReviewId: A non-empty string containing only lowercase letters (a–z), digits (0–9), and underscores (_).
  • locale: The review IETF BCP 47 language tag or ISO 3166 alpha 2 country code .

Troubleshooting

Custom channel was not found

This feature has no relation to existing reservation source names. You must first define a custom review channel name and provide it as the customChannelName in the body of your custom review request.

Bad request

Please refer to the "Things to Note" section above and ensure you are providing supported values in the required syntax for those fields in your request.