Back to top

API Documentation

Testimonials

Overview

Testimonials are user-submitted reviews or endorsements that belong to a brand. They can optionally be linked to email threads (when captured from email conversations). Each testimonial is connected to a contact.

Testimonial

A Testimonial's data model is described in the table below:

Field Type Association Description
id uuid Internal identifier of the object
created_at number Unix timestamp of creation
updated_at number Unix timestamp of last update
brand uuid The brand this testimonial belongs to
user User testimonial.user The user associated with this testimonial
email_thread EmailThread testimonial.email_thread Optional email thread this was captured from
contact Contact testimonial.contact The contact who gave the testimonial
content string The testimonial text content
rating integer Rating from 1-5 (optional)
published_at number Unix timestamp of when the testimonial was published, or null if it has not been published
testimonialtree_review uuid Linked Testimonial Tree review, when imported from Testimonial Tree
created_by uuid User who created this record
updated_by uuid User who last updated this record

TestimonialSettings

A TestimonialSettings's data model is described in the table below:

Field Type Association Description
id uuid Internal identifier of the object
created_at number Unix timestamp of creation
updated_at number Unix timestamp of last update
brand uuid The brand these settings belong to
template_instance TemplateInstance testimonial_settings.template_instance The template instance used for the Rechat capture form
collection_method string Preferred collection destination — Rechat, Google, Zillow, or TestimonialTree. Always set; defaults to Rechat, and connecting Google, Zillow or Testimonial Tree sets it to that source.
zillow_reviewee uuid Linked Zillow reviewee, when Zillow is connected
google_business_account string GBP account resource name, when Google is connected
google_business_location string GBP location resource name (drives the review redirect on the capture page)
testimonialtree_credential TestimonialTreeCredential testimonial_settings.testimonialtree_credential Linked Testimonial Tree agent, when Testimonial Tree is connected

TestimonialTreeCredential

A TestimonialTreeCredential represents a Testimonial Tree agent that a user of the brand connected through the Testimonial Tree authorization flow. Its data model is described in the table below:

Field Type Description
id uuid Internal identifier of the object
created_at number Unix timestamp of creation
updated_at number Unix timestamp of last update
brand uuid The brand this connection belongs to
user uuid The user this connection belongs to
subject string Stable Testimonial Tree agent identifier (sub)
tt_user_id string Testimonial Tree user id
username string Testimonial Tree username
name string Agent’s full name
email string Agent’s email address
company_name string Agent’s company name
parent_username string Username of the agent’s parent (brokerage) account
collection_link string The agent’s unique Testimonial Tree collection URL. Accepts the prefill parameters name, email, company and s (a 1-5 star rating).
revoked boolean Whether the connection was disconnected

Access and refresh tokens are stored encrypted and are never returned by the API.

Endpoints

Get all testimonials for a brand

Get all testimonials for a brand
GET/brands/:id/testimonials

Example URI

GET /brands/:id/testimonials
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
Response  200
HideShow
Body
{
  "code": "OK",
  "data": [
    {
      "id": "1fe4e62f-48bc-4feb-a286-2906c5ce9833",
      "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "content": "This is an amazing real estate service! They helped us find our dream home.",
      "rating": 5,
      "created_at": 1791656559.69392,
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "updated_by": null,
      "captured_at": 1791656559.69392,
      "tags": [],
      "source": "Manual",
      "zillow_review": null,
      "google_review": null,
      "published_at": null,
      "testimonialtree_review": null,
      "type": "testimonial"
    },
    {
      "id": "d83cef5e-6b2e-4c6f-a5e5-c349fd4ee8dd",
      "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "content": "This is an amazing real estate service! They helped us find our dream home.",
      "rating": 5,
      "created_at": 1791656559.69392,
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "updated_by": null,
      "captured_at": 1791656559.69392,
      "tags": [],
      "source": "Manual",
      "zillow_review": null,
      "google_review": null,
      "published_at": null,
      "testimonialtree_review": null,
      "type": "testimonial"
    },
    {
      "id": "1538aac1-bb39-4b53-ac15-776b22b2d691",
      "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "content": "Great service!",
      "rating": null,
      "created_at": 1791656559.69392,
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "updated_by": null,
      "captured_at": 1791656559.69392,
      "tags": [],
      "source": "Manual",
      "zillow_review": null,
      "google_review": null,
      "published_at": null,
      "testimonialtree_review": null,
      "type": "testimonial"
    }
  ],
  "info": {
    "count": 3,
    "total": 3
  }
}

