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)
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 Optional pin — Rechat, Google, or Zillow. When set, the public capture page skips the chooser and goes straight to that destination.
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)

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: 500b5876-5466-4f9c-888d-45b8bdf98e92
Response  200
HideShow
Body
{
  "code": "OK",
  "data": [
    {
      "id": "edab9d40-3c3f-4c43-8aff-ecba3dd643ab",
      "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
      "content": "This is an amazing real estate service! They helped us find our dream home.",
      "rating": 5,
      "created_at": 1778872337.006007,
      "updated_at": 1778872337.006007,
      "deleted_at": null,
      "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "updated_by": null,
      "captured_at": 1778872337.006007,
      "tags": [],
      "source": "Manual",
      "zillow_review": null,
      "google_review": null,
      "type": "testimonial"
    },
    {
      "id": "4256d612-f852-402b-a62c-e7854d5ec8e7",
      "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
      "content": "This is an amazing real estate service! They helped us find our dream home.",
      "rating": 5,
      "created_at": 1778872337.006007,
      "updated_at": 1778872337.006007,
      "deleted_at": null,
      "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "updated_by": null,
      "captured_at": 1778872337.006007,
      "tags": [],
      "source": "Manual",
      "zillow_review": null,
      "google_review": null,
      "type": "testimonial"
    },
    {
      "id": "5de33c9d-0f11-4d16-a782-a23f6041fdde",
      "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
      "content": "Great service!",
      "rating": null,
      "created_at": 1778872337.006007,
      "updated_at": 1778872337.006007,
      "deleted_at": null,
      "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "updated_by": null,
      "captured_at": 1778872337.006007,
      "tags": [],
      "source": "Manual",
      "zillow_review": null,
      "google_review": null,
      "type": "testimonial"
    }
  ],
  "info": {
    "count": 3,
    "total": 0
  }
}

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: 500b5876-5466-4f9c-888d-45b8bdf98e92
testimonial
string (required) Example: edab9d40-3c3f-4c43-8aff-ecba3dd643ab
associations
string (required) Example: testimonial.contact
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "edab9d40-3c3f-4c43-8aff-ecba3dd643ab",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "contact": {
      "id": "43450275-8d50-4343-b061-0c0c64f33a8b",
      "display_name": "Johnny",
      "partner_name": "Jane Doe",
      "brand": "f4d3503d-6646-4319-9c45-324ab0176ffd",
      "brand_id": "f4d3503d-6646-4319-9c45-324ab0176ffd",
      "user_id": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "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": 1778872338.660905,
      "updated_at": 1778872337.006007,
      "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": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "deleted_at": null,
    "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "updated_by": null,
    "captured_at": 1778872337.006007,
    "tags": [],
    "source": "Manual",
    "zillow_review": null,
    "google_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: 500b5876-5466-4f9c-888d-45b8bdf98e92
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": "43450275-8d50-4343-b061-0c0c64f33a8b",
  "rating": 5
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "edab9d40-3c3f-4c43-8aff-ecba3dd643ab",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "contact": {
      "id": "43450275-8d50-4343-b061-0c0c64f33a8b",
      "display_name": "Johnny",
      "partner_name": "Jane Doe",
      "brand": "f4d3503d-6646-4319-9c45-324ab0176ffd",
      "brand_id": "f4d3503d-6646-4319-9c45-324ab0176ffd",
      "user_id": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "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": 1778872338.660905,
      "updated_at": 1778872337.006007,
      "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": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "deleted_at": null,
    "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "updated_by": null,
    "captured_at": 1778872337.006007,
    "tags": [],
    "source": "Manual",
    "zillow_review": null,
    "google_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: 500b5876-5466-4f9c-888d-45b8bdf98e92
testimonial
string (required) Example: edab9d40-3c3f-4c43-8aff-ecba3dd643ab
associations
string (required) Example: testimonial.contact
Request
HideShow
Body
{
  "content": "Updated testimonial content - even better service!",
  "contact": "43450275-8d50-4343-b061-0c0c64f33a8b",
  "rating": 4
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "edab9d40-3c3f-4c43-8aff-ecba3dd643ab",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "contact": {
      "id": "43450275-8d50-4343-b061-0c0c64f33a8b",
      "display_name": "Johnny",
      "partner_name": "Jane Doe",
      "brand": "f4d3503d-6646-4319-9c45-324ab0176ffd",
      "brand_id": "f4d3503d-6646-4319-9c45-324ab0176ffd",
      "user_id": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "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": 1778872338.660905,
      "updated_at": 1778872337.006007,
      "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": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "deleted_at": null,
    "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "updated_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "captured_at": 1778872337.006007,
    "tags": [],
    "source": "Manual",
    "zillow_review": null,
    "google_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: 500b5876-5466-4f9c-888d-45b8bdf98e92
testimonial
string (required) Example: edab9d40-3c3f-4c43-8aff-ecba3dd643ab
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: 500b5876-5466-4f9c-888d-45b8bdf98e92
associations
string (required) Example: testimonial_settings.template_instance
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "bb1f3048-7677-40c6-89e6-75a39b52ff36",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "template_instance": {
      "id": "df18b76d-3c4f-46c3-a666-0df766e27ff7",
      "created_at": 1778872337.006007,
      "html": "SOME HTML",
      "file": {
        "id": "a495d623-2d63-400e-924b-c4542b0c56cf",
        "created_at": 1778872340.597857,
        "updated_at": 1778872340.597857,
        "deleted_at": null,
        "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
        "path": "templates/instances/ff1f7e10-5091-11f1-8248-cf8ab660e2ca.png",
        "name": "image.png",
        "public": true,
        "type": "file",
        "url": "https://test.cloudfront.net/templates/instances/ff1f7e10-5091-11f1-8248-cf8ab660e2ca.png",
        "preview_url": "https://test.cloudfront.net/templates/instances/ff1f7e10-5091-11f1-8248-cf8ab660e2ca.png",
        "mime": "image/png"
      },
      "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "branch": "http://mock-branch-url",
      "updated_at": 1778872337.006007,
      "deleted_at": null,
      "type": "template_instance"
    },
    "created_at": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "collection_method": null,
    "user": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "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. Pins the public capture page to that destination — required dependencies are enforced (e.g. Google needs both google_business_account and google_business_location).

* one of the two is required.

Example URI

PUT /brands/:id/testimonials/settings
URI Parameters
HideShow
id
string (required) Example: 500b5876-5466-4f9c-888d-45b8bdf98e92
associations
string (required) Example: testimonial_settings.template_instance
Request
HideShow
Body
{
  "template_instance": "df18b76d-3c4f-46c3-a666-0df766e27ff7"
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "bb1f3048-7677-40c6-89e6-75a39b52ff36",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "template_instance": {
      "id": "df18b76d-3c4f-46c3-a666-0df766e27ff7",
      "created_at": 1778872337.006007,
      "html": "SOME HTML",
      "file": {
        "id": "a495d623-2d63-400e-924b-c4542b0c56cf",
        "created_at": 1778872340.597857,
        "updated_at": 1778872340.597857,
        "deleted_at": null,
        "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
        "path": "templates/instances/ff1f7e10-5091-11f1-8248-cf8ab660e2ca.png",
        "name": "image.png",
        "public": true,
        "type": "file",
        "url": "https://test.cloudfront.net/templates/instances/ff1f7e10-5091-11f1-8248-cf8ab660e2ca.png",
        "preview_url": "https://test.cloudfront.net/templates/instances/ff1f7e10-5091-11f1-8248-cf8ab660e2ca.png",
        "mime": "image/png"
      },
      "created_by": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
      "branch": "http://mock-branch-url",
      "updated_at": 1778872337.006007,
      "deleted_at": null,
      "type": "template_instance"
    },
    "created_at": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "collection_method": null,
    "user": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "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": "d3b155f4-68fc-4a49-a76c-396e3e1dc9bb",
      "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": 1778872337.006007,
      "updated_at": 1778872337.006007,
      "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 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: 500b5876-5466-4f9c-888d-45b8bdf98e92
Request
HideShow
Body
{
  "zillow_reviewee": "d3b155f4-68fc-4a49-a76c-396e3e1dc9bb",
  "import": false
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "bb1f3048-7677-40c6-89e6-75a39b52ff36",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "created_at": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "collection_method": null,
    "user": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "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 pinned to Zillow, it is also cleared so the row remains valid against the database constraint. 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: 500b5876-5466-4f9c-888d-45b8bdf98e92
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 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 expose the Google option on the public capture page — 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: 500b5876-5466-4f9c-888d-45b8bdf98e92
Request
HideShow
Body
{
  "gcid": "f2ed88ad-7785-487c-9acb-0ed2339fdd59",
  "google_business_account": "accounts/111",
  "google_business_location": "locations/222"
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "bb1f3048-7677-40c6-89e6-75a39b52ff36",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "created_at": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "collection_method": null,
    "user": "80a227b2-29a0-11e7-b636-e4a7a08e15d4",
    "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 pinned to Google, it is also cleared so the row remains valid against the database constraint. 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: 500b5876-5466-4f9c-888d-45b8bdf98e92
Response  204

Testimonial capture form

Testimonial capture form
GET/brands/:id/testimonials/:user/capture{?method}

Public endpoint (no authentication required). Behavior:

  1. If collection_method is set on the user’s settings, that wins — the request is treated as if ?method= matched it (Zillow/Google → 302 redirect, Rechat → rendered form). The ?method= query parameter is ignored in this case.

  2. Otherwise, if ?method=zillow|google|rechat is provided, route accordingly.

  3. Otherwise, if at least one external destination (Google or Zillow) is connected, render a chooser page listing the available options plus None (Rechat). Each link re-hits this endpoint with ?method=....

  4. Otherwise, render the Rechat capture form HTML (uses the stored template instance, or falls back to the brand’s TestimonialCapture template).

Method semantics:

  • method=zillow302 redirect to the Zillow reviewee’s review_request_url.

  • method=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.

  • method=rechat — renders the Rechat capture form HTML.

Optional query parameter contact (uuid) can be passed to pre-populate contact data in the Rechat form.

Example URI

GET /brands/:id/testimonials/:user/capture?method=google
URI Parameters
HideShow
method
string (required) Example: google
id
string (required) Example: 500b5876-5466-4f9c-888d-45b8bdf98e92
user
string (required) Example: 80a227b2-29a0-11e7-b636-e4a7a08e15d4
Response  200
HideShow
Body
<!doctype html>
        <html lang="en">
        <head>
        <meta charset="utf-8">
        <title>Leave a testimonial</title>
        </head>
        <body>
        <h1>Leave a testimonial</h1>
        <p>Choose where you'd like to leave your review:</p>
        <ul>

      <li><a href="/brands/500b5876-5466-4f9c-888d-45b8bdf98e92/testimonials/80a227b2-29a0-11e7-b636-e4a7a08e15d4/capture?method=google">Google</a></li>

      <li><a href="/brands/500b5876-5466-4f9c-888d-45b8bdf98e92/testimonials/80a227b2-29a0-11e7-b636-e4a7a08e15d4/capture?method=zillow">Zillow</a></li>

      <li><a href="/brands/500b5876-5466-4f9c-888d-45b8bdf98e92/testimonials/80a227b2-29a0-11e7-b636-e4a7a08e15d4/capture?method=rechat">None</a></li>

    </ul>
    </body>
    </html>
Response  302
Response  302
Response  302

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: 500b5876-5466-4f9c-888d-45b8bdf98e92
user
string (required) Example: 80a227b2-29a0-11e7-b636-e4a7a08e15d4
Request
HideShow
Body
{
  "contact": "43450275-8d50-4343-b061-0c0c64f33a8b",
  "content": "Best agent ever — highly recommend!",
  "rating": 5
}
Response  200
HideShow
Body
{
  "code": "OK",
  "data": {
    "id": "94adeaed-5b33-486e-a401-67a0b402aa6f",
    "brand": "500b5876-5466-4f9c-888d-45b8bdf98e92",
    "content": "Best agent ever — highly recommend!",
    "rating": 5,
    "created_at": 1778872337.006007,
    "updated_at": 1778872337.006007,
    "deleted_at": null,
    "created_by": null,
    "updated_by": null,
    "captured_at": 1778872337.006007,
    "tags": [],
    "source": "Rechat",
    "zillow_review": null,
    "google_review": null,
    "type": "testimonial"
  }
}

Generated by aglio on 15 May 2026