Get a specific testimonial

Get a specific testimonial
GET/brands/:id/testimonials/:testimonial

Example URI

GET /brands/:id/testimonials/:testimonial
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
testimonial
string (required) Example: 1fe4e62f-48bc-4feb-a286-2906c5ce9833
associations
string (required) Example: testimonial.contact
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "1fe4e62f-48bc-4feb-a286-2906c5ce9833",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "contact": {
      "id": "c77cb07d-9d27-4e23-b512-2a418fb27e8b",
      "display_name": "Johnny",
      "partner_name": "Jane Doe",
      "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "brand_id": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "user_id": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "sort_field": "Johnny",
      "last_touch": null,
      "last_touch_action": null,
      "next_touch": null,
      "touch_freq": null,
      "ios_address_book_id": null,
      "android_address_book_id": null,
      "created_at": 1791656560.147586,
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "created_for": "direct_request",
      "updated_for": "direct_request",
      "deleted_for": null,
      "title": null,
      "first_name": "John",
      "partner_first_name": "Jane",
      "middle_name": "M.",
      "last_name": "Doe",
      "partner_last_name": "Doe",
      "marketing_name": null,
      "nickname": "Johnny",
      "email": "[email protected]",
      "primary_email": "[email protected]",
      "emails": [
        "[email protected]"
      ],
      "parked": false,
      "partner_email": "[email protected]",
      "phone_number": "+989124834198",
      "primary_phone_number": "+989124834198",
      "phone_numbers": [
        "+989124834198"
      ],
      "company": "Rechat",
      "birthday": "1970-01-12T00:00:00.000Z",
      "profile_image_url": "https://inomics.com/sites/default/files/pictures/picture-95970-1460131169.png",
      "cover_image_url": "https://inomics.com/sites/default/files/pictures/picture-95970-1460131169.png",
      "job_title": "Contact Test Subject",
      "source_type": "ExplicitlyCreated",
      "source": null,
      "website": [
        "http://www.gholi.com"
      ],
      "tags": [
        "poo",
        "foo",
        "New"
      ],
      "address": [
        {
          "city": "Dallas",
          "full": "Street, Dallas Texas 72890",
          "name": "Street",
          "type": "stdaddr",
          "extra": "Office",
          "line1": "Street",
          "line2": "Dallas Texas 72890",
          "state": "Texas",
          "country": "US",
          "postcode": "72890"
        }
      ],
      "type": "contact"
    },
    "content": "This is an amazing real estate service! They helped us find our dream home.",
    "rating": 5,
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "deleted_at": null,
    "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "updated_by": null,
    "captured_at": 1791656559.69392,
    "tags": [],
    "source": "Manual",
    "zillow_review": null,
    "google_review": null,
    "published_at": null,
    "testimonialtree_review": null,
    "type": "testimonial"
  }
}

Create a testimonial

Create a testimonial
POST/brands/:id/testimonials

Example URI

POST /brands/:id/testimonials
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
associations
string (required) Example: testimonial.contact
Request
HideShow
Body
{
  "content": "This is an amazing real estate service! They helped us find our dream home.",
  "contact": "c77cb07d-9d27-4e23-b512-2a418fb27e8b",
  "rating": 5
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "1fe4e62f-48bc-4feb-a286-2906c5ce9833",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "contact": {
      "id": "c77cb07d-9d27-4e23-b512-2a418fb27e8b",
      "display_name": "Johnny",
      "partner_name": "Jane Doe",
      "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "brand_id": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "user_id": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "sort_field": "Johnny",
      "last_touch": null,
      "last_touch_action": null,
      "next_touch": null,
      "touch_freq": null,
      "ios_address_book_id": null,
      "android_address_book_id": null,
      "created_at": 1791656560.147586,
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "created_for": "direct_request",
      "updated_for": "direct_request",
      "deleted_for": null,
      "title": null,
      "first_name": "John",
      "partner_first_name": "Jane",
      "middle_name": "M.",
      "last_name": "Doe",
      "partner_last_name": "Doe",
      "marketing_name": null,
      "nickname": "Johnny",
      "email": "[email protected]",
      "primary_email": "[email protected]",
      "emails": [
        "[email protected]"
      ],
      "parked": false,
      "partner_email": "[email protected]",
      "phone_number": "+989124834198",
      "primary_phone_number": "+989124834198",
      "phone_numbers": [
        "+989124834198"
      ],
      "company": "Rechat",
      "birthday": "1970-01-12T00:00:00.000Z",
      "profile_image_url": "https://inomics.com/sites/default/files/pictures/picture-95970-1460131169.png",
      "cover_image_url": "https://inomics.com/sites/default/files/pictures/picture-95970-1460131169.png",
      "job_title": "Contact Test Subject",
      "source_type": "ExplicitlyCreated",
      "source": null,
      "website": [
        "http://www.gholi.com"
      ],
      "tags": [
        "poo",
        "foo",
        "New"
      ],
      "address": [
        {
          "city": "Dallas",
          "full": "Street, Dallas Texas 72890",
          "name": "Street",
          "type": "stdaddr",
          "extra": "Office",
          "line1": "Street",
          "line2": "Dallas Texas 72890",
          "state": "Texas",
          "country": "US",
          "postcode": "72890"
        }
      ],
      "type": "contact"
    },
    "content": "This is an amazing real estate service! They helped us find our dream home.",
    "rating": 5,
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "deleted_at": null,
    "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "updated_by": null,
    "captured_at": 1791656559.69392,
    "tags": [],
    "source": "Manual",
    "zillow_review": null,
    "google_review": null,
    "published_at": null,
    "testimonialtree_review": null,
    "type": "testimonial"
  }
}

Update a testimonial

Update a testimonial
PUT/brands/:id/testimonials/:testimonial

Example URI

PUT /brands/:id/testimonials/:testimonial
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
testimonial
string (required) Example: 1fe4e62f-48bc-4feb-a286-2906c5ce9833
associations
string (required) Example: testimonial.contact
Request
HideShow
Body
{
  "content": "Updated testimonial content - even better service!",
  "contact": "c77cb07d-9d27-4e23-b512-2a418fb27e8b",
  "rating": 4
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "1fe4e62f-48bc-4feb-a286-2906c5ce9833",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "contact": {
      "id": "c77cb07d-9d27-4e23-b512-2a418fb27e8b",
      "display_name": "Johnny",
      "partner_name": "Jane Doe",
      "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "brand_id": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
      "user_id": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "sort_field": "Johnny",
      "last_touch": null,
      "last_touch_action": null,
      "next_touch": null,
      "touch_freq": null,
      "ios_address_book_id": null,
      "android_address_book_id": null,
      "created_at": 1791656560.147586,
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "created_for": "direct_request",
      "updated_for": "direct_request",
      "deleted_for": null,
      "title": null,
      "first_name": "John",
      "partner_first_name": "Jane",
      "middle_name": "M.",
      "last_name": "Doe",
      "partner_last_name": "Doe",
      "marketing_name": null,
      "nickname": "Johnny",
      "email": "[email protected]",
      "primary_email": "[email protected]",
      "emails": [
        "[email protected]"
      ],
      "parked": false,
      "partner_email": "[email protected]",
      "phone_number": "+989124834198",
      "primary_phone_number": "+989124834198",
      "phone_numbers": [
        "+989124834198"
      ],
      "company": "Rechat",
      "birthday": "1970-01-12T00:00:00.000Z",
      "profile_image_url": "https://inomics.com/sites/default/files/pictures/picture-95970-1460131169.png",
      "cover_image_url": "https://inomics.com/sites/default/files/pictures/picture-95970-1460131169.png",
      "job_title": "Contact Test Subject",
      "source_type": "ExplicitlyCreated",
      "source": null,
      "website": [
        "http://www.gholi.com"
      ],
      "tags": [
        "poo",
        "foo",
        "New"
      ],
      "address": [
        {
          "city": "Dallas",
          "full": "Street, Dallas Texas 72890",
          "name": "Street",
          "type": "stdaddr",
          "extra": "Office",
          "line1": "Street",
          "line2": "Dallas Texas 72890",
          "state": "Texas",
          "country": "US",
          "postcode": "72890"
        }
      ],
      "type": "contact"
    },
    "content": "Updated testimonial content - even better service!",
    "rating": 4,
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "deleted_at": null,
    "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "updated_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "captured_at": 1791656559.69392,
    "tags": [],
    "source": "Manual",
    "zillow_review": null,
    "google_review": null,
    "published_at": null,
    "testimonialtree_review": null,
    "type": "testimonial"
  }
}

Delete a testimonial

Delete a testimonial
DELETE/brands/:id/testimonials/:testimonial

Example URI

DELETE /brands/:id/testimonials/:testimonial
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
testimonial
string (required) Example: 1fe4e62f-48bc-4feb-a286-2906c5ce9833
Response  204

Get testimonial settings

Get testimonial settings
GET/brands/:id/testimonials/settings

Returns the testimonial capture settings for a brand, including the template instance used for the capture form.

Example URI

GET /brands/:id/testimonials/settings
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
associations
string (required) Example: testimonial_settings.template_instance
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "7020ccef-2a93-416a-9e7b-184b2e143910",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "template_instance": {
      "id": "9dbdd2b4-4129-427e-857c-d74d53f9a24f",
      "created_at": 1791656559.69392,
      "html": "SOME HTML",
      "file": {
        "id": "a1671b77-3f49-47fc-857c-9b29f52c9cad",
        "created_at": 1791656560.600387,
        "updated_at": 1791656560.600387,
        "deleted_at": null,
        "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
        "path": "templates/instances/940b7e70-c4d7-11f1-89da-fb554657817f.png",
        "name": "image.png",
        "public": true,
        "type": "file",
        "url": "https://test.cloudfront.net/templates/instances/940b7e70-c4d7-11f1-89da-fb554657817f.png",
        "preview_url": "https://test.cloudfront.net/templates/instances/940b7e70-c4d7-11f1-89da-fb554657817f.png",
        "mime": "image/png"
      },
      "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "branch": "http://mock-branch-url",
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "type": "template_instance"
    },
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "collection_method": "Rechat",
    "user": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "google_business_account": null,
    "google_business_location": null,
    "type": "testimonial_settings"
  }
}

Upsert testimonial settings

Upsert testimonial settings
PUT/brands/:id/testimonials/settings

Creates or updates the testimonial capture settings for the authenticated user. At least one of template_instance or collection_method must be provided.

Body fields:

Field Type Required Description
template_instance uuid no* Template instance for the Rechat capture form
collection_method string no* One of Rechat, Google, or Zillow. Defaults to Rechat when omitted — required dependencies are enforced (e.g. Google needs both google_business_account and google_business_location).

* one of the two is required.

TestimonialTree cannot be set here: it is only set by GET /testimonialtree/auth/done when an agent connects their Testimonial Tree account.

Example URI

PUT /brands/:id/testimonials/settings
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
associations
string (required) Example: testimonial_settings.template_instance
Request
HideShow
Body
{
  "template_instance": "9dbdd2b4-4129-427e-857c-d74d53f9a24f"
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "7020ccef-2a93-416a-9e7b-184b2e143910",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "template_instance": {
      "id": "9dbdd2b4-4129-427e-857c-d74d53f9a24f",
      "created_at": 1791656559.69392,
      "html": "SOME HTML",
      "file": {
        "id": "a1671b77-3f49-47fc-857c-9b29f52c9cad",
        "created_at": 1791656560.600387,
        "updated_at": 1791656560.600387,
        "deleted_at": null,
        "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
        "path": "templates/instances/940b7e70-c4d7-11f1-89da-fb554657817f.png",
        "name": "image.png",
        "public": true,
        "type": "file",
        "url": "https://test.cloudfront.net/templates/instances/940b7e70-c4d7-11f1-89da-fb554657817f.png",
        "preview_url": "https://test.cloudfront.net/templates/instances/940b7e70-c4d7-11f1-89da-fb554657817f.png",
        "mime": "image/png"
      },
      "created_by": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
      "branch": "http://mock-branch-url",
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "type": "template_instance"
    },
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "collection_method": "Rechat",
    "user": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "google_business_account": null,
    "google_business_location": null,
    "type": "testimonial_settings"
  }
}

Search Zillow reviewees

Search Zillow reviewees
GET/zillow/reviewees/search{?q}

Searches the global Zillow reviewees catalog. Used by the web client to populate the picker UI before calling [PUT /brands/:id/testimonials/zillow]. The match is a case-insensitive substring (ILIKE '%q%') OR’d across screen_name, full_name, business_name, and email.

Query parameters:

Field Type Required Description
q string yes Search term — minimum 2 characters
limit integer no Max results (default 20, capped at 50)

Example URI

GET /zillow/reviewees/search?q=testagent
URI Parameters
HideShow
q
string (required) Example: testagent
Response  200
HideShow
Body
{
  "code": "OK",
  "data": [
    {
      "id": "d5e91494-28a1-4f42-ad85-e79e6ba7df0d",
      "reviewee_key": "test-reviewee-key-1",
      "account_id": "test-account-1",
      "screen_name": "testagent",
      "full_name": "Test Agent",
      "title": "Real Estate Agent",
      "email": "[email protected]",
      "business_name": "Test Realty",
      "profile_url": "https://www.zillow.com/profile/testagent",
      "review_request_url": "https://www.zillow.com/profile/testagent/review",
      "review_count": 0,
      "average_review_rating": null,
      "bridge_modification_timestamp": "2026-01-01T00:00:00.000Z",
      "created_at": 1791656559.69392,
      "updated_at": 1791656559.69392,
      "deleted_at": null,
      "type": "zillow_reviewee"
    }
  ],
  "info": {
    "count": 1,
    "total": 0
  }
}

Connect Zillow

Connect Zillow
PUT/brands/:id/testimonials/zillow

Links a Zillow reviewee to the authenticated user’s testimonial settings for the brand, sets collection_method to Zillow, and, by default, imports existing reviews as testimonials.

Body fields:

Field Type Required Description
zillow_reviewee uuid yes The Zillow reviewee to associate with the user’s settings
import boolean no Whether to import existing Zillow reviews (defaults to true)

Example URI

PUT /brands/:id/testimonials/zillow
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
Request
HideShow
Body
{
  "zillow_reviewee": "d5e91494-28a1-4f42-ad85-e79e6ba7df0d",
  "import": false
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "7020ccef-2a93-416a-9e7b-184b2e143910",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "collection_method": "Zillow",
    "user": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "google_business_account": null,
    "google_business_location": null,
    "type": "testimonial_settings"
  }
}

Disconnect Zillow

Disconnect Zillow
DELETE/brands/:id/testimonials/zillow

Clears the Zillow reviewee from the authenticated user’s testimonial settings for the brand. If collection_method was Zillow, it is reset to Rechat. Idempotent — returns 204 even if no settings row exists or Zillow was never connected. Previously imported testimonials are kept.

Example URI

DELETE /brands/:id/testimonials/zillow
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
Response  204

Connect Google Business Profile

Connect Google Business Profile
PUT/brands/:id/testimonials/google

Links a Google Business Profile account to the authenticated user’s testimonial settings for the brand, sets collection_method to Google, and, by default, imports existing reviews as testimonials. Reviews from every location under the selected account are pulled. A recurring background sync job is also scheduled.

The caller identifies which Google credential to use via gcid. Use [GET /users/self/google] to list the user’s connected Google accounts, and [GET /users/google/:gcid/business-profile-accounts] to list the GBP accounts available under a given credential.

Returns 412 GoogleBusinessProfileAuthenticationRequired when the credential does not include the business_profile scope.

Body fields:

Field Type Required Description
gcid uuid yes The Google credential to use. Must belong to the authenticated user and have the business_profile scope.
google_business_account string yes Resource name of the GBP account (e.g. accounts/12345). Must be one of the accounts returned by the picker endpoint.
google_business_location string no Resource name of a location under the account (e.g. locations/67890). Required to redirect the public capture page to Google — its metadata.newReviewUri is what users are redirected to.
import boolean no Whether to pull and import existing reviews now (defaults to true). When false, only the recurring sync job is scheduled.

Example URI

PUT /brands/:id/testimonials/google
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
Request
HideShow
Body
{
  "gcid": "5ccf8eb7-a27e-477e-aec5-d3d1b165f217",
  "google_business_account": "accounts/111",
  "google_business_location": "locations/222"
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "7020ccef-2a93-416a-9e7b-184b2e143910",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "collection_method": "Google",
    "user": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "google_business_account": "accounts/111",
    "google_business_location": "locations/222",
    "type": "testimonial_settings"
  }
}

Disconnect Google Business Profile

Disconnect Google Business Profile
DELETE/brands/:id/testimonials/google

Clears the Google Business Profile account and location from the authenticated user’s testimonial settings for the brand. If collection_method was Google, it is reset to Rechat. Idempotent — returns 204 even if no settings row exists or Google was never connected. Previously imported testimonials and the recurring sync job are kept.

Example URI

DELETE /brands/:id/testimonials/google
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
Response  204

Complete Testimonial Tree connection

Complete Testimonial Tree connection
GET/testimonialtree/auth/done{?code,state}

Public callback of the Testimonial Tree authorization flow, registered with Testimonial Tree as https://api.rechat.com/testimonialtree/auth/done. It exchanges the code for tokens, reads the connected agent from GET /api/v1/partner/me, stores the connection on the user’s testimonial settings and sets their collection_method to TestimonialTree.

On success the response is an HTML page that posts success to the window that opened the popup, with a rechat://testimonialtree-authenticated redirect as fallback. Failures (a refused consent screen, an invalid state, a failed token exchange) return an error response instead.

Tokens are stored encrypted; access tokens last 15 minutes, refresh tokens 30 days. Connecting also pulls the agent’s existing testimonials — see Sync Testimonial Tree testimonials for what gets imported.

Example URI

GET /testimonialtree/auth/done?code=test-authorization-code&state=not-a-valid-state
URI Parameters
HideShow
code
string (required) Example: test-authorization-code
state
string (required) Example: not-a-valid-state
Response  200
Response  400
HideShow
Body
{
  "trace": true,
  "http": 400,
  "message": "TestimonialTree state is invalid",
  "code": "BadRequest"
}

Sync Testimonial Tree testimonials

Sync Testimonial Tree testimonials
POST/brands/:id/testimonials/testimonialtree/sync

Pulls the connected agent’s testimonials from GET /api/v1/partner/testimonials and imports them as testimonials with source TestimonialTree. This runs automatically when the agent connects, and every 4 hours afterwards for each connected agent (a full pass once a day); this endpoint is for a “sync now” action. It returns the caller’s testimonial settings.

What is imported:

  • Every testimonial the agent has, public and private. Testimonials deleted or pending/blocked in moderation never come back from their API.

  • Public ones (isPublic: true) are imported published: published_at is set to the testimonial’s date.

  • Private ones are imported unpublished: published_at stays null, so they only come back when the listing is fetched without published_only. They are the agent’s own material to pick from.

  • Each testimonial is linked to a contact for its reviewer. Testimonial Tree never sends reviewer emails, so the contact is matched on the reviewer’s display name and, when there is no match, created with a source_type of TestimonialTreeReviews.

Syncs are idempotent — their testimonial id is the dedupe key — and incremental runs only ask for testimonials updated since the last pass. A testimonial deleted or unpublished on their side simply drops out of the results, so a full pass (daily) is what notices that; a removal on their side does not delete the testimonial here.

Returns 412 TestimonialTreeAuthenticationRequired when the stored refresh token no longer works; the agent has to connect again.

Example URI

POST /brands/:id/testimonials/testimonialtree/sync
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "7020ccef-2a93-416a-9e7b-184b2e143910",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "collection_method": "TestimonialTree",
    "user": "5d65a582-04dd-441f-8fc1-4b24ffb39fe9",
    "google_business_account": null,
    "google_business_location": null,
    "type": "testimonial_settings"
  }
}

Disconnect Testimonial Tree

Disconnect Testimonial Tree
DELETE/brands/:id/testimonials/testimonialtree

Clears the Testimonial Tree connection from the authenticated user’s testimonial settings for the brand and revokes the stored credential. If collection_method was TestimonialTree, it is reset to Rechat. Idempotent — returns 204 even if no settings row exists or Testimonial Tree was never connected. Previously imported testimonials are kept.

Example URI

DELETE /brands/:id/testimonials/testimonialtree
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
Response  204

Testimonial capture form

Testimonial capture form
GET/brands/:id/testimonials/:user/capture{?contact,s}

Public endpoint (no authentication required). Routes based on the user’s collection_method:

  • Zillow — 302 redirect to the Zillow reviewee’s review_request_url.

  • Google — looks up the connected location’s metadata.newReviewUri via the Business Information API (using the user’s stored credential) and 302 redirects to it.

  • TestimonialTree — 302 redirect to the connected agent’s Testimonial Tree collection link, prefilled with the contact’s name, email and company.

  • Rechat (default) — renders the Rechat capture form HTML (uses the stored template instance, or falls back to the brand’s TestimonialCapture template).

Optional query parameter contact (uuid) can be passed to pre-populate contact data in the Rechat form, and to prefill the Testimonial Tree collection link. Optional query parameter s (integer between 1 and 5) is passed on to Testimonial Tree as the star rating.

Example URI

GET /brands/:id/testimonials/:user/capture?contact=c77cb07d-9d27-4e23-b512-2a418fb27e8b&s=5
URI Parameters
HideShow
s
string (required) Example: 5
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
user
string (required) Example: 5d65a582-04dd-441f-8fc1-4b24ffb39fe9
contact
string (required) Example: c77cb07d-9d27-4e23-b512-2a418fb27e8b
Response  302
Response  302
Response  302
Response  200
HideShow
Body
SOME HTML

Capture a testimonial

Capture a testimonial
POST/brands/:id/testimonials/:user

Public endpoint (no authentication required). Submits a testimonial from a client on behalf of the agent identified by :user. On success, the created testimonial is returned and the agent is notified via email asynchronously.

Body fields:

Field Type Required Description
contact uuid yes The contact who is giving the testimonial
content string yes The testimonial text content
rating integer no Rating from 1-5

Example URI

POST /brands/:id/testimonials/:user
URI Parameters
HideShow
id
string (required) Example: ebc024b1-b9ae-4480-98ec-b854eda28cd4
user
string (required) Example: 5d65a582-04dd-441f-8fc1-4b24ffb39fe9
Request
HideShow
Body
{
  "contact": "c77cb07d-9d27-4e23-b512-2a418fb27e8b",
  "content": "Best agent ever — highly recommend!",
  "rating": 5
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "75a66560-524d-4108-80bf-e44025664588",
    "brand": "ebc024b1-b9ae-4480-98ec-b854eda28cd4",
    "content": "Best agent ever — highly recommend!",
    "rating": 5,
    "created_at": 1791656559.69392,
    "updated_at": 1791656559.69392,
    "deleted_at": null,
    "created_by": null,
    "updated_by": null,
    "captured_at": 1791656559.69392,
    "tags": [],
    "source": "Rechat",
    "zillow_review": null,
    "google_review": null,
    "published_at": null,
    "testimonialtree_review": null,
    "type": "testimonial"
  }
}

Generated by aglio on 10 Oct 2026